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.
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.
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.
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.)
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.
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.
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.
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 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.
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.
Enjoyed this? Support me via Monero, Bitcoin, Lightning, or Ethereum! More info.