Linux on the Desktop: Part Two

After more than 10 years on macOS I made the switch back to Linux on my desktop – but not how I originally intended. The PC laptop market is bonkers and I decided to not play along.

Linux on the Desktop: Part Two

Last year I set out to check whether I could leave macOS behind, after a decade of it being my daily driver. I wanted to switch back to the operating system I grew up with: Linux.
Not only has my own focus shifted in terms of tasks and workloads, but also have my concerns towards non-free software and services grown.

Up until now my everyday driver has been a 2018 15" MacBook Pro, which has served me well over the past couple of years but started to crumble due to more demanding tasks as well as bulky macOS updates and last but not least the spectre/meltdown fixes for Intel’s hardware that had an additional impact on the overall performance. Back in 2020, when I first began checking for options, it turned out that even though the MacBook was a few years old, the majority of PC alternatives - at least the ones that had an AMD sticker on them - had ridiculously outdated specs in terms of screen resolution, display brightness, aspect ratio, amount of RAM and even connectivity.

This changed in 2021, at least in theory. There have been a handful of exciting releases this year, unfortunately up until the end of Q2 most new devices were pretty much impossible to come by. Asus launched the 2021 version of their ROG Zephyrus G14, alongside a new G15 model, as well as the ROG Flow 13 that comes with an external GPU. Lenovo has announced the P14s Gen 2 AMD variant and even Razer jumped the AMD train with their new Blade 14. However, none of these devices are available for purchase right away. For example Asus' lineup has been out of stock for the past months and Lenovo doesn’t even care to communicate an availability date for their devices anymore.
It looks like one year later the PC laptop market is still a mess and I didn’t feel like dealing with it nor waiting any longer.

Instead, I decided to re-evaluate my needs. Why would I need a Linux laptop in first place? To be able to work from anywhere? Like in a cafe? Or on an airplane or train? Well, that still hasn’t picked up again, at least for me.
When was the last time I was outside and decided to take my MacBook with me and do stuff? I couldn’t even tell.\ Also, why shouldn’t I be able to travel with a piece of hardware that’s slightly bigger and heavier than a laptop, just like so many people do?
Wouldn’t it be more sustainable to have upgradable hardware over glued throwaway devices anyway?

Short story long: Fsck the PC laptop market, I’m building a Linux SFFPC!

The Linux Small Form Factor PC

In order to keep the build very compact and as lightweight as possible, I decided to opt for an open build instead of an enclosure. The case that I’m using is the Xtia Xproto-N. It’s very solid yet compact. Unfortunately the aluminum frame is nevertheless a heavy-weight compared to e.g. my printed PETg Ultra Portable Data Center.

The Xtia will however provide enough room for the Asus ROG Strix X570-I mITX motherboard and all other components that I decided to use on this build.

Asus ROG Strix X570-I mITX AM4 motherboard

In regard of the CPU I’m going with AMD’s latest Ryzen 9 5950X. Even though I’m not intending to overclock it (yet), I didn’t want to cheap out on this part since I’m looking forward to run -j17 and all sorts of things like containers and VMs, which will benefit from the amount of cores.

AMD Ryzen 9 5950X
AMD Ryzen 9 5950X on the Asus ROG Strix X570-I mITX motherboard

For storage I use two Samsung 980 Pro 1TB M.2 2280 NVMe SSDs. Why two? Because I’m running a RAID1 (a.k.a. mirrored) configuration.

As for the RAM, I’m rocking two 32GB DDR4-3600 CL18 modules. I picked the Team T-Force XTREEM ARGB modules, mainly because they play nicely with the motherboard and they look pretty dope. 64GB will go a long way under Linux and allow me to run multiple containers on Docker and Kubernetes, KVM virtual machines and maybe even Google Chrome.
(Just joking, I’m not voluntarily installing a Trojan horse.)

Team T-Force XTREEM ARGB 64GB DDR4-3600 CL18 RAM

