Customising XDM for the modern desktop
As per my previous blog post, I’m now using XDM as a login manager. By default, it looks like something straight out of the ’80s. Having said that, it’s not too difficult to give it additional functionality ad make it look nice. With the help of this tutorial, I was able to put together the following:
As per the linked tutorial, I have used an embedded xmessage window to create the Shutdown and Reboot buttons.
In order to recreate this setup, you will need to do the following:
- Drop the meditate-black-bottom_right.png wallpaper into /etc/X11/xdm/.
This file can actually be references from anywhere, but it makes sense to me at least to keep it all together.
The wallpaper was taken from the FSF’s wallpaper section (specifically here) and is distributed under either the GPL3+ or GFDL1.1+ (with no invariant or front/back-cover texts). I just slapped it on a black 1920×1080 background and exported it as a PNG. I then load this as the XDM wallpaper via xloadimage. Note if you are doing your own modifications (perhaps to change the colour or resolution) that xloadimage will only render transparent pixels as white, and there is no built-in option to change this.
- Edit /etc/X11/xdm/xdm-config and replace the following lines:
We need to create the Xresources_custom, Xsetup_custom and Xstartup_custom files in the steps that follow.
- Create /etc/X11/xdm/Xresources_custom.
This is basically the same as Xresources, only with some additional lines appended to the end. It can be created with the following two commands:
# cp -f /etc/X11/xdm/Xresources /etc/X11/xdm/Xresources_custom # echo " Xmessage*geometry: 170x27+20+20 Xmessage*background: black Xmessage*foreground: red Xmessage*Font: -xos4-terminus-*-r-normal-*-*-180-*-*-*-*-*-* Xmessage*borderWidth: 0 Xmessage*message.scrollVertical: Never Xmessage*message.scrollHorizontal: Never Xmessage*message*background: black Xmessage*Text*background: white Xmessage*Text*foreground: red Xmessage*Text.borderColor: black Xmessage*Text.borderWidth: 0 Xmessage*Text*font: -xos4-terminus-*-r-normal-*-*-180-*-*-*-*-*-*" >> /etc/X11/xdm/Xresources_custom
This assumes you have the Terminus font installed. If you don’t have it, you can either install it through your package manager or alternatively fire up xfontsel and select something else that works for you.
- Create /etc/X11/xdm/Xsetup_custom with the following contents:
#!/bin/sh # # This script is run as root before showing login widget. #--- set a fullscreen image in background xloadimage -onroot -quiet -fullscreen /etc/X11/xdm/meditate-black-bottom_right.png #--- set Shutdown/Reboot buttons ( xmessage -buttons Shutdown:20,Reboot:21 "" ; case $? in 20) TERM=linux openvt -c 1 -f /usr/bin/clear exec openvt -c 1 -f -s -- /sbin/shutdown -hP now ;; 21) TERM=linux openvt -c 1 -f /usr/bin/clear exec openvt -c 1 -f -s /sbin/reboot ;; *) echo "Xmessage closed on $(date)" ;; esac ) &
Fix the path to the image in the xloadimage command if you placed the file (or a different background image) elsewhere.
Notice we use the openvt command to switch to the first virtual console for the purposes of executing the shutdown or reboot commands. This is because (on Debian Wheezy at least), terminating Xorg with XDM running will switch you back to the first virtual console, so you’ll need the output printed there if you wish to see anything during the shutdown sequence.
- Create /etc/X11/xdm/Xstartup_custom with the following contents:
#!/bin/sh # # This script is run as root after the user logs in. If this script exits with # a return code other than 0, the user's session will not be started. # terminate xmessage killall xmessage # set the X background to plain black xsetroot -solid black if [ -x /etc/X11/xdm/Xstartup ]; then /etc/X11/xdm/Xstartup fi # vim:set ai et sts=2 sw=2 tw=0:
As can be seen from this last few lines, we still re-use the contents of the original Xstartup script, so keep that around if using these scripts as is.
Finally, make sure the new files have the correct permissions. Xresources_custom only needs to provide read access, but Xsetup_custom and Xstartup_custom should be executable.
# chmod 0644 /etc/X11/xdm/Xresources_custom # chmod 0755 /etc/X11/xdm/Xsetup_custom /etc/X11/xdm/Xstartup_custom
And there you have it, and beautiful-looking XDM setup, that runs extremely fast but still includes the shutdown and reboot buttons.