> Martin Polden

Revisiting Linux on the desktop

It's been over a decade since I last used Linux on the desktop! Time really flies when it's not spent on tweaking your desktop environment and cursing Nvidia's shoddy drivers. However, I figured I was long overdue for trying Linux on the desktop again. Especially seeing as I'm a long-time Linux user on other fronts, such as my personal servers, and it being a significant part of my $DAYJOB.

Why now though? I have an old gaming machine that I wanted to breathe some life into. The machine used to run Windows 10 and was booted at most a few times a year. With Microsoft seeming hell-bent on deprecating perfectly fine hardware by requiring TPM 2.0 in Windows 11, I figured I might as well switch to Linux.

To top it off I was greeted by a dialog instructing me "you must sign into your Microsoft account again" when I booted Windows one last time, although I had never signed into anything. It was an obvious sign to purge this abomination of an OS once and for all!

Choosing a distribution

So how does this go again? It's been so long. Which distribution do I choose? Which desktop environment?

On my trusty personal server I've been running Debian since 2015. Debian would probably work perfectly fine for my desktop too, but it's a boring choice.

The last desktop distribution I remember using was Xubuntu with the XFCE environment, circa 2013. My impression is that Ubuntu and its derivatives seem to have lost their way long ago, with numerous privacy concerns and lack of innovation. Besides, if I wanted Debian unstable I would simply run that.

I did have a few requirements in mind though:

  • I wanted an immutable OS with low maintenance and safe upgrades
  • I wanted to try KDE again. Not having used it since the 3.x days

Fedora Kinoite

Eventually I landed on Fedora Kinoite which comes with the KDE desktop environment (there's also Fedora Silverblue, which comes with GNOME). Kinoite is an immutable OS with reliable upgrades, with most applications being isolated in containers or Flatpaks.

The last time I ran Fedora it was called Core 2, so it's definitely been a while.

The OS itself is immutable and upgrades are managed through rpm-ostree - a hybrid image/package system. In simplified terms rpm-ostree maintains two snapshots of the root filesystem. Whenever a upgrade is performed, rpm-ostree creates a new snapshot which you can then boot into. If anything breaks you can simply roll back to the previous snapshot. Since everything is immutable, there is no room for package conflicts or other broken states.

However, it's still possible to install additional packages by layering them on top of the immutable snapshot. This new snapshot will still be immutable though. Layering additional packages is often required in practice, e.g. to install non-free drivers. In my case I ended up layering the following set of packages:

$ rpm-ostree status -b
State: idle
BootedDeployment:
‚óŹ fedora:fedora/37/x86_64/kinoite
                  Version: 37.20230302.0 (2023-03-02T02:27:19Z)f
               BaseCommit: f14852827a340d0b159239b6455606cd308f7e5e133ef78a75335fbe0e07dc7b
             GPGSignature: Valid signature by ACB5EE4E831C74BB7C168D27F55AD3FB5323552A
          LayeredPackages: akmod-nvidia akmod-wl cronie emacs fzf htop mosh mozilla-openh264 restic ripgrep stow syncthing trash-cli
                           xorg-x11-drv-nvidia zsh zsh-syntax-highlighting
            LocalPackages: rpmfusion-free-release-37-1.noarch rpmfusion-nonfree-release-37-1.noarch

This adds the non-free drivers required by my hardware, H264 video support in Firefox, a decent shell and the one true editor.

Hardware support

Most of my hardware worked out of the box, with the exception of my Wi-Fi adapter which required a non-free driver (provided by the akmod-wl package).

The free nouveau driver was too unstable for me, causing the desktop to freeze at random, so I went with the non-free driver (provided by the akmod-nvidia package).

Bluetooth audio just worked out of the box. Color me impressed!

Applications

But if everything is immutable, how do I install applications?

Desktop applications are available through Discover - KDE's software center. These applications are installed as Flatpaks, thus isolating them from the base system. I recommend enabling the FlatHub repository, which provides a larger library of software, including non-free software such as Spotify and Steam.

For development tools, Fedora Kinoite comes with Toolbox which is a simplified front-end for interacting with containers. As with Flatpak, putting tools inside a Toolbox keep them isolated from the base system.

HiDPI and fractional scaling

I use a 27" 4K monitor, and I prefer scaling the desktop to 1.5. This is called fractional scaling and its implementation in KDE/Wayland is far from perfect.

In most cases it works well for applications that installed natively. However, it does not always work well for applications installed through Flatpak. There's probably several reasons for this, such as the high variation in UI frameworks.

I had to apply some tweaks to the following applications for them to scale properly:

Spotify

Copy /var/lib/flatpak/exports/share/applications/com.spotify.Client.desktop to ~/.local/share/applications. Then edit the file and add --force-device-scale-factor=1.5 to the ExecStart section.

VLC

VLC must be told the scale factor as well for some reason. Maybe it will be fixed in the next major version? If it's ever released.

Scale factor can be set with: sudo flatpak override --env=QT_SCREEN_SCALE_FACTORS=1.5 org.videolan.VLC

Conclusion

I've been running Fedora Kinote for a month now, and I'm really enjoying my resurrected desktop. The only major issue I've had is getting all applications to do fractional scaling properly.

The fact that most Steam games work fine in Linux now was a nice surprise.

Upgrades have been a breeze! It seems obvious to me that this way of managing OS packages is the future for Fedora and eventually Red Hat. It's infinitely better than DNF directly mutating a rickety RPM database.