The mere mortal's guide to desktop Linux
Reading time: 11 minutes
- Main part
- What’s with all these distributions? Which one do I choose?
- The look and feel: Desktop environments
- Display servers: Xorg vs Wayland
- How to install software? Wth are flatpaks, snaps, .debs, .rpm?
- Help! I’m using multiple monitors with different refresh rates and they’re all stuck at 60Hz
- Help! I’m using GNOME with multiple monitors and I can’t set different wallpapers (Hydrapaper)
- Help! My audio/mic suddenly stopped working (PipeWire vs PulseAudio)
- Help! My PC froze and I can’t access the TTY (REISUB)
- Why you might want to use Linux
- My experience with Linux
This guide assumes you know what Linux is and that you might be interested in using it instead of Windows/macOS. I won’t be covering the terminal, typical Unix tools, or the history of Linux. There are plenty of fantastic tutorials out there for that. Instead, I want to focus on all the things that are specific to the desktop Linux experience. This isn’t a deep dive; instead, this is meant to serve as a quick way to get you started. It’s a collection of things I wish I had known when I started using Linux.
We’ll start with the main info, along with the gotchas I’ve encountered and all the workarounds I had to do.
After the main part, I’m going to explain why you might want to use Linux, what my experience was with it, and why it’s become my favorite OS after 20+ years of daily-driving Windows.
Finally, I just want to mention that it’s really not that hard or that massive of a change. The whole “Linux is free if you don’t value your time” might’ve been true in the past, but for me, in 2024, it genuinely isn’t the case.
Ready? Let’s dive in!
Main part
What’s with all these distributions? Which one do I choose?
Distributions, or distros, are the same Linux OS, they just basically come with different software/packages preinstalled, and they differ in how often they update software/packages. That’s it. Yep, really, that’s basically it. Distributions DON’T determine the look and feel of your desktop, those are called “desktop environments” or DEs, which we’ll cover next. So you could install Debian or Arch and make them look exactly the same. It’s not about how it looks.
Ultimately, I think it comes down to how often you want to update your desktop.
Do you want to update daily/weekly and get the newest software? Then go for Arch or Arch-based (Manjaro).
Do you want to update less frequently (monthly, every 6 months) and want a more stable experience? Then go for Debian or Debian-based (Ubuntu, Pop!_OS, Mint, Zorin).
I use Pop!_OS. It’s Debian-based, and I prefer those for stability. I’m not a huge fan of frequent updates. And it’s great for beginners. I’ve always had a smooth experience with it.
Ironically, Linux Mint, which is also usually recommended for beginners, wasn’t such a great experience for me. For some reason, I couldn’t get the AMD GPU or Wi-Fi drivers to work, even after 3+ hours of tinkering, so I gave up and went back to PopOS. Normally they should install automatically, but idk what happened, YMMV ¯_(ツ)_/¯
The look and feel: Desktop environments
DEs are just GUI programs, just like explorer.exe
on Windows.
The most popular ones are GNOME and KDE. KDE is extremely customizable.
GNOME is simpler in its philosophy (“less is more”) but is still customizable via the gnome-tweaks
program.
There’s also other simpler DEs like Xfce, which might be better for a lower-spec device since it’s lighter on resources than GNOME/KDE. You also have the Cinnamon and MATE DEs, which come by default with Linux Mint.
But the main point is that you can choose whichever DE you want for your distro.
I like the simplicity of GNOME, and I customized it just enough for my liking.
Here’s an example of my GNOME setup:
I followed this specific video when customizing my setup: https://youtu.be/rYQFBCE0aq8
Display servers: Xorg vs Wayland
Desktop environments and all other GUI software use programs called display servers, which take care of input/output like mouse clicks and keyboard presses, and they also handle communication with the OS and hardware. There are 2 display servers you could use: Xorg or Wayland. Technically, Xorg is an implementation of the “X Window System”, whereas Wayland is just a protocol, but I digress.
The main point is that you can either use Xorg, which is old and lacks some features but has been widely supported until recently, or you can use the newer one called Wayland. Development/adoption for Wayland has been relatively slow, so some programs might not work well with it, or you might have worse performance in games if you have an Nvidia GPU. Fortunately, I’ve had 0 issues with Wayland, even in games (though I have an AMD GPU).
On GNOME, you can easily switch between Xorg/Wayland by just logging out and then clicking the gear icon.
How to install software? Wth are flatpaks, snaps, .debs, .rpm?
On both Windows and macOS, you can install software in various ways, such as:
- Manually downloading and opening an installer file (
.msi
and.exe
on Windows,.pkg
and.dmg
on macOS) - Using a package manager (Chocolatey on Windows, Homebrew on macOS)
- Using the Microsoft/App store
On Linux you have the same options:
- Manually downloading and installing software. If it’s an AppImage then you just run the program directly like an
.exe
, otherwise you install the downloaded file via a GUI or a package manager. - Using a package manager (APT on Debian-based, Pacman on Arch-based, DNF on Fedora-based, Zypper on SUSE-based, Snap for snap packages, Flatpak for flatpak packages, etc.)
- Using an app store. For example, on Pop!_OS there’s the Pop!_Shop.
I mostly just use my distro’s package manager. So I just do sudo apt install SOME_PACKAGE
.
If you end up manually downloading a package, here’s a bit of info on various package formats/files:
.deb
and.rpm
are just regular packages and are meant to be installed by your package manager. These also specify which other packages they depend on. On Debian-based distros you’d dosudo apt install YOUR_DOWNLOADED_PACKAGE.deb
..flatpakref
files or Flatpaks are a bit different. The software/packages are sandboxed, meaning you have to explicitly give a program permission to access things like your filesystem, similar to apps on your smartphone. Flatpaks are self-contained, so they don’t depend on other packages..snap
or snaps were created by Canonical (the creators of Ubuntu) and they’re similar to Flatpaks. However, unlike flatpaks, the snap store/backend is closed-source/proprietary.
Help! I’m using multiple monitors with different refresh rates and they’re all stuck at 60Hz
Switch to Wayland! This was how I discovered the difference between Xorg and Wayland. I was using 1 monitor @ 60Hz, 1 @ 75Hz and 1 @ 144Hz. They were all stuck at 60Hz. Xorg doesn’t support multiple monitors with varying refresh rates.
Help! I’m using GNOME with multiple monitors and I can’t set different wallpapers (Hydrapaper)
Here’s a quick how-to with the HydraPaper
utility:
- Install HydraPaper: https://hydrapaper.gabmus.org/
- Use it to merge multiple wallpapers/images into 1 file
- Your merged file should be in
~/.var/app/org.gabmus.hydrapaper/cache/org.gabmus.hydrapaper
, feel free to copy it to a convenient location. Right-click on it and chooseSet As Wallpaper
. - Open GNOME Tweaks, go to
Appearance > Background > Adjustment
and set it toSpanned
. - Done 🎉
It’s a bit of a process, and I wish this could just be done in the settings by GNOME. From what I’ve read, this isn’t an issue on KDE (no need for a 3rd party tool like HydraPaper).
Help! My audio/mic suddenly stopped working (PipeWire vs PulseAudio)
Just like Xorg and Wayland are the servers used for graphics/GUIs, PipeWire and PulseAudio are both servers used for sound. PipeWire is newer and is likely to be installed by default if you use GNOME.
The only issue I’ve had with PipeWire is that sometimes my mic would stop working. Even rarer would be that audio completely stopped playing.
The fix is just restarting it with systemctl --user restart pipewire
and that’s it. No need to restart your PC.
Help! My PC froze and I can’t access the TTY (REISUB)
Normally when Linux freezes and your mouse doesn’t respond anymore, you can switch to a virtual console by pressing CTRL+ALT+F1
, CTRL+ALT+F2
, CTRL+ALT+F3
, etc.
Then you can use a tool like ps
to figure out which process is hogging the CPU and then kill it with kill -KILL PROCESS_ID
, or you can reboot your PC with sudo reboot
.
But what if you can’t even access a virtual console? I’ve had that once, and it was ironically caused by Steam. It’s ironic because Steam’s Proton runs games flawlessly on Linux, but the client itself is buggy and constantly keeps crashing.
In that case, it’s time to bring out the magic incantation. You press and hold Alt+SysRq
and then you press R
, E
, I
, S
, U
and B
one at a time.
Alternatively, instead of Alt+SysRq
it seems that you can do Alt+Print Screen
.
For more info on what these combos do, see: https://unix.stackexchange.com/a/33891
And that’s about it! I’ve skipped a few things (you might want to read up on systemd, GRUB, the Linux file system, etc.) but I think this is enough to get started. You should at least now be able to Google for any issues more accurately.
The best way to learn is to just dive in. Good luck and have fun!
Why you might want to use Linux
Besides wanting to write a guide that gathers most of the info I wish I’d known back when I started using Linux as my main OS, part of the inspiration for this guide came after reading DHH’s Why don’t more people use Linux? blog post.
In short, if you’re a technically-minded person, by using Linux you will very likely learn a lot about how computers work and learn valuable skills that allow you to do things that were hard or not doable before. Yes, using the terminal/shell and all the Unix tools might seem daunting, but with time you’ll get used to it.
But besides the technical aspect, when you use Linux, you are free to do as you please. You decide what you want to do. Want to update? Go ahead. Don’t want to update? No problem, it’s your choice. Want to completely change how your desktop looks? Go nuts.
It’s not for everyone, and there is a learning curve, but it’s very much doable.
My experience with Linux
The first time I used Linux was in early 2018. I daily-drove Ubuntu for 6 months, and I didn’t have that great of an experience. One of the biggest annoyances back then was that using VLC completely froze my PC on at least 3 separate occasions. Gaming wasn’t as great as it is today. I had no clue about Xorg vs Wayland. Quite a few programs were buggy. So I ended up going back to my good old Windows 7.
But then I got curious about it again in 2021, because I wanted to be able to manage a Linux server/VPS in the future instead of relying on expensive “cloud-native” services. So I figured I’d try it again. But instead of using it on my main machine, I figured I’d use it on my laptop, which I mostly just used for browsing, media consumption, and light work. This time things went much, much better. Partly because of previous experience (+ experience at work with Unix tools and WSL), but I think also because things felt much more stable and “just worked”.
So I kept using it on my laptop (initially Xubuntu, then Zorin, and finally PopOS). Then, in late 2023, I was getting annoyed with all the changes in Windows. I dreaded the idea of upgrading to Windows 11 and realized I should probably try Linux on my desktop again. I could probably write a separate blog post about all the issues I have with Windows:
- I was getting tired of all the changes that don’t actually improve the UX. I miss Control panel. Windows 7 was the best.
- I don’t want results from the web in windows search.
- I don’t want sudden forced updates.
- Why do I need to create and log into a Microsoft account to use Windows on my PC?
- I most definitely don’t want AI anywhere near my devices.
I even thought things suddenly freezing were mostly a Linux-only thing, but Google Chrome froze my PC multiple times on Windows, which is why I switched to Firefox and haven’t had any issues since.
So I’ve been using PopOS on my desktop since January 2024, and it’s been great. Not like a “yeah it’s kind of annoying and I wasted X hours BUT you see…” kind of thing. No, it’s actually been great and hassle-free. Gaming has been great. Developing has been great. If I want to change some core component or fix an issue, I have the option to do it myself.
And as a bonus, I’m now more comfortable with the most popular OS for servers.