The PSU is a Corsair SF 600W - for now. Since GPUs are still ridiculously overpriced I won’t be needing the 750W variant yet. However, as soon as I’ll be able to get a newer gen Radeon well below its MSRP I might need to upgrade the power supply.

Corsair SF 600W 80+ Platinum SFX PSU
Mounting the T-Force XTREEM RAM
2 x 32 GB DDR4

In order to keep the Ryzen 9 cool I decided to put on an AIO. Usually I’d go with a Kraken, but since their Z53 is barely available and imho not worth the $229.99, I decided to try the Lian Li Galahad at nearly half that price instead.

Lian Li Galahad AIO 240
Fiddling cables through the Xtia Xproto-N

Additionally I replaced the Lian Li stock fans with two Cooler Master MF Halo 120.

Not that I needed all that for the build, but once you get locked into a serious LED collection, the tendency is to push it as far as you can.

Cooler Master MF Halo 120s in action
Silent operation thanks to the AIO
No pump whine or bubbling sound whatsoever

As for the GPU, I’m currently using an AMD Radeon Pro WX 2100 2GB graphics card on this build. It’s the only piece that I had to buy used, simply because at the time building this there were no newer Radeon cards available that made sense financially. I’m looking forward to upgrade the GPU to either a Radeon VII or maybe even a newer Radeon 6700 XT.
However, for now the WX 2100 is sufficient for testing ROCm and running Wayland.

The Operating System

Now that the hardware is ready, let’s switch over to the software side. This build runs Gentoo (told you I’ll be needing the -j17) with a custom Linux 5.12.13 kernel. I’m using -march=znver3 and (for the most parts) stable amd64 packages. Everything including sensors (except for Bluetooth, which I did not test yet) works perfectly fine.

00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Root Complex
00:00.2 IOMMU: Advanced Micro Devices, Inc. [AMD] Starship/Matisse IOMMU
00:01.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:01.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse GPP Bridge
00:01.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse GPP Bridge
00:02.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:03.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:03.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse GPP Bridge
00:04.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:05.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:07.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:07.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B]
00:08.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:08.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B]
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 61)
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge (rev 51)
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 0
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 1
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 2
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 3
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 4
00:18.5 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 5
00:18.6 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 6
00:18.7 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 7
01:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a80a
02:00.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Matisse Switch Upstream
03:01.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Matisse PCIe GPP Bridge
03:03.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Matisse PCIe GPP Bridge
03:05.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Matisse PCIe GPP Bridge
03:08.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Matisse PCIe GPP Bridge
03:09.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Matisse PCIe GPP Bridge
03:0a.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Matisse PCIe GPP Bridge
04:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a80a
05:00.0 Network controller: Intel Corporation Wi-Fi 6 AX200 (rev 1a)
06:00.0 Ethernet controller: Intel Corporation I211 Gigabit Network Connection (rev 03)
07:00.0 Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Reserved SPP
07:00.1 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller
07:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller
08:00.0 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] (rev 51)
09:00.0 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] (rev 51)
0a:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Lexa XT [Radeon PRO WX 2100]
0a:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Baffin HDMI/DP Audio [Radeon RX 550 640SP / RX 560/560X]
0b:00.0 Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Function
0c:00.0 Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Reserved SPP
0c:00.1 Encryption controller: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Cryptographic Coprocessor PSPCPP
0c:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller
0c:00.4 Audio device: Advanced Micro Devices, Inc. [AMD] Starship/Matisse HD Audio Controller

The system runs on a RAID1 across both 1TB SSDs. This time I dismissed the mdadm-luks-lvm-approach and used ZFS instead. ZFS comes with batteries included, so no more mdadm needed for RAID and no more luks needed for encryption. It also comes with bragging rights included, for the ridiculous storage limit of 256 quadrillion zettabytes.

  pool: rpool
 state: ONLINE
config:

	NAME           STATE     READ WRITE CKSUM
	rpool          ONLINE       0     0     0
	  mirror-0     ONLINE       0     0     0
	    nvme0n1p4  ONLINE       0     0     0
	    nvme1n1p4  ONLINE       0     0     0

