@karsten13 perfect, thank you. The Docker container has gpiomon at v2.2.1. It never occurred to me the container would update things unannounced!
Many thanks for your help
Steve
@karsten13 perfect, thank you. The Docker container has gpiomon at v2.2.1. It never occurred to me the container would update things unannounced!
Many thanks for your help
Steve
magicm@magicmirror:/opt/mm/mounts/config $ gpiomon --help
Usage: gpiomon [OPTIONS] <chip name/number> <offset 1> <offset 2> ...
Wait for events on GPIO lines and print them to standard output
Options:
-h, --help: display this message and exit
-v, --version: display the version and exit
-l, --active-low: set the line active state to low
-B, --bias=[as-is|disable|pull-down|pull-up] (defaults to 'as-is'):
set the line bias
-n, --num-events=NUM: exit after processing NUM events
-s, --silent: don't print event info
-r, --rising-edge: only process rising edge events
-f, --falling-edge: only process falling edge events
-b, --line-buffered: set standard output as line buffered
-F, --format=FMT specify custom output format
Biases:
as-is: leave bias unchanged
disable: disable bias
pull-up: enable pull-up
pull-down: enable pull-down
Format specifiers:
%o: GPIO line offset
%e: event type (0 - falling edge, 1 rising edge)
%s: seconds part of the event timestamp
%n: nanoseconds part of the event timestamp
magicm@magicmirror:/opt/mm/mounts/config $ gpiomon -v
gpiomon (libgpiod) v1.6.3
Copyright (C) 2017-2018 Bartosz Golaszewski
License: LGPLv2.1
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
-r is listed in the library help for v1.6.3
The Docker log shows
[2026-02-10 11:30:10.955] [ERROR] [MMM-Universal-Pir] stderr: gpiomon: invalid option -- 'r' gpiomon: try gpiomon --help
but gpiomon -r -b gpiochip0 23 works in a terminal when pasted from the config.js file, very strange
It’s just stopped working!
Steve
Hi
With no warning (I haven’t carried out any updates) MMM-Universal-Pir is now failing. It shows under the ‘PIR SENSOR’ heading on the MM screen ‘gpioCommand exited with error!’
Config is:
module: "MMM-Universal-Pir",
position: "bottom_right",
config: {
gpioCommand: "gpiomon -r -b gpiochip0 23",
onCommand: "wlr-randr --output HDMI-A-1 --on --transform 90",
offCommand: "wlr-randr --output HDMI-A-1 --off",
deactivateDelay: 120 * 1000,
}
and in a terminal gpiomon -r -b gpiochip0 23 shows events when the PIR is triggered and
wlr-randr --output HDMI-A-1 --on --transform 90 and wlr-randr --output HDMI-A-1 --off still control the screen.
gpiomon is v1.6.3
What can have changed?
Steve
Got this up and running thanks to @karsten13 's help with screen blanking. Also had start-up issues as detailed here.
Runs on a RPi 4B I had lying around with MagicMirrorOS driving the fabulous RPi monitor with a PIR sensor to sense people in the room for screen blanking. Viewing angle on this screen is very impressive, very sharp and crisp display.
The Pi is in the boiler cupboard and wiring is hidden in 25x16mm trunking painted to match the wall. PIR sensor is in the tiniest project box I could find. Screen is on a VESA mount.
MagicMirror modules:
MMM-Universal-Pir - controlling HDMI for screen sleepclockcalendar - hidden, pulling UK Holidays and Family Google calendar feeding:MMM-CalendarExt3Agenda with CSS mods so it fills most of the screenMMM-MyGarbageweather showing current and forecasts from UK met officenewsfeed showing BBC news


