It's Pi all the way down...


See Also: A look at the Hirsute desktop image, Jammy desktop image, and Making desktops with cloud-init.

One of the things I’ve been looking at recently is the relative performance of our desktop packages on the Pi (a lot of people seem to be trying to use the Pi 4 as a desktop work-horse - and it is reasonably capable of this with the right selections).

Anyway, here’s some quick notes from my experiments. Firstly, the various desktop packages and some comments (just in the order I tried them):

A bit sticky here and there (particularly during login and application selection - basically anywhere Gnome tries to do any animation), but tolerable.
A bit slicker than the default on the Pi; could actually be a reasonable choice for a default desktop.
It’s not pretty, but damn this flies! No real surprise there given it’s LXQt which is the basis of Raspbian too. With a bit of layout tweaking this would definitely be my go to choice of desktop under Ubuntu on the Pi.
Ouch, this is painful. Don’t misunderstand me - I love Kubuntu generally (I’m one of those old stick-in-the-muds that bemoans all the options that’ve disappeared from Gnome over the years and loves that they’re all still there on KDE). However, it’s undeniably heavier and on the Pi, even on a 4Gb Pi 4, it’s just unusable.
Oooh, pretty! Sadly, not that functional. The start menu is better than the default but (shock! horror!) the terminal won’t start, so that’s this experiment prematurely ended (yes, I could switch tty and fiddle around but the Mac-like prettiness hasn’t tempted me that much :).

Compatibility notes

I was only testing the arm64 images; I’d expect similar results under armhf though. Several things are worth adding to improve compatibility or enable hardware (these apply to pretty much all the desktops above):


Add dtoverlay=vc4-fkms-v3d to /boot/firmware/syscfg.txt to enable the “fake” KMS frame-buffer. Lots of GUI instability without this. For all those that want this to be the default: so do I, but there’s issues with doing this that need solving first (breaks u-boot’s video console, and breaks boot on the 3A+).


From Focal (20.04) onwards, dtparam=audio=on should be the default in the boot configuration so audio should at least be present. However, if you’re installing a desktop environment you also want to tweak a pulse-audio parameter to improve its scheduling and avoid choppy audio. Edit /etc/pulse/ and find the line:

load-module module-udev-detect

And append tsched=0 so that the line reads:

load-module module-udev-detect tsched=0

(thanks to BranLoux896 on the Raspberry Pi forums for mentioning this!)

Login managers

Most of the desktop packages provide a selection of display managers (gdm3, lightdm, ssdm, etc.) on installation. I attempted most selections and found that lightdm doesn’t work for some reason I haven’t tried to figure out yet, but gdm3 and ssdm work fine.

However, one issue with gdm3: it always defaults to the “ubuntu” desktop even if you’ve installed, say, lubuntu-desktop. After selecting the user to login as, click the gears at the bottom right and select the actual desktop you installed before completing the login :)

Wireless & Bluetooth

Install the “iw” package (which’ll pull in “crda”) and then run sudo iw reg set GB (if you’re in the UK like me; substitute GB for your region code otherwise) to set the WiFi region correctly (usually enables a few channels that aren’t enabled in the default “world region”). I’ll endeavour to get this in the image by default in Focal, but you’ll still need to set the region code for now.

Install the “pi-bluetooth” package to enable Bluetooth. This “just works” once the package is installed.

Remote desktops

I ran a quick experiment in Terminal Services-style remote desktops with xrdp under lubuntu-desktop (the only one I figured would be light enough to be worthwhile for such endeavours). To try this:

  • install the xrdp package
  • add the xrdp user to the ssl-cert group
  • reboot

Then you should be able to connect remotely using an RDP client (like remmina) providing you specify the username and password in the connection settings.

Another quick experiment in screen-scraping style remote desktop was semi-successful with the tigervnc-scraping-server package but a further experiment to do TS-style remote desktop with VNC wouldn’t work (some issue with GDM I didn’t have time to dig into).

Power saving

Power saving is … rather pointless. I forget which desktop I saw this on, but one of them decided to put the Pi to sleep on idle timeout and … that just effectively switched the Pi off! So, turn off all those suspend timers :)