errors: No known data errors

The amdgpu driver for the WX 2100 initially had some weird glitches, which I was able to fix by setting the power_dpm_force_performance_level to high:

echo 'high' > /sys/class/drm/card0/device/power_dpm_force_performance_level

The PC connects to an LG 32UN500-W display over Display Port and the Radeon Pro manages to drive Wayland in full 4k resolution without any issues at all.

PulseAudio can either play over the Radeon’s DP connection (through the display speakers) or switch to the integrated sound card’s audio out. I haven’t tested audio over Bluetooth yet.

I’m using sway as a WM/DE. If you’re interested in the exact setup, check out my dotfiles and follow me on Mastodon and reddit for more related content. In the coming days I will update the info on my computer and infrastructure pages as well.

         -/oyddmdhs+:.                mrus@cbrspc7
     -odNMMMMMMMMNNmhy+-`             ------------
   -yNMMMMMMMMMMMNNNmmdhy+-           OS: Gentoo/Linux x86_64
 `omMMMMMMMMMMMMNmdmmmmddhhy/`        Kernel: 5.12.13-gentoo
 omMMMMMMMMMMMNhhyyyohmdddhhhdo`      Uptime: 1 day, 11 hours, 34 mins
.ydMMMMMMMMMMdhs++so/smdddhhhhdm+`    Packages: 1065 (emerge)
 oyhdmNMMMMMMMNdyooydmddddhhhhyhNd.   Shell: zsh 5.8
  :oyhhdNNMMMMMMMNNNmmdddhhhhhyymMh   Resolution: 3840x2160
    .:+sydNMMMMMNNNmmmdddhhhhhhmMmy   WM: sway
       /mMMMMMMNNNmmmdddhhhhhmMNhs:   Theme: Kripton [GTK3]
    `oNMMMMMMMNNNmmmddddhhdmMNhs+`    Icons: Adwaita [GTK3]
  `sNMMMMMMMMNNNmmmdddddmNMmhs/.      Terminal: alacritty
 /NMMMMMMMMNNNNmmmdddmNMNdso:`        Terminal Font: 'FiraCode Nerd Font'
+MMMMMMMNNNNNmmmmdmNMNdso/-           CPU: AMD Ryzen 9 5950X (32) @ 3.400GHz
yMMNNNNNNNmmmmmNNMmhs+/-`             GPU: AMD ATI Radeon PRO WX 2100
/hMMNNNNNNNNMNdhs++/-`                Memory: 15694MiB / 64273MiB
`/ohdmmddhys+++/:.`
  `-//////:--.

All in all I’m extremely satisfied with this build and the performance it delivers. I don’t think I could have gotten a better bang for the buck if I went for a laptop, especially in terms of performance and upgradability. While mobility won’t be as good, I’m excited to see how it will turn out as soon as travel will resume. However, since I have already been successfully traveling with an external mechanical keyboard, as well as a mouse, a portable 15" 4k display and all sorts of other electronics, I’m used to it and don’t believe it to be a big PITA. And while mobility is a trade-off, it can easily be forgiven when compiling the Linux kernel takes less than 5 minutes and building Firefox from scratch completes in under 10 minutes.

From a thermals perspective the open build and AIO work extremely well. The CPU stays well below the 70 degree (Celsius) mark even during heavy workloads. Its regular operating temperature is at 35 degrees, with the fans running in silent mode, at an ambient temperature of well above 24 degrees.

As for the desktop experience I’m also very pleased how well and stable Wayland has become. The flows I was used to on macOS using tmux are pretty much the same on sway, with the only difference that now tmux controls work for all sorts of applications, not only split panes within tmux itself, heh.

I’m still in the middle of putting together my rice, but as soon as I have something to show off it will be uploaded here and there.

My new primary workstation

PS: This post was written under Linux. I’m still lacking of a Capture One clone for Linux, though, hence the photos were edited under macOS.

categories [journal make] · published [2021-07-05] · updated [2021-07-05]