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.
When powered on, the Pi units should go straight into X, and start the media player.
X autologin has long been a gripe of mine, and surprisingly hard to do right and reliably, integrating well with PAM, with no greeters or switches to text mode flashing quickly on the screen, and so on.
I once wrote nodm. Then lightdm-autologin-greeter, so I didn't have to maintain a whole display manager for this. Lightdm's autologin used to be insufficient, because when the X session ended, lightdm assumed one wanted to log out and showed the greeter again.
Now I'm very pleased to see that, in 2019, almost 2020, just setting
autologin-user
in lightdm does the right thing, and I'm very happy to be able
to remove some of the kludges from the geological strata of kludges that
accreted over the years to work around these kinds of things.
First thing first, do not wait for network to be online during boot. We don't need it in a media player that should be able to work just as well offline:
# Do not wait for being online to finish boot
chroot.systemctl_disable("systemd-networkd-wait-online.service", mask=True)
Setting up autologin now really is quite beautifully straightforward:
- name: "Install X dependencies"
apt:
pkg:
# basic X server
- xserver-xorg
- lightdm
state: present
update_cache: no
install_recommends: no
- name: "Enable lightdm autologin"
lineinfile:
path: /etc/lightdm/lightdm.conf
regexp: ".*autologin-user\\s*=\\s*($|pi)"
line: "autologin-user = pi"
A nice trick for a media display: X without a mouse cursor accidentally hovering like a fly over things:
- name: "Disable mouse cursor in X"
lineinfile:
path: /etc/lightdm/lightdm.conf
regexp: "(^|#)xserver-command\\s*=\\s*"
line: "xserver-command = X -nocursor"
Finally, we need to start the player in the X session.
There are quite a lot of ways to autostart things in X sessions, and the Xsession page in the Debian Wiki has excellent documentation on it.
Since the machine will only be a media player, as a first attempt we decided to try and be the X session, starting the player directly with no desktop environment, no window manager, nothing, ohne alles:
- name: "Use himblick player as X session"
copy:
dest: /home/pi/.xsession
owner: pi
group: pi
mode: '0644'
content: |
exec /usr/bin/himblick player
This way, the player can stay there and do its thing without anything popping up in its way, and if it dies, X ends, and lightdm restarts it all.