Essential preparation before desktop components getting involved.
Series Index
- Linux Bootstrap Installation
- Linux A/B System Updates via BTRFS Snapshot
- Linux Post Installation: Desktop Preparation
- Linux Desktop: Sway, Labwc, GUI Apps
Preface
This guide is based on Arch, but could also work for Debian/Ubuntu and Fedora. I’m trying my best to make it distro irrelevant.
Default Editor
(root)# echo "export EDITOR=/usr/bin/nvim" > /etc/profile.d/default-editor.sh
You could replace nvim with whatever you like.
Console Fonts
Install package terminus-fonts (Arch, Fedora) or fonts-terminus (Debian).
(root)# echo "FONT=ter-132b" >> /etc/vconsole.conf
Full font list is under /usr/share/kbd/consolefonts/, use setfont <font_name>
command to test.
Ref: Linux_console#Fonts
Console Caps Ctrl
Remap CapsLock to Ctrl for console.
(root)# cd /usr/share/kbd/keymaps/i386/qwerty
(root)# gzip -dc < us.map.gz > usa.map
(root)# sed -i '/^keycode[[:space:]]58/c\keycode 58 = Control' usa.map
(root)# echo "KEYMAP=usa" >> /etc/vconsole.conf
Ref: Linux_console/Keyboard_configuration#Creating_a_custom_keymap
Disable Watchdogs
This setting is for improving performance.
Check for a hardware watchdog module:
(root)# lsmod | grep wdt
Add to kernel module blacklist:
(root)# cat > /etc/modprobe.d/nowatchdogs.conf << EOB
blacklist iTCO_wdt
blacklist sp5100_tco
blacklist intel_oc_wdt
EOB
PipeWire
Install PipeWire related packages:
Arch, Debian: pipewire pipewire-alsa pipewire-pulse pipewire-jack wireplumber
Fedora: pipewire pipewire-alsa pipewire-pulseaudio pipewire-plugin-jack wireplumber
Bluetooth
Install Bluetooth related packages:
Arch: bluez bluez-utils
Fedora, Debian: bluez bluez-tools
Enable systemd service: systemctl enable --now bluetooth.service.
Printer
Install CUPS related packages:
Arch, Fedora: cups cups-pdf
Debian: cups printer-driver-cups-pdf
Enable systemd service: systemctl enable --now cups.service.
The CUPS server can be fully administered through the web interface, and there’s documentation for adding printer http://localhost:631/help/admin.html.
GPU Drivers

I only use AMD GPU and Intel GPU on Linux for the well known reasons.
Install mesa and vulkan related packages:
Arch AMD: mesa lib32-mesa vulkan-radeon lib32-vulkan-radeon
Debian, Fedora AMD: mesa mesa-vulkan-drivers
Arch Intel: mesa lib32-mesa vulkan-intel lib32-vulkan-intel intel-media-driver
Debian Intel: mesa mesa-vulkan-drivers intel-media-va-driver
Fedora Intel: mesa mesa-vulkan-drivers libva-intel-media-driver
Regular User
Install xdg-user-dirs package, it’s for managing well known user directories e.g. Desktop, Documents, Downloads etc.
Create regular user:
(root)# useradd -m -G wheel -s /bin/bash user1
(root)# passwd user1
GUI Fonts
Install Noto fonts related packages:
Arch: noto-fonts noto-fonts-cjk noto-fonts-emoji
Debian:
fonts-noto fonts-noto-extra fonts-noto-mono
fonts-noto-cjk fonts-noto-cjk-extra
fonts-noto-color-emoji
fonts-noto-ui-core fonts-noto-ui-extra fonts-noto-unhinted
Fedora:
google-noto-fonts-all
google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts
google-noto-emoji-fonts
The default lookup order for CJK fonts would pick wrong characters in some cases,
such as “复” in chinese word “复制”.
To fix this, adjust fallback font order by creating /etc/fonts/local.conf with:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
<alias>
<family>sans-serif</family>
<prefer>
<family>Noto Sans</family>
<family>Noto Sans CJK SC</family>
<family>Noto Sans CJK TC</family>
<family>Noto Sans CJK HK</family>
<family>Noto Sans CJK JP</family>
<family>Noto Sans CJK KR</family>
</prefer>
</alias>
<alias>
<family>serif</family>
<prefer>
<family>Noto Serif</family>
<family>Noto Serif CJK SC</family>
<family>Noto Serif CJK TC</family>
<family>Noto Serif CJK HK</family>
<family>Noto Serif CJK JP</family>
<family>Noto Serif CJK KR</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Noto Sans Mono</family>
<family>Noto Sans Mono CJK SC</family>
<family>Noto Sans Mono CJK TC</family>
<family>Noto Sans Mono CJK HK</family>
<family>Noto Sans Mono CJK JP</family>
<family>Noto Sans Mono CJK KR</family>
</prefer>
</alias>
</fontconfig>
Later you could create ~/.config/fontconfig/fonts.conf with same format under
your user home directory to overwrite this configuration,
replace with custom fonts under ~/.local/share/fonts.
Ref: Font configuration#Fontconfig configuration , Font configuration#Alias
Icon Theme
Install
icons
related packages: hicolor-icon-theme papirus-icon-theme.
wheel is the superuser group for sudo in Arch and Fedora, for Debian,
it’s named sudo.
GTK Theme
Set GTK icon theme
(user)$ ls /usr/share/icons
(user)$ gsettings set org.gnome.desktop.interface icon-theme Papirus
For dark GTK theme, install package gnome-themes-extra, then:
(user)$ ls /usr/share/themes
# GTK3
(user)$ gsettings set org.gnome.desktop.interface gtk-theme Adwaita-dark
# GTK4
(user)$ gsettings set org.gnome.desktop.interface color-scheme prefer-dark/default
Ref: GTK#Basic theme configuration , GTK 3 settings on Wayland
Qt Theme
IMHO, if you’re not intended to use KDE desktop environment, then avoid choosing KDE apps, since they are tightly coupled with the KDE suite, heavily rely on KDE’s components, lots of dependencies would be installed even for a very simple app, which is annoying. LXQt apps are in a similar situation.
The original qt6ct is archived, although there is a successor, I decided not dealing with KDE apps anymore. For other independent Qt apps, they usually work well by default, no need tools like qt5ct/qt6ct get involved.