@karsten13 thank you for all the effort you are putting into this issue. I agree, let’s go back to the version that will kill and restart the container if the display doesn’t respond to wlr-randr (and then waits for a MMM-Universal-Pir cycle to sleep it again).
Steve
@karsten13 unfortunately that didn’t work.
In the morning the screen was off and could not be restored with docker rm -f labwc && docker compose up -d or docker compose up -d --force-recreate. In both cases the console briefly came back and then the the monitor slept again. Only when i when into the labwc container and did wlr-randr --output HDMI-A-1 --on --transform 90 did the display return. At that point the MMM-Universal-Pir started counting down too and it works as normal.
magicm@magicmirror:/opt/mm/run $ docker rm -f labwc && docker compose up -d
labwc
[+] Running 2/2
✔ Container mm Running 0.0s
✔ Container labwc Started 0.5s
magicm@magicmirror:/opt/mm/run $ docker compose up -d --force-recreate
[+] Running 2/2
✔ Container mm Started 1.7s
✔ Container labwc Started 1.8s
magicm@magicmirror:/opt/mm/run $
>>> still no screen output <<<
magicm@magicmirror:/opt/mm/run $ docker exec -it labwc bash
pi@3f4fb5c07c91:/$ wlr-randr
HDMI-A-1 "Raspberry PI RPI MON156 81005568472 (HDMI-A-1)"
Make: Raspberry PI
Model: RPI MON156
Serial: 81005568472
Physical size: 350x190 mm
Enabled: no
Modes:
1920x1080 px, 60.000000 Hz (preferred)
1920x1080 px, 60.000000 Hz
1920x1080 px, 59.939999 Hz
1920x1080 px, 50.000000 Hz
1920x1080 px, 48.000000 Hz
1920x1080 px, 47.952000 Hz
1280x720 px, 60.000000 Hz
1280x720 px, 60.000000 Hz
1280x720 px, 59.939999 Hz
1280x720 px, 50.000000 Hz
1280x720 px, 48.000000 Hz
1280x720 px, 47.952000 Hz
720x576 px, 50.000000 Hz
720x480 px, 60.000000 Hz
720x480 px, 59.939999 Hz
640x480 px, 60.000000 Hz
640x480 px, 59.939999 Hz
640x480 px, 59.939999 Hz
pi@3f4fb5c07c91:/$ wlr-randr --output HDMI-A-1 --on --transform 90
>>> screen returns <<<
pi@3f4fb5c07c91:/$
Please check I did the pull etc correctly
magicm@magicmirror:/opt/mm $ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: install/install.sh
Untracked files:
(use "git add <file>..." to include in what will be committed)
install/install.sh.old
run/douglas.env
no changes added to commit (use "git add" and/or "git commit -a")
magicm@magicmirror:/opt/mm $ git switch develop
M install/install.sh
branch 'develop' set up to track 'origin/develop'.
Switched to a new branch 'develop'
magicm@magicmirror:/opt/mm $ git pull
remote: Enumerating objects: 32, done.
remote: Counting objects: 100% (32/32), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 22 (delta 14), reused 0 (delta 0), pack-reused 0 (from 0)
Unpacking objects: 100% (22/22), 2.66 KiB | 247.00 KiB/s, done.
From https://gitlab.com/khassel/magicmirror
f4542dd..4891458 develop -> origin/develop
a4a4748..c4bb59c master -> origin/master
* [new tag] v2.31.0 -> v2.31.0
Updating f4542dd..4891458
Fast-forward
.gitlab-ci.yml | 2 +-
build/labwc/Dockerfile | 2 +-
build/labwc/entrypoint.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
run/includes/labwc.yaml | 4 +++-
run/original.env | 4 ++--
5 files changed, 57 insertions(+), 13 deletions(-)
magicm@magicmirror:/opt/mm $ cd /opt/mm/run
magicm@magicmirror:/opt/mm/run $ docker compose pull
[+] Pulling 15/15
✔ labwc Pulled 107.9s
✔ f07a03696dcc Already exists 0.0s
✔ 98d9f29a8bdf Pull complete 106.0s
✔ 6c9aae6d02f4 Pull complete 106.1s
✔ 9d496899b308 Pull complete 106.2s
✔ magicmirror Pulled 171.5s
✔ d9b636547744 Already exists 0.0s
✔ 2fb5eed0caf7 Already exists 0.0s
✔ f51205ec4ac4 Already exists 0.0s
✔ d7b57be0135b Already exists 0.0s
✔ 813d7d6819ab Already exists 0.0s
✔ 9e1af87e1f78 Pull complete 1.1s
✔ 27001e96a2b0 Pull complete 1.3s
✔ deb26dbf1268 Pull complete 110.8s
✔ 1b7abece8518 Pull complete 169.7s
magicm@magicmirror:/opt/mm/run $ docker compose up -d --force-recreate
[+] Running 2/2
✔ Container labwc Started 24.9s
✔ Container mm Started
Steve
@karsten13 I thought that would be the case. I tried changing the initial RANDR_PARAMS="--output HDMI-A-1 --transform 90" in the .env file to RANDR_PARAMS="--output HDMI-A-1 --off" so that the MMM-Universal-Pir module would be responsible for the first switch on of the display but then I got no display on restart at all.
Steve
@karsten13, thank you for this. It worked well overnight last night. One question: when the wlr-randr command fails, the labwc container is then killed and then automatically restarts - will the screen be turned on then until the next PIR activity and subsequent timeout of MMM-Universal-Pir?
Steve
@karsten13 the display failed today as before but we have timestamps in the labwc docker logs
magicm@magicmirror:~ $ docker logs labwc
00:00:00.000 [INFO] [seatd/seat.c:48] Created VT-bound seat seat0
00:00:00.000 [INFO] [seatd/seatd.c:194] seatd started
00:00:00.052 [INFO] [seatd/server.c:145] New client connected (pid: 17, uid: 1000, gid: 1000)
00:00:00.052 [INFO] [seatd/seat.c:239] Added client 1 to seat0
00:00:00.052 [INFO] [seatd/seat.c:563] Opened client 1 on seat0
00:00:00.120 [ERROR] [EGL] command: eglQueryDeviceStringEXT, error: EGL_BAD_PARAMETER (0x300c), message: "eglQueryDeviceStringEXT"
00:00:00.120 [ERROR] [EGL] command: eglQueryDeviceStringEXT, error: EGL_BAD_PARAMETER (0x300c), message: "eglQueryDeviceStringEXT"
executing: wlr-randr --output HDMI-A-1 --transform 90
Sat Mar 29 08:14:25 UTC 2025
HDMI-A-1 "Raspberry PI RPI MON156 81005568472 (HDMI-A-1)"
Make: Raspberry PI
Model: RPI MON156
Serial: 81005568472
Physical size: 350x190 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
1920x1080 px, 48.000000 Hz
1920x1080 px, 47.952000 Hz
1280x720 px, 60.000000 Hz
1280x720 px, 60.000000 Hz
1280x720 px, 59.939999 Hz
1280x720 px, 50.000000 Hz
1280x720 px, 48.000000 Hz
1280x720 px, 47.952000 Hz
720x576 px, 50.000000 Hz
720x480 px, 60.000000 Hz
720x480 px, 59.939999 Hz
640x480 px, 60.000000 Hz
640x480 px, 59.939999 Hz
640x480 px, 59.939999 Hz
Position: 0,0
Transform: 90
Scale: 1.000000
Adaptive Sync: disabled
Sat Mar 29 08:29:25 UTC 2025
HDMI-A-1 "Raspberry PI RPI MON156 81005568472 (HDMI-A-1)"
Make: Raspberry PI
Model: RPI MON156
Serial: 81005568472
Physical size: 350x190 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
1920x1080 px, 48.000000 Hz
1920x1080 px, 47.952000 Hz
1280x720 px, 60.000000 Hz
1280x720 px, 60.000000 Hz
1280x720 px, 59.939999 Hz
1280x720 px, 50.000000 Hz
1280x720 px, 48.000000 Hz
1280x720 px, 47.952000 Hz
720x576 px, 50.000000 Hz
720x480 px, 60.000000 Hz
720x480 px, 59.939999 Hz
640x480 px, 60.000000 Hz
640x480 px, 59.939999 Hz
640x480 px, 59.939999 Hz
Position: 0,0
Transform: 90
Scale: 1.000000
Adaptive Sync: disabled
...
Sat Mar 29 13:14:26 UTC 2025
HDMI-A-1 "Raspberry PI RPI MON156 81005568472 (HDMI-A-1)"
Make: Raspberry PI
Model: RPI MON156
Serial: 81005568472
Physical size: 350x190 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
1920x1080 px, 48.000000 Hz
1920x1080 px, 47.952000 Hz
1280x720 px, 60.000000 Hz
1280x720 px, 60.000000 Hz
1280x720 px, 59.939999 Hz
1280x720 px, 50.000000 Hz
1280x720 px, 48.000000 Hz
1280x720 px, 47.952000 Hz
720x576 px, 50.000000 Hz
720x480 px, 60.000000 Hz
720x480 px, 59.939999 Hz
640x480 px, 60.000000 Hz
640x480 px, 59.939999 Hz
640x480 px, 59.939999 Hz
Position: 0,0
Transform: 90
Scale: 1.000000
Adaptive Sync: disabled
Sat Mar 29 13:29:26 UTC 2025
failed to connect to display
Sat Mar 29 13:44:26 UTC 2025
failed to connect to display
Sat Mar 29 13:59:26 UTC 2025
failed to connect to display
Sat Mar 29 14:14:26 UTC 2025
failed to connect to display
Sat Mar 29 14:29:26 UTC 2025
failed to connect to display
Sat Mar 29 14:44:26 UTC 2025
failed to connect to display
Sat Mar 29 14:59:26 UTC 2025
failed to connect to display
Sat Mar 29 15:14:26 UTC 2025
failed to connect to display
Sat Mar 29 15:29:26 UTC 2025
failed to connect to display
Sat Mar 29 15:44:26 UTC 2025
failed to connect to display
Sat Mar 29 15:59:26 UTC 2025
failed to connect to display
Sat Mar 29 16:14:26 UTC 2025
failed to connect to display
There's also a new item in the `mm` docker logs when I restarted the docker containers on my return
Gdk-Message: 16:25:24.348: Error reading events from display: Broken pipe
[entrypoint 16:25:25.533] [INFO] ***WARNING*** could write to /etc/localtime
[entrypoint 16:25:25.539] [INFO] copy default modules
[entrypoint 16:25:25.603] [INFO] copy css files
Steve
@karsten13 my apologies, I see the transform is not needed as you have taken the rotation into account
@karsten13 I left it running overnight with the MMM-Universal-Pir config lines commented out and the monitor physically switched off and this morning MM was still working fine when I switched the monitor back on again. When I looked at docker logs labwc the wlr-randr command was failing (still being triggered every fifteen mins) which suggests the connection between the MMM-Universal-Pir and the display driver is the issue rather than the display actually going off. I will try your new build today although i will have to add --transform 90 to the onCommand to get my screen rotation.
magicm@magicmirror:/opt/mm/mounts/config $ docker logs labwc
HDMI-A-1 "Raspberry PI RPI MON156 81005568472 (HDMI-A-1)"
Make: Raspberry PI
Model: RPI MON156
Serial: 81005568472
Physical size: 350x190 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
1920x1080 px, 48.000000 Hz
1920x1080 px, 47.952000 Hz
1280x720 px, 60.000000 Hz
1280x720 px, 60.000000 Hz
1280x720 px, 59.939999 Hz
1280x720 px, 50.000000 Hz
1280x720 px, 48.000000 Hz
1280x720 px, 47.952000 Hz
720x576 px, 50.000000 Hz
720x480 px, 60.000000 Hz
720x480 px, 59.939999 Hz
640x480 px, 60.000000 Hz
640x480 px, 59.939999 Hz
640x480 px, 59.939999 Hz
Position: 0,0
Transform: 90
Scale: 1.000000
Adaptive Sync: disabled
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
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
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
failed to connect to display
failed to connect to display
magicm@magicmirror:/opt/mm/mounts/config $ docker exec -it labwc bash
pi@c7c64f70849e:/$ wlr-randr
failed to connect to display
pi@c7c64f70849e:/$
Steve
@karsten13 unfortunately that change did not prevent the display from dropping. There’s no time timestamp in the docker logs for labwc but when i looked this morning there were some 40 calls to wlr-randr that had failed. If they are every 15mins that’s about 10:00 it failed. I will make a more accurate observation tonight
@karsten13 i have disabled the init container as suggested.
When the display fails I can get it back with docker rm -f labwc && docker compose up -d (docker compose up -d --force-recreate also works but docker compose up -d on it’s own doesn’t). I am running it today with the MMM-Universal-Pir module disabled as another test (although when sitting at a login prompt it never went off).
Note that the display fails after a few hours of no PIR trigger, it doesn’t have to be overnight.
Steve
@sdetweil I stopped docker at 9:30 last night with docker compose down leaving the screen at the magicmirror login prompt. This morning the screen was still showing the login prompt . MM was reinstated perfectly with docker compose up -d --force-recreate. @karsten13 I notice there are now four objects that start:
[+] Running 4/4
✔ Network magicmirror_default Created 0.1s
✔ Container mm Started 0.9s
✔ Container init Started 1.0s
✔ Container labwc Started 1.0s
Steve
Hi
I don’t know where that would be. The RPi boots to a login prompt. Then docker takes over and launches MM in electron. There is no GUI for me to fiddle with
Steve
Hi
I am running MM via MagicMirrorOS on a RPi4B with an RPi monitor in portrait. I use MMM-Universal-Pir to turn the screen on and off during the day (with wlr-randr commands) which works great but the screen switches off for good overnight, the PIR cannot wake it up. I have disabled Screen Blanking with raspi-config but that makes no difference.
If I run wlr-randr in the labwc container (access via docker exec -it labwc bash) I normally get (some resolutions removed for brevity):
HDMI-A-1 "Raspberry PI RPI MON156 81005568472 (HDMI-A-1)"
Make: Raspberry PI
Model: RPI MON156
Serial: xxxxxxxxxxxx
Physical size: 350x190 mm
Enabled: yes
Modes:
1920x1080 px, 60.000000 Hz (preferred, current)
...
640x480 px, 59.939999 Hz
Position: 0,0
Transform: 90
Scale: 1.000000
Adaptive Sync: disabled
However, once the display has gone to sleep that same wlr-randr command gives
failed to connect to display
this make me feel it is something in the docker set up but i see nothing in the docker logs
Note that I also have RANDR_PARAMS="--output HDMI-A-1 --transform 90" in the .env file to rotate the display at boot.
Cheers
Steve
Hi
I’ve discovered the CSS for the agenda module has a hard height limit
.CX3A .agenda {
max-height: 600px;
}
increasing that to 1325px fills the screen height . I can’t tell if that was the problem all along as the patch is in place now!
overriding the font and width as follows has given me the size of agenda I wanted.
.CX3A {
font-size: 30px;
max-width: 600px;
}
.CX3A .event .headline.useSymbol .symbol {
font-size: 25px;
}
many thanks for your help
Hi
I ran npm run install-mm in the docker container as the above commands and rebooted. The agenda is still truncated
Steve