This is part of a series of posts on the design and technical steps of creating Himblick, a digital signage box based on the Raspberry Pi 4.
Another surprise hits us at the last moment: if the system boots without an
HDMI monitor plugged in, no framebuffer device is ever created,
and X will not start,
lightdm will give up after some tries, and even if one
plugs in a monitor afterwards, it will stay blank until a reboot or some kind
of manual intervention.
As a workaround, one can configure the bootloader to force a specific HDMI configuration. This post documents how we did it.
Find out what video mode one needs
We plugged the target monitor into a laptop and ran
xrandr to see the
selection of video modes:
… 1920x1080 60.00*+ 50.00 59.94 30.00 25.00 24.00 29.97 23.98 1920x1080i 60.00 50.00 59.94 …
Then we looked up the video mode in the
hdmi_mode table, for DMT video modes,
in the Video options in config.txt
Then, since the Raspberry Py 4 has two HDMI outputs, one can append
:1 to each video option to select the output for which it applies.
The resulting bit of
config.txt that did the trick for us was this:
# Pretend that a monitor is attached on HDMI0 hdmi_force_hotplug=1:0 # Pretend that the monitor is a monitor and not a TV hdmi_group=2:0 # Pretend that the monitor has resolution 1920x1080 hdmi_mode=82:0
With that X started, but for some reason it started with different (lower) monitor resolution. Thankfully, a call to xrandr on startup fixed that too, and now everything works as expected whether the system boots with a monitor attached or not.