MagicMirror² v2.14.0 is available! For more information about this release, check out this topic.

Complete Setup Tutorial

  • Moderator

    What will follow this post will be a series of steps to go from taking a brand new raspberry Pi 3 out of the box to having MagicMirror² up and running. I will try to keep things in order but that’s no guarantee. I will however link each post back into this one in the correct order, so you’d be able to just click on the link and jump straight to that specific post.

    The Raspberri Pi setup is as follows:

    Note: I have no affiliation with the listed vendors. I list them because that’s where I got the parts from. You can buy them wherever you buy your daily dose of electronics.

    • Raspberry Pi 3 - Model B - ARMv8 with 1GB of RAM (Adafruit)
    • 5V/2.4A Power supply (Adafruit)
    • 8GB Sandisk Ultra Class 10 MicroSDHC card (Amazon)
    • ASUS ProArt PA248Q Monitor (Amazon)
    • Belkin 6’ HDMI Cable (Amazon)
    • Mini 2.4G Wireless Keyboard & Mouse Combo (eBay)


    1. The Raspberry Pi 3 needs a hefty power supply to run. You don’t need a 2.4Amp one, but I wouldn’t go below 2Amps.
    2. You want a high speed SD card. Since the entire OS runs off of it, get a fast one. has a comprehensive list of what’s tested and works. You can find the list here.
    3. Monitor and choice of cable is obviously up to you.
    4. I use a mini keyboard for any/all of my projects that require a temporary solution. Even those that need a permanent one. They’re smaller than a regular sized one. And this one in particular is also rather thin. And I like that they are wireless. it cuts down on the cords needed to be connected to the device itself. These ones have a miniature USB dongle. Again, personal choice.
    5. I will be running this wirelessly and will make a note of it again in the setup part.
    6. I will be using my Windows 10 system for the initial setup of the card containing the operating system. What you use is up to you, however keep in mind that any screen captures I take and any software I use during this process will be from a Windows 10 platform.
    7. DO NOT INSTALL MagicMirror² as the root user! Always do it as the regular, non privileged pi user and learn to use the sudo command instead. “But why?”, you ask, “… if it’s in my house, and on my network, and not on the internet.” That’s all fine, however we don’t control every possible module that others contribute and someone, or something, could expose your Raspberry Pi, or your entire network to the outside world. Just don’t do it.
    8. This entire tutorial is based on you having physical access to the Raspberry Pi. After all, you will need that to set it up, but even at the end, installing MagicMirror², it is assumed you are doing that directly on the Raspberry Pi, and not through a remote SSH login.

    Section 1: Preparing the SD card with the operating system
    Section 2: Booting up the Raspberry Pi and configuring it
    Section 3: Configuring wireless networking
    Section 4: Cleaning up and updating the operating system
    Section 5: Installing MagicMirror² & Configuring Raspberry Pi for MagicMirror²
    Section #: … beer?

  • Moderator

    Preparing the SD card

    This may seem dumb but if not done properly, you may end up with a card showing you less available storage than it actually has on it. Specially if you are trying to redo it because you made a mistake and have to start over.

    Required tools:
    (I will leave the installing of these as an exercise to the user. I’m not going to cover that here.)
    7-Zip: (because Window’s builtin Zip facility is extremely slow)
    SD Card Formatter:
    Win32 Disk Imager:

    Step 1
    Download the operating system from the Raspberry Pi Foundation web site:
    As of this writing, the most recent version is Jessie, released May 27th, 2016. You want to pick the full Jessie image.


    Step 2
    Once you’ve downloaded the file, find it in whatever location you saved it and right click on it. On the context menu, pick 7-zip -> Extract Here.



    Step 3
    While the file is extracting, you can start preparing the SD card itself. Pop it into your reader and open SDFormatter. Make sure the drive letter is the correct one. The Volume Label doesn’t matter since it will get overwritten anyway. (In the screen capture, you can see the Size at 60MB. That’s because I had previously used this card on a Raspberry Pi, and since Windows can’t read that partition, it only lists 60MB. In order to fix that, you must perform the following steps!)


    Click on Option and select FULL (erase) as the FORMAT TYPE




    Next click on the Format button and wait a few seconds. You may get an error about something being unsupported, that’s fine, you can ignore it. If all went well, at the end of the format, the screen will look like this:


    Notice the Size, it should list the approximate size of the card, in this case it’s an 8GB card, so that number is correct.)

    Step 4
    Now it’s time to write the operating system image onto the card. It should be done extracting by now and you should have an .img file now. For the May 27th release, the file name is 2016-05-27-raspbian-jessie.img. For this step, you’re going to use the Win32 Disk Imager software. It must be run as the Administrator user, otherwise it will fail.

    Click on Start, find the program in your menu, right-click on the name of it and select Run as Administrator. On my Windows 10 system, the menu looks like this:


    When the program launches, click on the tiny folder icon to the right of the empty field, then browse to where your Raspbian Jessie image is located and select it. Again, verify the drive letter to the right of that! While the program will only pick external drives, if you happen to have something else in your reader, it will happily list it and possibly write to it if you don’t check that.


    Once you’ve checked the correct drive, click on Write and wait for it to finish.




    Once completed, Eject the card. I know that sounds silly, but I know way too many people who don’t know to Eject any cards or USB thumbdrives.They simply yank them out. There’s only a small number of brands on the market that will be fine if you yank them out, however the majority should be ejected first. That will signal any latent process to finish writing to the card or drive before unmounting it from the operating system. You are now ready to insert the card into your Raspberry Pi and boot it up for the first time.

  • Moderator

    Booting up the Raspberry Pi and configuring it

    Now that we have the operating system on the card, we’re ready to boot up the Raspberry Pi (rpi). Put the card into the slot on the bottom of the rpi, plug in your monitor cable, turn the monitor on. Whether you are using a wired or wireless keyboard and mouse, make sure those are plugged in, then plug in power to the rpi itself.

    The first boot up takes a bit longer than usual because it’s reconfiguring itself and setting all the defaults. If all went well, it should boot straight into the graphical interface. I apologize but I forgot to take a screen capture of this, but in the upper menu, click on the Terminal icon. It looks like a black monitor. This opens up a black terminal window, logged in as the pi user.

    We are now going to run through the basic configuration of the rpi itself. This will result in a rather long post with lost of screen captures. You’ve been warned. 🙂

    Step 1
    In the terminal window, type in sudo raspi-config and hit return/enter. This will launch the Raspberry Pi Software Configuration Tool. (Navigation is done with the arrow keys, the TAB key allows you to jump from the selection menu to the buttons on the bottom, and the space bar is used to select or un-select menu items.)


    The first item, Expand Filesystem is already highlighted for you, so just hit enter/return on that. This will instruct the rpi to resize the partition to use the full size of the card.


    You do not need to immediately reboot, so let’s move on.

    Step 2
    Now we’re going to configure the Internationalisation Options. This will configure your rpi to use the correct language, timezone, and others. Select that option (5) and hit enter/return.


    Select the first option, Change Locale (I1)


    Now scroll to your preferred language using the up/down arrow keys. In my case, I’ll be using US English as opposed to the default GB English. Press your space bar to select your preferred language, and don’t forget to un-select the default. one. And I specifically picked the UTF version because it supports any Unicode character. ISO-8859-1 only supports the first 256 characters.



    Once you complete that step, you’re back at the main menu. Select the Internationalisation Options again, and go to the second option, Change Timezone (I2)


    Start by picking your region, then the respective timezone that you’re in. In my case, I’m in the US, living in the Mountain timezone



    Once again, when you finish that, it takes you back to the main menu. Get back to the Internationalisation Options and pick the third option, Change Keyboard Layout (I3). The default is a standard UK, full size keyboard. If that’s what you’re using, then you don’t need to do this. However, it’s still worth looking at in case you do happen to have a different keyboard. I wanted to change mine to a US keyboard instead.


    By default the Generic 105-key (Intl) PC version is selected. For most cases, that’s fine, just hit enter/return on that and it will take you to the layout option. Note the default UK settings:


    Since I wanted a US layout, I selected Other.


    On the next screens, I picked the English (US) for the country, again English (US) for the layout,The default for the keyboard layout, and No compose key





    At the end of this, it will ask you what you want the CTRL-ALT-Backspace combination to do. Normally it does nothing, but it can be configured so that if you hit that combination, it instantly kills the X-Server (and depending on the OS setup, will restart it fresh.) This was a more applicable when X11 was still in its infancy and things crashed a lot. Over the years, things became more stable, threads started getting removed from the main process, so applications could be killed and restarted without needing to completely kill the X-Server itself. However, it’s still around today. I have yet to have the X-Server on my rpi crash on me, ever. And if things really get completely bogged down, I just restart it remotely. Specially since this isn’t going to have a keyboard on it, there’s no sense in configuring this option, so I left it as No.


    Ok, one more time, go back into Internationalisation Options and pick the last item, Change Wi-fi Country (I4). This will set the correct channel frequencies available. In the US, channels 1 through 11 are common. Channels 12 and 13 are allowed, but for low power only, and channel 14 is forbidden. For the rest of the world, channels 12-13 are not restricted. And for those in Japan, well aren’t you guys special … you get to use channel 14 as well (only specific protocols.)




    Step 3
    Scroll down to Advanced Options and select it. Pick the second option, Hostname (A2). Here you will give your rpi a name. By default it’s raspberrypi but why be like the rest of the world? You can change that.


    Make sure you read the warning that pops up, then set the name to whatever you want. For example, I changed mine to magicpi … after all, it will be running MagicMiror! (the screen shot shows the default setting)


    Once back at the main screen, pick Advanced options again and scroll down to SSH (A4). I like having the SSH server running because it allows me to connect to the rpi from anywhere on my network using a terminal program. So I don’t need to have a keyboard and mouse connected to the rpi itself, I can log into it using a different machine. But if you don’t need/want this, you can turn off/on the SSH server. In this case, I wanted mine turned on



    Optional Camera Step
    Are you using a Raspberry Pi specific camera? If so, you need to enable the rpi to work with it. Scroll down to option 6, Enable Camera and turn it on.


    Step 4
    Done! When you’re back at the main screen after the last step, press the TAB key and highlight Finish at the bottom and hit return/enter. It will ask if you want to restart to which you will say Yes of course.



  • Moderator

    Configuring Wireless

    Tired of the mile long posts? Well, here’s a short one. As I noted earlier, I will be running my rpi wirelessly. If you are physically connecting it to your network using a cable, you can skip this post.

    Step 1
    Once your rpi reboots and you’re back at the graphical desktop, launch the Terminal program (it’s a black monitor icon on the menu bar at the top.) Edit the wpa_supplicant.conf file to add your network information


    Step 2
    At the bottom of the contents, add your network information. Note the quotation marks as this is specially important if you have a space in your wireless network name. Same for the password part. When you’re done editing, press CTRL-X to exit, saying Y(es) to saving the changes.


    Step 3
    Time to reboot and make sure the rpi comes up and successfully connects to your wireless network.


    If all went well, when the rpi reboots and comes back to the graphical desktop, in the upper right corner you should see a familiar blue WiFi icon.


    And if you want to make double sure that it connected, you can open a Terminal window again, and type in ifconfig and look for the wlan0 section


    You’re looking for it to have a valid IP that belongs to your network. The specific private network that this rpi is connected to is in the 192.168.25.x range, so this validates that the rpi connected and received an IP from the DHCP server.

    If you are physically connecting the rpi to a network hub or router, you need to look at the eth0 section at the top.

    So what if it failed? Then you’d want to check a few things:

    • Did you enter the corect information in the wpa_supplicant.conf file above? Go back and check again.
    • Is your wireless router set to block unknown hosts? In a secure environment, it could be (mine is.) Make sure you allow it to connect and receive an IP from the router.
    • Are you in range of the wireless router?

  • Moderator

    Cleaning up and updating the operating system

    Ready for some fun? Let’s clean up the rpi OS and remove some of the big packages and a few things that we won’t need. This is but a small list of apps, but they are by far the biggest ones aside from the X-server itself.

    First, let’s look at the current state of the storage:


    The df command will show you storage across the entire file system (or it can be restricted with specific options.) The -k option shows the values in 1K block format, while the -h option refers to the human readable option, which prints the sizes in powers of 1024. So we can see the /dev/root/ file system is at 48% full. That’s just the default Jessie installation!

    Now, for all intents and purposes, this is just fine. It still has over 50% of the file system free and if you aren’t doing anything else with it, this is fine, you can leave it alone. However, I run all of my systems lean, meaning I will remove all (or most) of the stuff I won’t be using for the specific application. And in this case, I only removed the big space hogs that I know I will never use. There are a lot of packages that you could remove, since MM does not need them, but I didn’t care to do that … yet. So let’s move on.

    Step 1
    Remove unnecessary software packages. I started with the stuff I know I won’t be using and the big stuff!

    idle3			java-common		libreoffice		minecraft-pi
    scratch			nuscratch		penguinspuzzle		python-minecraftpi
    python3-minecraftpi	smartsim		sonic-pi		wolfram-engine

    The command I used to remove all of them is:
    sudo apt-get remove --purge idle3 java-common libreoffice* minecraft-pi scratch nuscratch penguinspuzzle python-minecraftpi python3-minecraftpi smartsim sonic-pi wolfram-engine

    NOTE: on libreoffice I added a star at the end, making it libreoffice*. This is because there’s a single libreoffice package, as well as several libreoffice-* packages, and if you don’t add the star, it will only remove the one, while leaving all the rest.

    When you run that, it will collect everything that needs removing and present you with a [Y/n] question. Notice the amount of space that’s about to be reclaimed:


    You’re reading that right, a whopping 1,112MB, or 1.1GB worth of space. Let that run and remove all those packages.

    Step 2
    Once completed, we’ll also remove those that aren’t needed anymore:
    sudo apt-get autoremove
    It will present you with a list of packages that aren’t used anymore (since you just removed all those other ones above). Again, say Y(es) to the question:


    Now, for comparison, let’s look at the storage usage again:


    Look at that, we went from 48% full, down to 30%, or from 3.3GB down to 2.1GB used. That’s a lot of space reclaimed!

    Step 3
    Moving on. It’s time to run an update/upgrade on the system packages. You do that by entering the following commands:
    sudo apt-get update
    sudo apt-get upgrade
    Or if you want to do them both together:
    sudo apt-get update ; sudo apt-get upgrade

    First the update:


    Followed by the upgrade:


    So why two separate commands? The update command will refresh the mirror list and available packages from the distribution mirrors. This sets up the next command, upgrade, with the necessary files to compare against. Then the upgrade command will compare all the packages that are currently installed with the mirror lists and show you all the ones that need to be upgraded. You did say Y(es) to that, right?

    Step 4
    The last thing we need to do is make sure the firmware on the rpi is current. Performing a sudo apt-get upgrade does not always trigger this (in fact, I have yet to see it do that), so we’ll do it manually. The command for that is:
    sudo rpi-update


    Note that it requires a reboot once that’s completed. A sudo reboot will get that done for you.

    Now let’s look at the storage usage once more:


    That’s not too shabby at all. 2.3GB out of 7.2GB used … I’m happy with that.

    You are now ready to start installing MagicMirror²!

  • Moderator

    Installing MagicMirror²

    Thanks to @MichMich and his outstanding installation script, installing MagicMirror² is pretty straight forward.

    Step 1
    After you’ve configured and updated your Raspberry Pi and rebooted, launch a Terminal window again and type in
    bash -c "$(curl -sL"

    This will start the installation process for you:

    Step 2
    A few configurations still need to be done on the Raspberry Pi, specific for MagicMirror². Let’s start with rotating the display vertically. For this, you’ll need to edit one of the boot configurations. (Please note: If you plan on running MagicMirror² as a landscape (or wide) display, you do not need to do this.)

    Type in sudo nano /boot/config.txt and add the following to the file. Where you add it doesn’t really matter:

    # Rotate display vertically

    Press CTRL-X when you’re done, and say Y(es) to saving the changes.

    Step 3
    Let’s disable the screen saver and screen blanking as well. This needs to be done in two places. First in the autostart configuration:
    sudo nano /etc/xdg/lxsession/LXDE-pi/autostart

    And add the following to the bottom of the file:

    @xset s noblank
    @xset s off
    @xset -dpms


    Next in the X-windows manager configuration:
    sudo nano /etc/lightdm/lightdm.conf

    Scroll down to the [SeatDefaults] section and look for the xserver-command line below that. Change the line to look like this:
    xserver-command=X -s 0 -dpms (so you’re removing the # on the front, and adding the missing bits at the end.) Again, hit CTRL-X and say Y(es) to saving the file.

    Step 4
    A Raspberry Pi is configured to automatically shutdown parts of the hardware that aren’t actively in use. This includes the WiFi driver. This will cause MagicMiror² to occasionally fail to fetch updates for things like the newsfeed, weather, and others. You can disable the power saving feature for the WiFi from the interfaces configuration file:
    sudo nano /etc/network/interfaces

    Find the wlan0 section and add wireless-power off below it:

    Once you’re done with that, reboot the rpi one more time with sudo reboot and when it comes back up again, open a Terminal window and type in iwconfig and you should see that the Power Management is now off:

    At this point you have completed the basic install for MagicMirror². The next step is to create a valid configuration file for it so you can test it out. You can do that by going into the MagicMirror’s config folder:

    pi@magicpi:~ $ cd MagicMirror/config
    pi@magicpi:~/MagicMirror/config $ cp config.js.sample config.js

    You can now try to start MagicMirror².

    pi@magicpi:~/MagicMirror/config $ cd $HOME/MagicMirror
    pi@magicpi:~/MagicMirror $ npm start

    If everything went well, your screen should load up the MagicMirror² interface. The weather module will tell you that you don’t have a valid APPID, but once set, your screen should look like this:



Log in to reply