Read the statement by Michael Teeuw here.
Version 2.34.0 - Missing X Server or $DISPLAY (Docker version of MMOS)
-
G’Morning everyone reading this!
Yesterday I set up a new MagicMirror, using a Raspberry Pi 3 B+, a 16GB SD with the most recent image from https://gitlab.com/khassel/magicmirror, connected to a HDMI monitor.
It fired up, did some magic, I was able to install my favorite modules, but after individualizing the config.js to use those modules (MMM-WordClock, MMM-Remote-Control) and to customize my view, the MagicMirror just starts every third (hard-)reboot.docker logs mm output:
[entrypoint 07:02:17.102] [INFO] symlink default modules [2026-01-09 08:02:20.468] [LOG] [app] Starting MagicMirror: v2.34.0 [2026-01-09 08:02:20.489] [LOG] [app] Loading config ... [2026-01-09 08:02:20.496] [LOG] [app] config template file not exists, no envsubst [2026-01-09 08:02:21.782] [INFO] [check_config] Checking config file /opt/magic_mirror/config/config.js ... [2026-01-09 08:02:22.038] [INFO] [check_config] Your configuration file doesn't contain syntax errors :) [2026-01-09 08:02:22.042] [INFO] [check_config] Checking modules structure configuration ... [2026-01-09 08:02:22.352] [INFO] [check_config] Your modules structure configuration doesn't contain errors :) [2026-01-09 08:02:22.358] [LOG] [app] Loading module helpers ... [2026-01-09 08:02:22.362] [LOG] [app] No helper found for module: MMM-WordClock. [2026-01-09 08:02:22.364] [LOG] [app] No helper found for module: alert. [2026-01-09 08:02:22.386] [LOG] [node_helper] Initializing new module helper ... [2026-01-09 08:02:22.388] [LOG] [node_helper] Module helper loaded: updatenotification [2026-01-09 08:02:22.390] [LOG] [app] No helper found for module: clock. [2026-01-09 08:02:22.560] [LOG] [node_helper] Initializing new module helper ... [2026-01-09 08:02:22.562] [LOG] [node_helper] Module helper loaded: calendar [2026-01-09 08:02:22.563] [LOG] [app] No helper found for module: weather. [2026-01-09 08:02:22.763] [LOG] [node_helper] Initializing new module helper ... [2026-01-09 08:02:22.764] [LOG] [node_helper] Module helper loaded: newsfeed [2026-01-09 08:02:22.957] [LOG] [node_helper] Initializing new module helper ... [2026-01-09 08:02:22.958] [LOG] [node_helper] Module helper loaded: MMM-Remote-Control [2026-01-09 08:02:22.960] [LOG] [app] All module helpers loaded. [2026-01-09 08:02:22.980] [LOG] [server] Starting server on port 8080 ... [2026-01-09 08:02:22.986] [WARN] [server] You're using a full whitelist configuration to allow for all IPs [2026-01-09 08:02:23.076] [LOG] [app] Server started ... [2026-01-09 08:02:23.079] [LOG] [node_helper] Connecting socket for: updatenotification [2026-01-09 08:02:23.081] [LOG] [node_helper] Starting module helper: updatenotification [2026-01-09 08:02:23.083] [LOG] [node_helper] Connecting socket for: calendar [2026-01-09 08:02:23.085] [LOG] [calendar] Starting node helper for: calendar [2026-01-09 08:02:23.087] [LOG] [node_helper] Connecting socket for: newsfeed [2026-01-09 08:02:23.088] [LOG] [newsfeed] Starting node helper for: newsfeed [2026-01-09 08:02:23.090] [LOG] [node_helper] Connecting socket for: MMM-Remote-Control [2026-01-09 08:02:23.092] [LOG] [MMM-Remote-Control] Starting node helper for: MMM-Remote-Control [2026-01-09 08:02:23.108] [LOG] [app] Sockets connected & modules started ... [22:0109/070223.113337:ERROR:ui/ozone/platform/x11/ozone_platform_x11.cc:249] Missing X server or $DISPLAY [22:0109/070223.113675:ERROR:ui/aura/env.cc:257] The platform failed to initialize. Exiting. /opt/magic_mirror/node_modules/electron/dist/electron exited with signal SIGSEGVI tried to use the search, but as I am running the lite OS without X Server, I don’t know where to start.
A successful start with everything displaying fine gives something strange in the logs:
[2026-01-09 09:38:26.915] [LOG] [app] Sockets connected & modules started ... [21:0109/083829.686193:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory [21:0109/083829.686503:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory [21:0109/083829.686874:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory [2026-01-09 09:38:30.770] [LOG] [electron] Launching application. [21:0109/083832.536207:ERROR:dbus/object_proxy.cc:573] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: [21:0109/083832.553143:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory [21:0109/083832.553419:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory [21:0109/083832.553587:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory [21:0109/083832.554321:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory [21:0109/083832.554443:ERROR:dbus/object_proxy.cc:573] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: [2026-01-09 09:38:43.125] [INFO] [utils] #### System Information #### - SYSTEM: manufacturer: ; model: Docker Container; virtual: false; MM: 2.34.0 - OS: platform: linux; distro: Debian GNU/Linux; release: 13; arch: arm64; kernel: 6.12.47+rpt-rpi-v8 - VERSIONS: electron: 39.2.7; used node: 22.21.1; installed node: 24.12.0; npm: 11.7.0; pm2: - ENV: XDG_SESSION_TYPE: undefined; MM_CONFIG_FILE: undefined WAYLAND_DISPLAY: wayland-0; DISPLAY: unix:0.0; ELECTRON_ENABLE_GPU: 0 - RAM: total: 906.04 MB; free: 443.12 MB; used: 462.92 MB - OTHERS: uptime: 2 minutes; timeZone: Europe/Berlin -
@Mathes75 you are runnng the pios with desktop,
correct. ?A browser requires the graphical desktop as all the ui is drawn in graphics mode
-
@karsten13 any debug we can look at?
-
the dbus errors in the mm logs are only noise, see https://forum.magicmirror.builders/topic/20032/docker-watchtower-container-restarting-and-mm-container-errors-after-upgrade/7#
If the problem occurs:
- can you provide the logs of the labwc container?
docker logs labwc - can yo try to restart the containers without reboot with
cd /opt/mm/run && docker compose up -d --force-recreate?
- can you provide the logs of the labwc container?
-
@karsten13 thanks
-
other questions (not clear from description):
Are you using mmos or are you using Raspberry Pi OS or another OS?
If not mmos, how did you the install? With the install script inside the repo?
Can you provide output of
docker compose config? -
Thanks a lot for having a look at my issue!
As mentioned in the first post, I downloaded the most recent Docker image of MagicMirrorOS. - no desktop, lite version. Wrote the image with Balena Etcher and let the Rpi do it’s magic after booting until “factory” MagicMirror was shown. SSHed into the Rpi and ran
sudo raspi-configto adjust locales and WiFi.
I installed the desired Modules, modified the config.js - and now the Mirror works only at every third or fourth boot. (Sometimes real power cycle, sometimessudo shutdown -r now- sometimes first works, sometimes second)Currently it’sworking, only one Module has issues. Both containers recreated and restarted, output of
docker logs labwc00:00:00.000 [INFO] [seatd/seat.c:48] Created VT-bound seat seat0 00:00:00.000 [INFO] [seatd/seatd.c:194] seatd started failed to connect to display 00:00:01.036 [INFO] [seatd/server.c:145] New client connected (pid: 1, uid: 1000, gid: 1000) 00:00:01.036 [INFO] [seatd/seat.c:239] Added client 1 to seat0 00:00:01.037 [INFO] [seatd/seat.c:563] Opened client 1 on seat0 failed to connect to display failed to connect to display failed to connect to display failed to connect to display failed to connect to display failed to connect to display HDMI-A-1 "Lenovo Group Limited T2224pD V902B58B (HDMI-A-1)" Make: Lenovo Group Limited Model: T2224pD Serial: V902B58B Physical size: 480x270 mm Enabled: yes Modes: 1920x1080 px, 60.000000 Hz (preferred, current) 1920x1080 px, 60.000000 Hz 1920x1080 px, 59.939999 Hz 1920x1080 px, 50.000000 Hz 1680x1050 px, 59.882999 Hz 1600x900 px, 75.000000 Hz 1600x900 px, 60.000000 Hz 1280x1024 px, 75.025002 Hz 1280x1024 px, 70.000999 Hz 1280x1024 px, 60.020000 Hz 1440x900 px, 59.901001 Hz 1366x768 px, 59.790001 Hz 1152x864 px, 75.000000 Hz 1280x720 px, 60.000000 Hz 1280x720 px, 59.939999 Hz 1280x720 px, 50.000000 Hz 1024x768 px, 75.028999 Hz 1024x768 px, 70.069000 Hz 1024x768 px, 60.004002 Hz 832x624 px, 74.551003 Hz 800x600 px, 75.000000 Hz 800x600 px, 72.188004 Hz 800x600 px, 60.317001 Hz 800x600 px, 56.250000 Hz 720x576 px, 50.000000 Hz 720x576 px, 50.000000 Hz 720x480 px, 60.000000 Hz 720x480 px, 60.000000 Hz 720x480 px, 59.939999 Hz 720x480 px, 59.939999 Hz 640x480 px, 75.000000 Hz 640x480 px, 72.808998 Hz 640x480 px, 60.000000 Hz 640x480 px, 59.939999 Hz 640x480 px, 59.939999 Hz 720x400 px, 70.082001 Hz Position: 0,0 Transform: normal Scale: 1.000000 Adaptive Sync: disabledOutput of
docker compose configname: magicmirror services: labwc: container_name: labwc environment: LAB_WC_HIDE_CURSOR: "true" RANDR_PARAMS: "" RANDR_POLL: 1m XDG_RUNTIME_DIR: /run/user/1000 image: karsten13/labwc:latest networks: default: null privileged: true restart: always volumes: - type: bind source: /run/user/1000 target: /run/user/1000 bind: {} - type: bind source: /run/udev target: /run/udev bind: {} magicmirror: container_name: mm environment: DBUS_SESSION_BUS_ADDRESS: unix:path=/run/user/1000/bus DBUS_SYSTEM_BUS_ADDRESS: unix:path=/run/user/1000/bus DISPLAY: unix:0.0 ELECTRON_ENABLE_GPU: "0" MM_CUSTOMCSS_FILE: css/custom.css MM_MODULES_DIR: modules MM_OVERRIDE_DEFAULT_MODULES: "true" MM_SCENARIO: electron MM_SHOW_CURSOR: "false" WAYLAND_DISPLAY: wayland-0 XDG_RUNTIME_DIR: /run/user/1000 image: karsten13/magicmirror:latest network_mode: host privileged: true restart: always shm_size: "268435456" volumes: - type: bind source: /tmp/.X11-unix target: /tmp/.X11-unix bind: {} - type: bind source: /home/pi/.Xauthority target: /home/node/.Xauthority bind: {} - type: bind source: /run/user/1000 target: /run/user/1000 bind: {} - type: bind source: /opt/mm/mounts/config target: /opt/magic_mirror/config bind: {} - type: bind source: /opt/mm/mounts/modules target: /opt/magic_mirror/modules bind: {} - type: bind source: /opt/mm/mounts/css/custom.css target: /opt/magic_mirror/css/custom.css bind: {} post_start: - command: - /bin/sh - -c - | [ "init" = "init" ] || exit 0 chown -R 1000:1000 config modules css/custom.css chmod -R 777 config modules css/custom.css user: root environment: MM_CHMOD: null MM_GID: null MM_INIT: null MM_UID: null networks: default: name: magicmirror_defaultHave a nice weekend!
-
not sure I really fixed it but you can try
cd /opt/mm git pull ./install/install.sh electronLet me know if there are still problems after reboot or not.
-
Thanks @karsten13!
git pullneeded a commit to work. Done. Installing Electron revealed no change to apply.At least I seem to be one step further: Recreating the images as mentioned in a post above repeatedly resolved the "missing X Server"message each time and started MagicMirror…
As I am quite done with all changes and adaptions, I am fine to keep the workaround with recreating the image(s), once the mirror needs a restart.
-
Let me know if you get another black screen without mm start after reboot (I want to know if it is fixed or not …)
Can you please show me again the output of
docker compose config(so I can check if you have the latest changes)?
