Build a compact workstation with essential components, no ricing.
Update
This article is no longer maintained, please refer to the new one: Linux Post Installation: Desktop Preparation.
Prerequisite
For basic system installation, refer to my prev post: Arch Linux: LUKS + Btrfs + Systemd-boot
Upgrade system first before installing any packages.
Ref: System maintenance#Avoid certain pacman commands
#(root) pacman -Syu
Wayland
I prefer wayland GUI environment since its ecosystem is mature enough.
I prefer wayland compositors since I’m an experienced user who thinks desktop environments are bloat.
I use sway on my host machine, and use labwc
for virtual machine.
Sway & Labwc
Packages for Sway, Labwc and other essential components:
#(root) pacman -S \
sway swaylock swayidle swaybg labwc \
xorg-xwayland wl-clipboard \
xdg-desktop-portal-wlr xdg-desktop-portal-gtk xdg-user-dirs \
wmenu mako wob grim sway-contrib kanshi wev
xdg-desktop-portal:
xdg-desktop-portal-gtk : necessary component for e.g. file chooser.
xdg-desktop-portal-wlr : necessary component for e.g. screenshot.
xdg-user-dirs:
manage well known user directories e.g. Desktop, Documents, Downloads etc.
wl-clipboard : necessary for ctrl-c ctrl-v function.
wmenu : menu for launching apps and running commands.
mako : desktop notification.
wob : indicator bar for volume or brightness.
grim screenshot tool for wayland.
sway-contrib : grim helper for partial screenshot.
kanshi: dynamic output configuration.
wev : detect key name, for configuring keybindings.
Here is my configurations for sway and labwc: wlrc.
CJK Fonts Fix
#(root) pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji
The default lookup order for CJK fonts has a little problem, picking wrong characters in some cases, such as “复” in chinese word “复制”.
Adjust fallback fonts order to fix the problem,
create /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 to
overwrite this configuration, replace with custom fonts under ~/.local/share/fonts
for example.
Ref: Font configuration#Fontconfig configuration , Font configuration#Alias
Appearance Fix
There are some configurations need to be fixed for GUI apps.
Icon Theme
Icon theme is an essential component, Papirus is a good one.
“It is recommended to install the hicolor-icon-theme package as many programs
will deposit their icons in /usr/share/icons/hicolor/ and most other icon themes
will inherit icons from the Hicolor icon theme”
#(root) pacman -S papirus-icon-theme hicolor-icon-theme
Ref: Icons
GTK Theme
Set GTK icon theme
$ ls /usr/share/icons
$ gsettings set org.gnome.desktop.interface icon-theme Papirus
Set GTK dark theme
#(root) pacman -S gnome-themes-extra
$ ls /usr/share/themes
(GTK 3)
$ gsettings set org.gnome.desktop.interface gtk-theme Adwaita-dark
(GTK 4)
$ gsettings set org.gnome.desktop.interface color-scheme prefer-dark/default
Ref: GTK#Basic theme configuration , GTK 3 settings on Wayland
Qt Theme
Without proper settings, Qt apps is not looking good, also may not showing icons correctly.
Install qt6ct and set environment variables, then restart wayland compositor:
#(root) pacman -S qt6ct
$ echo "export QT_QPA_PLATFORMTHEME=qt6ct" >> ~/.bashrc
Ref: Configuration of Qt 5/6 applications under environments other than KDE Plasma , Not showing functional icons
Ref: No sound in mpv vlc but works in web browser
Terminal
Alacritty is a modern terminal emulator that comes with sensible defaults.
#(root) pacman -S alacritty
File Manager
Nautilus
Nautilus also known as GNOME/Files.
#(root) pacman -S \
nautilus nautilus-image-converter gvfs gvfs-mtp gvfs-gphoto2 gvfs-afc
GVFS: for auto mounting usb drives, mobile devices and trash functionality.\
Dolphin
Dolphin is the default file manager of KDE.
#(root) pacman -S dolphin qt6-imageformats
qt6-imageformats is for webp thumbnail support.
Change default terminal, edit ~/.config/kdeglobals with:
[General]
TerminalApplication=alacritty
TerminalService=Alacritty.desktop
Ref: Dolphin change default terminal
Fix empty appliction list when right click open with:
#(root) pacman -S archlinux-xdg-menu
$(user) echo 'XDG_MENU_PREFIX=arch-' >> ~/.bashrc
When application desktop entries changed, run kbuildsycoca6 --noincremental.
Ref: Dolphin cannot find applications
Disable KDE Wallet, since it would cause web browsers losing login sessions:
$(user) cat > ~/.config/kwalletrc << EOB
[Wallet]
Enable=false
EOB
Ref: Disable KDE Wallet
iOS Support
For iOS device support, you need to install ifuse:
#(root) pacman -S ifuse
Disable recent files
$(user) rm ~/.local/share/recently-used.xbel
$(user) ln -s /dev/null ~/.local/share/recently-used.xbel
PeaZip
I recommend PeaZip as archive manager.
Install dependency first:
#(root) pacman -S qt6pas
Download peazip tarball and extract to e.g. /data/apps/peazip,
copy /data/apps/peazip/res/share/batch/freedesktop_integration/peazip.desktop
to ~/.local/share/applications/ then edit Exec and Icon path:
Exec=/data/apps/peazip/peazip %F
Icon=/data/apps/peazip/res/icons/peazip
Ref: Desktop entries
Also recommend installing 7zip package for file compression in command line.
Sound System
PipeWire
#(root) pacman -S \
alsa-utils \
pipewire pipewire-alsa pipewire-pulse pipewire-jack lib32-pipewire \
wireplumber
Ref: Advanced Linux Sound Architecture , PipeWire
Pavucontrol
Volume control tool, for switching output sound device.
#(root) pacman -S pavucontrol
GPU Drivers
#(root) pacman -S vulkan-radeon lib32-vulkan-radeon lib32-mesa
For Intel graphics#Installation
#(root) pacman -S vulkan-intel lib32-vulkan-intel lib32-mesa
For Hardware video acceleration
Intel Alder Lake:
#(root) pacman -S intel-media-driver
Polkit
Tools like Ventoy need polkit to evaluate privilege.\
#(root) pacman -S polkit polkit-gnome
Autostart with sway, edit ~/.config/sway/config with:
exec /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
Ref: polkit
PDF, Image, Video
#(root) pacman -S \
zathura zathura-pdf-poppler tesseract-data-eng \
oculante mpv
zathura : pdf viewer.
tesseract : zathura dependency, OCR engine.
oculante : image viewer.
mpv : video/audio player.
Web Browser
Chromium
Chromium : web browser.
Brave (AUR)
Disable Crypto and AI related components by default:
Create /etc/brave/policies/managed/brave-policy.json :
{
"BraveAIChatEnabled": true,
"BraveRewardsDisabled": true,
"BraveVPNDisabled": 1,
"BraveWalletDisabled": true
}
Visit brave://policy from address bar to check the effect.
Ref: Group Policy
Input Method
I use Fcitx5 and RIME to input chinese characters. Here is my RIME config for Wubi86 : rimerc.
#(root) pacman -S fcitx5 fcitx5-qt fcitx5-configtool fcitx5-rime
Edit .bashrc with:
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
Autostart with sway, edit ~/.config/sway/config with:
exec fcitx5 -d -r
Fix fcitx5 not working for Chromium on wayland,
enter chrome://flags from Chromium address bar, search for wayland, edit:
Preferred Ozone platform: Auto
Wayland text-input-v3: Enabled
Ref: Fcitx5 , Using Fcitx 5 on Wayland
Peripheral Device
Bluetooth
#(root) pacman -S bluez bluez-utils
#(root) systemctl enable --now bluetooth
Pairing
$ bluetoothctl
[bluetoothctl]# scan on
[bluetoothctl]# pair <MAC_ADDRESS> (tab completion works)
Troubleshooting: Reboot computer when this error occurred: bluetoothctl: No default controller available
Ref: Bluetooth
Printer
#(root) pacman -S cups cups-pdf
#(root) systemctl enable --now cups
The CUPS server can be fully administered through the web interface, and there’s documentation for adding printer http://localhost:631/help/admin.html.
Ref: CUPS
Install printer driver if needed, in my case is brlaser package from
AUR:
#(root) pacman -S base-devel
$ git clone https://aur.archlinux.org/brlaser.git ~/
$ cd ~/brlaser
$ makepkg -sc
#(root) pacman -U brlaser-xxx.zst
Ref: Arch User Repository
Miscellaneous
foliate e-book reader
cozy audiobook player