My Journey to Desktop Linux

written by fancysandwiches on 2024-06-10

Has it been easy? Definitely not. Does it work? After lots of effort, yes!

In my last blog post I talked about how Windows 11 has been an awful experience that is only getting worse by the day, and I was finally fed up enough to try and do something about it. I wish I could say that it's been an easy journey, but it has most definitely not been easy. Luckily I had a pile of past experience that is unfortunately still relevant.

Attempt 1: Bazzite

My first attempt at ditching Windows was a complete disaster. Lots of folks recommended (directly, and indirectly) that I go with Bazzite. I read over their docs, and was intrigued, so I decided to give it a go. I think it's really cool to see a gaming focused Linux distribution, something that was never available to me in my past experience with Linux on the Desktop, so I was really excited to give it a try.

The process of installing Bazzite was immediately bad. Bazzite is a Fedora derivative, so it uses the Fedora installer, which in my humble opinion, could really use some work. Setting up the disk partitions was not a fun experience. On my first attempt while trying to figure out the UI the installer froze. On my second attempt I tried using the "advanced" partition editor, which also froze, this time with an error that I could close, but then was dumped to an empty screen with no way to continue. On third attempt it worked, but only after I figured out the magically correct order of operations to create a partition for / and then a separate partition for /home. The gist of how I did this was something like:

  1. Create a partition for /, give it a limited amount of space
  2. Create a partition for /home, which is automatically merged with the / partition, no option to give it additional space on your un-partitioned drive
  3. Select the /home mount point that was merged with /, click some dropdown to modify it, select create new volume and tell it to use the rest of the space on the drive

Folks, this UI is really bad. It's not even close to intuitive. You can do any of the operations in any order you want, but there is only one magical order of operations that lets you put /home on a separate partition (and there are no hints pointing you in the right direction). The stuff I was using back in 2007 to install Ubuntu was more straightforward than this. I really don't like saying bad things about the software that people write, we're all human after all, but how on earth did this ever make it to release? It's probably the worst partition tool I've ever used.

After I figured out the partitioning the install went smoothly and I was booting into Bazzite in less than 15 minutes of time. At first glance I was impressed. The UI in Bazzite (KDE Plasma 6, with the Steam OS skin) is pretty great, everything felt really smooth, and looked pretty modern. The keyboard shortcuts I know and love just worked (changing virtual desktops, pinning windows to the left or right of my screen). Both of my monitors worked right out of the box. The tool that Bazzite ships with to help you set up your computer on first boot is also really, really useful. I was impressed with all of the options it gave me, nearly all of the software I use on a regular basis was available in the setup tool, except for DigiKam, but that's easy to install. Overall, the "first login" experience for Bazzite really great, the best I've ever experienced, I was pleasantly surprised.

The Problems

Unfortunately for me, everything after the initial setup phase was a test of my patience and debugging skills. The most unfortunate thing about my computer is that I have an NVIDIA 3080 Ti. Now, normally, I'm happy to have a 3080 Ti, it's a really capable graphics card that allows me to play most games. However, as of May 2024, using an NVIDIA graphics card with a Wayland compositor is a truly horrendous experience. The gist of the problem is that Wayland doesn't have a way to properly sync with an NVIDIA card, and as a result anything rendered by your GPU is going to have issues. Here is a small list of issues I encountered while trying to use a Wayland session in KDE Plasma:

  • The Steam UI was constantly flickering and glitching
    • Any pop-ups or modals opened in the Steam UI would randomly disappear and re-appear
    • Sometimes the Steam UI would just render other bits of UI from other applications that were open
  • On Slack and Discord typing was effectively broken, the letters you typed did not appear immediately, and sometimes disappeared
  • I could not copy/paste into most applications, this makes entering passwords really difficult
  • Resizing the terminal application that ships with Bazzite would result in the terminal window freezing, requiring it to be force closed

The good news here is that the Wayland folks added a new "explicit synchronization" protocol that will work with NVIDIA cards, but unfortunately it's not yet usable, and probably won't be for another few months. We have to wait for NVIDIA drivers to support the feature, as well as window managers (like kwin, which KDE Plasma uses). There's a great overview here and an in depth article from a Wayland developer here.

Once I had figured out that Wayland wasn't an option for me I figured I could just ride it out over in X11 land until explicit sync gets properly implemented and supported. Unfortunately for me, I picked the worst possible time to try and use a Fedora based system, as X11 is currently broken on Fedora as evidenced here and here. This took me a while to figure out, but I am glad I did. Here are some of the issues I was seeing:

  • Window management is painfully slow, moving a window from one part of the screen to another results in massive ghosting, the worst I've seen since Windows 98
  • Audio is significantly quieter for no apparent reason
  • Interacting with any OS UI elements is really slow, for example clicking on links in the Discover app installer took minutes to open the links
  • There are no animations, windows just appear and disappear, it's really jarring
  • Adaptive sync is broken (I have a g-sync monitor)
  • I cannot change scaling on individual monitors, it's global scaling only, so everything on my 4k monitor looks like it was rendered for ants

