These are the steps I used to get MagicMirror2 working on a Raspberry Pi Zero W:

  1. Flash memory card with Legacy 32-bit.
  2. Connect via ssh to run script:
    bash -c  "$(curl -sL https://raw.githubusercontent.com/sdetweil/MagicMirror_scripts/master/raspberry.sh)"

    Answer **yes** to disable screen saver and use pm2 questions.

  3. Remove chromium with:
    sudo apt-get remove chromium-browser
    sudo apt autoremove
  4. Add Firefox with:
    sudo apt-get update
    sudo apt-get install firefox-esr
  5. Enable VNC using GUI (Interface Options): sudo raspi-config
  6. Connect via TigerVNC (Apple app)
  7. Edit installers/mm.sh via VNC using Pi’s baked-in text editor by adding:
    cd ~/MagicMirror
    export external_browser=firefox
    DISPLAY=:0 npm start
  8. Execute fix’em-up script:
    bash -c "$(curl -sL https://raw.githubusercontent.com/sdetweil/MagicMirror_scripts/master/fixuppm2.sh)"
  9. cd ~/MagicMirror/
    pm2 start MagicMirror
  10. If you get errors about electron being missing, this should fix it: sudo npm i -g npm@6
  11. If you’re not getting any output from HDMI but everything seems fine via VNC, edit the config file sudo nano /boot/config.txt and uncomment the hdmi_safe=1 line.

Note: On my Pi Zero W it takes a solid ten minutes from reboot to actually seeing MM output via HDMI.

Huge thanks to @sdetweil for all his help!

Here are the modules I have installed:

Here are some other modules / resources I like:

  • I’ve played with several background image players and think (so far) that MMM-BackgroundSlideshow is the best. I’m not using it on any of my screens now, but I have configured it and it’s great.
  • I found an awesome (free) version of Aurabesh, the alphabet of Star Wars, if you are looking for that aesthetic. Unzip the file and drop the contents into the ~/MagicMirror/fonts directory and add this to ~/MagicMirror/css/custom.css:
    @font-face {
      font-family: "Aurebesh";
      font-style: normal;
      src:
        local("Aurebesh"),
        url("/fonts/aurebesh/Aurebesh.otf") format("opentype");
    }

    Then you can create any class and use that as the font-family. e.g.:

    .aurabesh{
         font-family: "Aurebesh";
    }
  • There seems to be a bug in the Theme Park Wait Times module because no matter what I try, it always displays the park hours for the next several days. For now I’m simply hiding that table from the display with this in custom.css:
    .MMM-ThemeParkWaitTimes .hours{
         display: none;
    }