It's in such a bad state that there is no way I could ride it out until a fix arrived, so I decided to try something else.

Attempt 2: Pop!_OS

First, the good. I've been using Pop!_OS for about three weeks now, and it's fantastic. When it works, it works really, really well. The keyboard shortcuts are all different than when I'm used to, but intuitive enough that it hasn't been a pain. It feels thoroughly modern, and entirely capable. Everything I've wanted to do on my computer, I have been able to do. Most things just work as expected, and every game (except one) worked out of the box flawlessly.

Getting it working properly took hours of effort, debugging, research, and editing text files. First and foremost, out of the box, it did not work properly with my secondary monitor. I have a 1440p monitor as my primary, and a 4k monitor as my secondary. It detected my 4k monitor, and pretended like it was rendering stuff, but the monitor was just black the whole time. To fix this I had to change the refresh rate from 60Hz to 59.94Hz. Why that magic number? I have no clue, I don't even know why it's an option, but it is, and it works.

I was able to get proper fractional scaling on just my 4k monitor as well, which is really nice, it does it on par with Mac OS, whereas on Windows fractional scaling often didn't work correctly, some apps would just render wrong, sometimes it just turned off fractional scaling after waking up from sleep (it would fix itself eventually). So this is a solid improvement, and one I genuinely didn't expect to see.

The next problem was that the login screen was not honoring any of these settings. When logging in it set the refresh rate to the bad setting, so the monitor rendered nothing, but it was also set to primary, so I just couldn't see a login screen unless I turned the monitor off. If you google around there are hundreds of people with this problem, and the solution is to copy your ~/.config/monitors.xml to ~gdm/.config/monitors.xml, but this does not work for me. There are a lot of different varieties of people suggesting certain settings you can write yourself to this file as well, but none worked for me. People suggest sudo chown gdm:gdm ~gdm/.config/monitors.xml, but that does not work for me. Nothing involving changes to monitors.xml worked for me.

While debugging the login monitor settings I disabled my secondary monitor in order to generate a new monitors.xml, however after that if I opened the display settings and tried to enable the secondary monitor the UI would close due to a segfault error. I don't remember exactly how I solved this one, but eventually I was able to re-enable the monitor, and now the settings screen doesn't segfault.

Eventually the solution came down to adding an X11 config file (/etc/X11/xorg.conf.d/10-monitor.conf) that sets my 1440p monitor as the primary display it looks like:

Section "Monitor"  
  Identifier "DP-2"  
  Option "Primary" "true"  
EndSection

With that the login screen now shows up on the correct monitor. This took wayyyy too long to figure out.

Another other issue I had was that I could not launch Yakuza Kiwami, it would open a window to a black screen, then crash. I couldn't find a solution so I posted to an existing issue thread on Github. Five days later someone identified the underlying cause, then a day after that a valve employee told me how to fix the issue. I was then able to confirm the fix, and now they're adding it as a default override on Proton so future users don't have this issue. So, not only is the issue resolved for me, but it's resolved for other people encountering the same issue (and I found about three other folks with the same problem).

All other games run flawlessly, including Helldivers 2, which I am super happy about because that's the game I've been playing with my friends the most. It's been a smashing success for all the games I'm interested in.

I did have to uninstall and reinstall the drivers for my Xbox Wireless adapter, because one day my controller stopped connecting. However, I have had to do that countless times on Windows this past year, so this is not any worse.

The PyCharm Flatpak is broken, and requires some fiddling to get working. This was a pain, all I wanted to do was write a little code, and I had to spend a good chunk of time tracking down this problem. But that's not all: The git integration is completely broken (probably because it's isolated from other applications?), and every time I close and re-open the application it complains about some lock file being present, preventing the application from opening. In order to open PyCharm I have to delete this lock file, then it will open.

Success?

Everything I've wanted to do I have been able to do. Most impressively, I've been able to play a ton of Helldivers 2 with my friends, with no issues at all. It worked flawlessly. Editing photos works the way I want it to work. I'm having no issues browsing the web. Every issue I've run into has been solved, I even beat Yakuza Kiwami, and started Yakuza Kiwami 2. Overall it has been a great success, but it was not an easy transition. If I wasn't already so experienced with computers I don't think I would have been able to get it all figured out, and would probably have given up.

Next Up

In the near future Pop!_OS is changing their existing GUI to a new system called COSMIC. It looks exciting, but I've been around for at least two major GUI upgrades in the past and none have ever been a smooth transition. I'm cautiously optimistic that it will be a fun new upgrade, but fully expecting it to be a painful transition. I'll probably write about it when I make the upgrade, which I believe is later this year. If the transition doesn't work out I will probably give Bazzite another try, hopefully the explicit sync stuff will all be working by then.