Penguin Pages / unofficial Linux reference / plain static HTML loading local time...
Tux, the Linux mascot

Penguin Pages

An unofficial Linux reference shelf for kernel notes, boot repair, system administration, command examples, source tree maps, desktop notes, filesystems, init systems, security, audio, virtualization, and distribution documentation.

site: static kernel docs: linked display: 800x600 friendly license: GPL-3.0

Welcome to the Linux shelf.

Penguin Pages is a compact reference site in the old Linux mirror tradition: restrained colors, small type, hard borders, dense links, and notes that are meant to be read.

what is here?

  • Kernel boot parameter notes
  • /proc, /sys, modules, devices, initramfs
  • Boot chain and recovery commands
  • Filesystem, init, security, audio, virtualization, and networking notes
  • Source tree map for browsing Linux kernel code
  • X.Org, Wayland, Mesa, DRM, and desktop stack references
  • A tiny local lookup shell for common Linux topics

classic reading order

  1. Learn paths, permissions, shells, and logs.
  2. Read man hier, man boot, and the docs for your init system.
  3. Learn how your bootloader finds the kernel and initramfs.
  4. Learn storage, networking, users, services, and package tools.
  5. Build a kernel once, even if you never daily-drive it.
  6. Keep notes when you fix things.

sample boot log

[    0.000000] Linux version 6.x.x (builder@penguinbox)
[    0.000000] Command line: root=UUID=... rw loglevel=3
[    0.120241] x86/fpu: Supporting XSAVE feature 0x001
[    0.428922] ACPI: bus type PCI registered
[    1.104911] virtio_blk virtio2: 1/0/0 default/read/poll queues
[    2.021014] EXT4-fs mounted filesystem with ordered data mode
[    2.880100] init: reached multi-user target
                

Old rule: read the logs first. They are not friendly, but they are usually honest.

Site crew.

Penguin Pages is maintained as a small static GitHub Pages site. This page lists the active people working on the site and the main project links.

active maintainers

person role github
RobertFlexx Main design and maintainer. Handles the site direction, old-web layout, content structure, and repository upkeep. github.com/RobertFlexx
Moritisimor Active developer. Works on site development, fixes, additions, and keeping the page useful as it grows. github.com/Moritisimor

about the site

Penguin Pages is built as a plain static website with separate HTML, CSS, and JavaScript files. The goal is to keep it readable, fast, easy to host, and easy to edit without needing a build system.

The design follows an old Linux documentation mirror style: simple boxes, small text, practical links, and direct reference material.

development focus

  • Keep the site lightweight and static.
  • Use real project links and official documentation where possible.
  • Keep tabs organized by Linux topic.
  • Keep the style consistent with early Linux reference pages.
  • Avoid unnecessary frameworks, tracking, and heavy page effects.

Kernel documentation notes.

The kernel is memory management, schedulers, filesystems, drivers, networking, architecture code, process handling, security hooks, build logic, and many small interfaces that userspace quietly depends on.

how to read this page

Start with the boot parameters and virtual filesystems, then move to modules and logs. Most kernel troubleshooting begins with dmesg, /proc/cmdline, loaded modules, and the exact hardware or filesystem involved.

official kernel documentation

boot parameters

parameter purpose example
root= Root filesystem device or UUID. root=UUID=abcd-1234
rw / ro Mount root read-write or read-only during early boot. rw
init= Use a specific first userspace process. init=/bin/sh
loglevel= Control console kernel message verbosity. loglevel=7
nomodeset Disable kernel mode setting for graphics debugging. nomodeset
systemd.unit= Boot to a systemd target. systemd.unit=rescue.target
single Request single-user or rescue style boot on many systems. single
panic= Automatically reboot after a panic delay. panic=10

/proc

Runtime process and kernel information. Try cat /proc/cpuinfo, cat /proc/meminfo, cat /proc/cmdline, and cat /proc/mounts.

/sys

Kernel object model exported to userspace. Devices, buses, drivers, firmware, power, and module attributes live here.

/dev

Device nodes. Disks, terminals, loop devices, random devices, input devices, and pseudo devices are exposed as files.

module workflow

# list loaded modules
lsmod

# inspect a module
modinfo i915

# load and unload manually
sudo modprobe loop
sudo modprobe -r loop

# show kernel ring buffer
sudo dmesg -T
                

Linux kernel lab.

This tab is for kernel source, releases, building, patching, and Linux From Scratch references. It keeps the deeper kernel material separate from the basic kernel notes.

official kernel sources

resource link use
The Linux Kernel Archives kernel.org Main place to find current kernel releases, tarballs, patches, changelogs, and release information.
Kernel release list kernel.org releases Explains mainline, stable, and longterm release categories.
Kernel source archive cdn.kernel.org/pub/linux/kernel Direct archive tree for kernel tarballs and patches.
Official git browser git.kernel.org Browse official kernel git repositories.
Torvalds tree torvalds/linux on git.kernel.org Mainline Linux kernel source tree.
GitHub mirror github.com/torvalds/linux Convenient read-only style mirror for browsing and cloning.
Bootlin Elixir Bootlin source browser Search and cross-reference Linux kernel source online.

release types

type meaning good use
mainline Current development release line after a merge window. Testing new kernel work and following current development.
stable Released kernel with bug fixes backported after mainline release. General users who need newer hardware support or fixes.
longterm Older supported kernel maintained for a longer period. Servers, appliances, conservative systems, and production-style setups.
linux-next Integration tree for upcoming kernel work. Developers testing future merge material, not normal installs.

get the source

# clone mainline from kernel.org
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux

# or clone the GitHub mirror
git clone https://github.com/torvalds/linux.git
cd linux

# check current version
make kernelversion
                

basic kernel build

# start from the running distro kernel config
cp /boot/config-$(uname -r) .config

# update config for the new tree
make olddefconfig

# optional terminal config menu
make menuconfig

# build kernel and modules
make -j$(nproc)

# install modules and kernel
sudo make modules_install
sudo make install
                

Many distributions handle bootloader updates differently. Keep an older working kernel in your boot menu.

Debian and Ubuntu style packages

# build Debian packages from a kernel tree
make -j$(nproc) bindeb-pkg

# install generated packages from parent directory
cd ..
sudo dpkg -i linux-image-*.deb linux-headers-*.deb
                  

Arch style package path

Arch users usually build kernels through PKGBUILDs, the Arch Build System, or custom packages. This keeps the kernel tracked by pacman instead of scattering files outside the package database.

asp export linux
cd linux
makepkg -s
                  

patching sketch

# apply a patch
patch -p1 < ../some-kernel.patch

# inspect changes
git diff

# build after patching
make olddefconfig
make -j$(nproc)
                

For serious kernel work, use git branches, keep patches small, and read the kernel development process documentation.

Linux From Scratch

resource link use
LFS home linuxfromscratch.org Main project site.
Read LFS online LFS read online Read current stable and development books.
Download LFS LFS download Download the book in available formats.
Beyond Linux From Scratch BLFS Desktop, networking, server, and extended package instructions after base LFS.
Hints LFS hints Community notes and extra build ideas.
Kernel build warning: do not replace your only working kernel. Keep a known-good distro kernel installed, keep the bootloader menu visible, and test custom kernels before relying on them.

Boot chain and recovery notes.

A Linux boot usually fails at one layer: firmware, bootloader, kernel, initramfs, root filesystem, init system, display manager, or user session. Name the layer before replacing random packages.

boot repair rule

Work in order. Check firmware entries, bootloader config, kernel files, initramfs contents, root filesystem UUIDs, and service logs. Random reinstalling usually hides the real problem.

boot path

stage what happens common clues
firmware UEFI or BIOS initializes hardware and picks a boot entry. No boot menu, missing disk, wrong EFI entry.
bootloader GRUB, systemd-boot, Limine, rEFInd, or another loader starts the kernel. GRUB prompt, missing config, wrong UUID.
kernel Hardware discovery, drivers, mounts, and early console output. Kernel panic, driver errors, root not found.
initramfs Temporary early userspace assembles storage and mounts root. Emergency shell, missing modules, LUKS or LVM issue.
init systemd, runit, OpenRC, s6, dinit, or another init starts services. Failed units, stuck target, service loops.
login/session Display manager, shell login, desktop session, user services. Black screen, login loop, broken user config.

chroot repair pattern

# from a live USB, adjust partitions first
sudo mount /dev/nvme0n1p2 /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt

# example GRUB EFI reinstall
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Linux
grub-mkconfig -o /boot/grub/grub.cfg
                

initramfs tools

  • Debian or Ubuntu: update-initramfs -u
  • Arch: mkinitcpio -P
  • Fedora: dracut --force
  • Generic dracut: dracut --regenerate-all --force

boot inspection

  • efibootmgr -v lists UEFI entries.
  • lsblk -f shows UUIDs and filesystems.
  • cat /proc/cmdline shows kernel args.
  • journalctl -xb shows current boot logs.

Sysadmin field notes.

Most repair work is finding which layer lied to you: firmware, bootloader, kernel, initramfs, root filesystem, init system, display stack, network stack, package database, or user config.

admin method

Before editing config files, collect basic facts: what changed, which service failed, which log mentions it, which package owns the file, and whether the problem happens for a fresh user account.

filesystem layout

path role
/boot kernel, initramfs, bootloader files
/etc system configuration
/usr programs, libraries, shared data
/var logs, cache, databases, spools
/home user files and per-user config
/run runtime state since boot

first checks

  • journalctl -xb for current boot errors.
  • dmesg -T for kernel and driver messages.
  • lsblk -f for block devices and filesystems.
  • ip addr and ip route for networking.
  • systemctl --failed for failed units.
  • df -h for full filesystems.

users and permissions

task command
show identity id
change owner sudo chown user:group file
change permissions chmod 755 script.sh
show ACL getfacl file
edit sudo permissions sudo visudo
add user to group sudo usermod -aG group user
Rule of thumb: fix the simplest layer first. Cable, disk, partition, filesystem, bootloader, kernel, initramfs, service, user session.

Command cribsheet.

A small shelf of commands that eventually become muscle memory. None of this replaces the manual pages, but it gets you moving.

command habit

Prefer commands that show state before commands that change state. Read with lsblk , findmnt , ip , ss , journalctl , and systemctl status before editing files or restarting services.

daily shell

task command
find files by name find . -name "*.conf"
show tree size du -h --max-depth=1 .
watch a command watch -n1 free -h
search text grep -R "needle" /etc
list sockets ss -tulpn
show open files lsof -i
process tree ps auxf
environment printenv

network

ip addr
ip route
resolvectl status
ping -c 4 1.1.1.1
tracepath kernel.org
nmcli dev status
ss -tulpn
                  

storage

lsblk -f
blkid
findmnt
df -h
sudo smartctl -a /dev/sda
sudo btrfs filesystem usage /
sudo zpool status
                  

package managers

system install search
Debian or Ubuntu sudo apt install pkg apt search pkg
Fedora sudo dnf install pkg dnf search pkg
Arch sudo pacman -S pkg pacman -Ss pkg
openSUSE sudo zypper in pkg zypper se pkg
Void sudo xbps-install pkg xbps-query -Rs pkg
Gentoo sudo emerge pkg emerge --search pkg
Exherbo sudo cave resolve --execute pkg cave search pkg

mini lookup shell

lookup$

Linux source tree map.

The kernel source tree looks scary until the top-level directories become familiar. Start by reading names, then build paths, then small subsystems.

browsing advice

Use a source browser first, then clone the tree later. Follow one subsystem at a time. For example, a filesystem path usually touches fs/ , headers in include/ , and shared code in kernel/ or mm/ .

top level directories

directory what lives there
arch/ Architecture-specific code: x86, arm64, riscv, powerpc, and more.
block/ Block layer and request handling.
drivers/ The giant driver forest: GPU, USB, PCI, net, storage, input, sound, etc.
fs/ Filesystem implementations and VFS glue.
include/ Kernel headers and public UAPI headers.
init/ Early kernel init and startup path.
kernel/ Core scheduler, locking, time, signals, tracing, cgroups, and process machinery.
mm/ Memory management.
net/ Networking stack.
security/ LSM framework and security modules.
tools/ Userspace tooling like perf and testing helpers.

build sketch

# configure
make menuconfig

# build with all cores
make -j$(nproc)

# install modules and kernel
sudo make modules_install
sudo make install

# update bootloader if your distro does not do it automatically
sudo grub-mkconfig -o /boot/grub/grub.cfg
                

patch culture

The kernel is developed through mailing lists, maintainers, subsystem trees, review, signed-off patches, and a long memory for broken changes. Read the development process docs before sending patches.

Graphics stack notes.

Linux graphics is a stack: kernel DRM and KMS, Mesa or vendor drivers, display server or compositor, toolkit, desktop shell, and applications. Debug from the bottom upward.

graphics method

First identify the GPU, kernel driver, session type, and userspace graphics libraries. Most desktop issues make more sense after checking whether the session is X11 or Wayland and whether hardware acceleration is active.

X.Org and Wayland

project link notes
X.Org x.org Open source implementation of the X Window System.
X.Org documentation X.Org docs User documentation, protocol specs, client programming references.
Wayland wayland.freedesktop.org Protocol and architecture intended to replace X11.
freedesktop.org freedesktop.org wiki Desktop interoperability specifications and project hosting.
Mesa mesa3d.org Open source OpenGL, Vulkan, and video acceleration drivers.
DRM docs kernel GPU docs Kernel graphics and DRM documentation.

common Linux GPU paths

hardwarekernel sideuserspace side
modern AMDamdgpu plus firmwareMesa RadeonSI for OpenGL and commonly RADV for Vulkan.
older Radeonradeon plus firmware; some transition hardware can use AMDGPUGeneration-appropriate Mesa Radeon driver.
Inteli915, or xe on supported newer hardwareMesa Crocus/Iris for OpenGL and ANV for Vulkan.
NVIDIAnouveau or the proprietary modules, not both for one GPUMesa for nouveau or matching vendor libraries.
virtual machinevirtio_gpu, QXL, VMware, Hyper-V, or VirtualBox guest driverMesa virgl or hypervisor integration matching the virtual display model.

debug commands

lspci -nnk | grep -A3 -E "VGA|3D|Display"
loginctl show-session "$XDG_SESSION_ID" -p Type
lsmod | grep -E "amdgpu|radeon|i915|xe|nouveau|nvidia|virtio_gpu"
glxinfo -B
vulkaninfo --summary
journalctl -b | grep -iE "drm|nvidia|nouveau|amdgpu|radeon|i915|xe|virtio|wayland|xorg"
                  

common layers

  • Kernel: DRM, KMS, framebuffer, GPU driver.
  • Userspace driver: Mesa, libglvnd, vendor OpenGL or Vulkan stack.
  • Display server: X.Org or Wayland compositor.
  • Shell: KDE Plasma, GNOME Shell, XFCE, sway, etc.
  • Portal: xdg-desktop-portal and desktop portal backend.

Desktop environments and window managers.

Desktop environments and window managers are central for using Linux as a desktop OS. Without them, you are working from a shell, a TTY, or a manually built graphical session.

choosing a desktop

Choose a desktop environment when you want a complete session with panels, settings, file manager integration, portals, notifications, and login polish. Choose a window manager when you want a smaller, keyboard-focused setup and are willing to assemble more pieces yourself.

common desktop environments

Name Description Link
KDE Plasma Feature-rich Qt-based desktop with strong customization and modern Wayland support. kde.org
GNOME GTK-based desktop focused on a consistent workflow and simplified user experience. gnome.org
XFCE Lightweight GTK desktop that runs well on older or lower-resource machines. xfce.org
LXQt Lightweight Qt desktop commonly used for fast, simple installations. lxqt-project.org
Cinnamon Traditional desktop layout developed by Linux Mint. Cinnamon
MATE Continuation of the GNOME 2 desktop style. mate-desktop.org
Budgie Modern desktop environment with a clean panel-driven workflow. buddiesofbudgie.org

common window managers

Name Description Link
i3 Popular X11 tiling window manager with plain text configuration. i3wm.org
sway Wayland compositor compatible with the i3 workflow. swaywm.org
xmonad Highly configurable tiling window manager written and configured in Haskell. xmonad.org
Hyprland Dynamic Wayland compositor with animations and extensive configuration. hypr.land
IceWM Fast stacking window manager with a traditional desktop feel. ice-wm.org
JWM Small window manager commonly used in lightweight systems. JWM
dwm Minimal suckless tiling window manager configured by editing source. dwm.suckless.org

what a standalone session still needs

A window manager draws and arranges windows; it is not automatically a complete desktop. Plan for a terminal, launcher, notifications, policy-authentication agent, screen locker, clipboard, file manager, network and audio controls, wallpaper/output tools, and an xdg-desktop-portal backend. Wayland compositors may provide display and input configuration themselves, while X11 sessions commonly use separate tools.

Filesystem notes.

Filesystems decide how data is stored, recovered, checked, mounted, snapshotted, and sometimes compressed. Pick one for the job, not because a forum yelled loudly.

filesystem choice

For a normal install, ext4 is the quiet dependable choice. Btrfs is useful for snapshots and compression. XFS is strong for large files and server workloads. ZFS is excellent when storage integrity and pools matter more than being built into the mainline kernel.

common filesystems

filesystem use notes
ext4 General Linux systems Reliable, common, simple, mature.
Btrfs Desktops, snapshots, subvolumes Supports compression, snapshots, send/receive, and checksumming.
XFS Large files and servers Strong performance and mature tooling.
ZFS Storage pools and data integrity Checksums, snapshots, datasets, compression, replication.
FAT32 Firmware and portable media Common for EFI System Partitions.
exFAT Large portable drives Useful between Linux, Windows, and macOS.
tmpfs Temporary RAM-backed storage Used for runtime files and fast temporary storage.
overlayfs Containers and live systems Layers one filesystem view over another.

inspection

lsblk -f
findmnt
blkid
df -h
du -h --max-depth=1 /
cat /etc/fstab
                  

repair and maintenance

sudo fsck /dev/sdXN
sudo btrfs scrub start /
sudo xfs_repair /dev/sdXN
sudo zpool status
sudo zpool scrub poolname
                  

Init systems and services.

The init system is the first long-running userspace process. It starts services, manages boot targets or runlevels, and decides what happens when the machine shuts down.

service thinking

Service management is mostly dependency order, supervision, logging, and failure handling. Learn how your init system starts services, where it stores service definitions, and how to inspect logs for the current boot.

common init systems

init commands notes
systemd systemctl, journalctl Common on most major Linux distributions.
OpenRC rc-service, rc-update Service manager used by Alpine, Gentoo, and others.
runit sv Small supervision suite used by Void Linux by default.
s6 s6-rc, s6-svstat Process supervision and service management toolkit. Used by Obarun Linux, and Adelie Linux by default.
dinit dinitctl Dependency-aware service manager with a small design. Used by Chimera Linux by default.
SysVinit service, update-rc.d Traditional init style built around scripts and runlevels. Popularly known by being used in Slackware Linux by default.

service checks

systemctl status sshd
journalctl -u sshd -b
rc-service sshd status
sv status /var/service/*
s6-rc -a list
dinitctl list
                

Security basics.

Linux security starts with ordinary administration: permissions, users, groups, updates, logs, network exposure, and service configuration. Fancy tools do not replace sane defaults.

baseline

Patch regularly, expose fewer services, use SSH keys, limit sudo access, check listening ports, and know where authentication logs are stored. Security starts with fewer surprises.

security areas

area tools notes
users and groups id, groups, passwd Know which user can do what.
sudo sudo -l, visudo Keep privilege escalation narrow and readable.
permissions chmod, chown, umask Basic Unix permissions still matter.
ACLs getfacl, setfacl Extended permissions beyond user/group/other.
capabilities getcap, setcap Fine-grained privileges for binaries.
MAC aa-status, sestatus AppArmor and SELinux add policy enforcement.
firewall nft, ufw, firewalld Limit what services are reachable.

checks

id
groups
sudo -l
ss -tulpn
sudo nft list ruleset
last
journalctl -p warning -b
                  

ssh basics

  • Use keys instead of passwords where possible.
  • Disable root login on exposed systems.
  • Keep OpenSSH updated.
  • Use a firewall to expose only needed services.
  • Check logs after failed login storms.

Audio stack notes.

Linux audio has layers. Hardware is handled by ALSA, desktop routing often goes through PipeWire or PulseAudio, and pro-audio workflows may involve JACK.

audio method

Start at the bottom. Confirm the card exists with ALSA, then check the desktop sound server, then check the session manager and selected output device. Many audio problems are routing problems, not driver problems.

audio layers

layer role commands
ALSA Kernel and low-level userspace audio support. aplay -l, alsamixer
PulseAudio Older common desktop sound server. pactl info
PipeWire Modern audio and video graph server. pw-top, wpctl status
WirePlumber Session manager for PipeWire. systemctl --user status wireplumber
JACK Low-latency pro-audio system. jack_lsp

debug commands

aplay -l
alsamixer
pactl info
wpctl status
pw-top
systemctl --user status pipewire wireplumber pipewire-pulse
                

Containers and virtualization.

Linux can isolate workloads with namespaces, cgroups, chroots, containers, virtual machines, and full hypervisor stacks. The right tool depends on how much isolation and hardware emulation you need.

container or VM

Use a container when you want isolated userspace on the same kernel. Use a virtual machine when you need a separate kernel, stronger machine boundaries, firmware testing, or another operating system entirely.

common tools

tool type notes
chroot filesystem isolation Classic repair and build environment tool.
systemd-nspawn container Lightweight system container tool.
Docker container platform Popular application container tooling.
Podman container platform Daemonless container tooling with rootless workflows.
LXC system containers Containers closer to lightweight machines.
QEMU/KVM virtual machines Hardware virtualization and emulation.
libvirt VM management Management layer used by virt-manager and virsh.

commands

sudo chroot /mnt
machinectl list
podman ps
docker ps
lxc-ls --fancy
virsh list --all
qemu-system-x86_64 --version
                

Troubleshooting flowcharts.

Good troubleshooting is boring: identify the layer, collect evidence, change one thing, test, and write down what changed.

general loop

Observe, isolate, test, document. Avoid changing five things at once. A fix you cannot explain is hard to trust and harder to repeat.

boot failure

No boot? -> firmware sees disk? -> bootloader entry exists? -> kernel and initramfs exist in /boot? -> root UUID matches /etc/fstab and kernel cmdline? -> initramfs has storage/filesystem modules? -> init reaches target or runlevel?

network failure

No network? -> link detected? -> interface has IP address? -> default route exists? -> DNS resolver works? -> firewall blocking traffic? -> service listening on expected port?

graphical session failure

No GUI? -> login manager running? -> session is X11 or Wayland? -> GPU driver loaded? -> Mesa/vendor userspace libraries installed? -> display manager logs clean? -> fresh test user works?

disk space failure

Disk full? -> df -h -> du -h --max-depth=1 / -> check /var/log, package cache, snapshots -> check deleted open files with lsof | grep deleted -> clean safely, then reboot services if needed

Linux glossary.

Short definitions for common Linux terms.

how to use it

This glossary is for quick orientation while reading the rest of the site. It keeps definitions short so you can get back to the command output, manual page, or source file you were looking at.

terms

term meaning
kernel The core program managing hardware, memory, processes, filesystems, and system calls.
userspace Programs outside the kernel: shells, services, desktops, tools, and applications.
initramfs Temporary early userspace used during boot before the real root filesystem is mounted.
module Loadable kernel code, often used for drivers and filesystems.
syscall A controlled entry point from userspace into the kernel.
daemon A background service process.
TTY Text terminal interface, often available with Ctrl+Alt+F keys.
compositor Display server component that draws windows and effects, especially in Wayland.
display manager Graphical login manager such as SDDM, GDM, LightDM, or LXDM.
package manager Tool for installing, removing, updating, and querying software packages.
mount point Directory where a filesystem is attached.
environment variable Named value inherited by processes, such as PATH or HOME.

Distro downloads.

Use official download pages. Pick a distribution by release model, hardware support, documentation, package tools, and how much system maintenance you want. Take information here AS IS, and information here is NOT opionated, only based on common consensus.

user friendly desktops

distro download why choose it
Ubuntu Desktop ubuntu.com/download/desktop Broad hardware support, large community, common third-party software support, good first desktop choice.
Linux Mint linuxmint.com/download.php Traditional desktop feel, comfortable defaults, good for users moving from Windows-style workflows.
Fedora Workstation fedoraproject.org/workstation/download Modern GNOME desktop, fresh software, good developer workstation, strong upstream alignment.
Zorin OS zorin.com/os/download Polished desktop aimed at users coming from Windows or macOS.
Pop!_OS system76.com/pop/download Desktop-focused Ubuntu-based system with System76 polish and simple graphics options.
MX Linux mxlinux.org/download-links Debian-based desktop with helpful tools and good performance on older hardware.

advanced and hands-on

distro download why choose it
Arch Linux archlinux.org/download Rolling release, direct control, simple packaging, excellent documentation.
Gentoo gentoo.org/downloads Source-based system for users who want deep control over build options and system composition.
Void Linux voidlinux.org/download Independent distro with XBPS, runit, fast tooling, and non-systemd defaults.
Slackware slackware.com/getslack Traditional Linux with minimal abstraction and old-school administration.
NixOS nixos.org/download Declarative configuration, reproducible systems, rollbacks, and a very different package model.
Linux From Scratch linuxfromscratch.org/lfs/download Build a Linux system from source to learn how the pieces fit together.

rolling and fresh packages

distro download why choose it
openSUSE Tumbleweed get.opensuse.org/tumbleweed Rolling release with strong tooling, snapshots, and quality control.
EndeavourOS endeavouros.com Arch-based system with an easier installer and friendly defaults.
CachyOS cachyos.org/download Arch-based distro focused on performance tuning and desktop responsiveness.
Manjaro manjaro.org/download Arch-family desktop with its own repos, graphical tools, and delayed package flow.
openSUSE Slowroll openSUSE Slowroll A slower rolling option between Leap-style stability and Tumbleweed pace.

server and stable base

distro download why choose it
Debian debian.org/distrib Stable, conservative, widely supported, excellent for servers and quiet systems.
Ubuntu Server ubuntu.com/download/server Popular server choice with cloud support, predictable LTS releases, and broad documentation.
Rocky Linux rockylinux.org/download RHEL-compatible server and workstation base with enterprise-style lifecycle.
AlmaLinux almalinux.org/get-almalinux Community-governed enterprise Linux compatible distribution.
openSUSE Leap get.opensuse.org/leap Stable openSUSE track with YaST, zypper, and conservative package movement.
Oracle Linux oracle.com/linux/downloads Enterprise Linux family option commonly used for Oracle-oriented server environments.

minimal, container, and special use

distro download why choose it
Alpine Linux alpinelinux.org/downloads Small, simple, security-oriented distro using musl libc, BusyBox, and apk. Also very desktop capable.
Kali Linux kali.org/get-kali Security lab and penetration testing distribution. Best used for labs, not normal daily desktop installs.
Tails tails.net/install Live privacy-focused system designed around Tor and amnesic sessions.
Qubes OS qubes-os.org/downloads Security-focused desktop OS built around compartmentalized virtual machines.
Chimera Linux chimera-linux.org/download Independent Linux using apk-tools, LLVM, musl, and a non-GNU userland approach. Very desktop capable.
Download rule: use official distro pages, verify checksums or signatures when provided, and avoid random ISO reuploads.

Exherbo field guide: from stage tarball to a complete system.

Exherbo is a source-based Linux distribution for people who want control, clean packaging, and a system they actually understand. This practical companion covers install order, Paludis habits, kernels, firmware, AMD, Intel, NVIDIA and virtual graphics, console and graphical systems, several desktop styles, laptops, virtual machines, recovery, and daily maintenance.

Read this first: this is not official Exherbo policy and package names can change. The most-tested path is x86-64, systemd, UEFI GRUB, a custom kernel, and KDE Plasma Wayland; the hardware and session profiles below explain where other systems diverge. Check cave search, cave show, and the official docs before executing a package plan.

choose the machine profile before configuring it

decisioncommon choiceswhat changes
system roleheadless, VM guest, workstation, laptopHeadless systems can omit graphics, a display manager, portals, and desktop packages.
graphicsAMD, older Radeon, Intel, nouveau, proprietary NVIDIA, virtual GPUKernel driver, firmware, Mesa video/Vulkan driver, and sometimes kernel arguments.
sessionconsole, X11, WaylandWayland needs a compositor and usually a portal backend; X11 needs an X server and window manager.
desktopKDE, GNOME, XFCE, LXQt, standalone WM/compositorDesktop set, display manager, policy agent, portal, settings tools, and applets.
bootUEFI or legacy BIOS; GRUB or another loaderThis guide's worked example is UEFI with the ESP mounted at /boot. Do not mix commands for a separate /boot/efi layout.

Use one primary GPU profile first. Hybrid laptops are a deliberate combination, not a reason to enable every driver globally.

official and alternate docs shelf

resource link what to use it for
Exherbo docs index exherbo.org/docs Official starting point for install guide, expectations, Paludis, KDE notes, systemd, multiarch, and developer docs.
Official install guide install-guide.html Stage tarball, disk layout, chroot, fstab, kernel, bootloader, hostname, users, and post-install tasks.
KDE on Exherbo kde.html Official KDE set overview. Useful, but too short for a full daily-driver Plasma setup.
Paludis cave cave client docs Main package manager command reference. Use cave help, cave show, cave search, cave resolve, and cave sync.
cave resolve cave-resolve.html How Paludis previews and executes install, reinstall, uninstall, and world actions.
Exherbo packages summer.exherbo.org Package browser for checking package names, repositories, versions, options, and masks.
Exherbo GitLab gitlab.exherbo.org Repositories, exheres, issues, and source for the distribution.
Multiarch docs multiarch migration Only touch this when you are deliberately adding another architecture target. Native Steam's 32-bit needs are not a casual one-line option.

what makes Exherbo different?

  • It is source-based. Many installs are real builds, not quick binary downloads.
  • It uses Paludis and cave, not Portage/emerge.
  • Package options are explicit. A small option change can cause same-version rebuilds.
  • Package names are not always Gentoo names. Search instead of guessing.
  • It expects you to understand boot, kernel, options, services, and config protection.
  • It rewards notes, patience, and checking one layer at a time.

install map

  1. Boot a live Linux system with network access.
  2. Partition the disk: EFI System Partition, root, optional home, optional swap.
  3. Format and mount the filesystems under /mnt/exherbo.
  4. Download and extract the Exherbo stage tarball.
  5. Write /etc/fstab.
  6. Bind mount /dev, /sys, and /proc, then chroot.
  7. Configure Paludis, sync repositories, and set desktop options.
  8. Build or install a kernel, initramfs, firmware, and bootloader.
  9. Create the system identity, root password, normal user, locale, timezone, networking, and privilege policy.
  10. Choose a console, desktop, or window-manager profile and only its required services.
  11. Choose the matching GPU kernel driver, firmware, Mesa or vendor userspace, and portal stack.
  12. Keep a known-good kernel and boot into the simpler session first if a new Wayland setup is questionable.
  13. Audit the system before calling it daily-drivable.
Command context: commands before the first reboot run either on the live system with sudo as shown or inside the chroot as root without sudo. Commands explicitly described as after first boot run as the normal user and use sudo for administrative work.

partitioning example: simple UEFI desktop

This mirrors a practical desktop layout: FAT32 ESP mounted at /boot, ext4 root, and swap. Adjust device names before running anything.

Destructive: formatting erases the selected partitions. Back up important data, confirm the disk with lsblk -f, and do not copy these device names blindly.
# example only; replace disk and partition names
lsblk -f
sudo cfdisk /dev/nvme0n1

# suggested layout
# p1  EFI System  1G-2G    vfat    /boot
# p2  swap        4G-16G   swap    none
# p3  Linux root  rest     ext4    /

sudo mkfs.vfat -F32 /dev/nvme0n1p1
sudo mkswap /dev/nvme0n1p2
sudo mkfs.ext4 -L exherbo-root /dev/nvme0n1p3

sudo mkdir -p /mnt/exherbo
sudo mount /dev/nvme0n1p3 /mnt/exherbo
sudo mkdir -p /mnt/exherbo/boot
sudo mount /dev/nvme0n1p1 /mnt/exherbo/boot
sudo swapon /dev/nvme0n1p2
                

fstab pattern

# get UUIDs
blkid

# /mnt/exherbo/etc/fstab
UUID=<root-uuid>  /      ext4  defaults,noatime  0 1
UUID=<esp-uuid>   /boot  vfat  defaults           0 2
UUID=<swap-uuid>  none   swap  sw                 0 0
                

Use UUIDs, not moving names like /dev/sda, especially on multi-boot machines.

bootstrap and chroot

On the live system, confirm the architecture, clock, network, boot mode, and stage integrity before extraction. Obtain the checksum or signature from the official stage source rather than trusting a copied value.

uname -m
date -u
ip route
test -d /sys/firmware/efi && echo UEFI || echo BIOS

cd /mnt/exherbo

# use the current stage URL from the official install guide
sudo curl -O https://stages.exherbo.org/x86_64-pc-linux-gnu/exherbo-x86_64-pc-linux-gnu-gcc-current.tar.xz
# Save the separately obtained official checksum as stage.sha256, then verify it.
sha256sum -c stage.sha256
sudo tar xJpf exherbo-x86_64-pc-linux-gnu-gcc-current.tar.xz

sudo mount -o rbind /dev /mnt/exherbo/dev
sudo mount --make-rslave /mnt/exherbo/dev
sudo mount -o rbind /sys /mnt/exherbo/sys
sudo mount --make-rslave /mnt/exherbo/sys
sudo mount -t proc none /mnt/exherbo/proc

# Do not follow a resolver symlink from the target into a nonexistent /run path.
readlink -f /etc/resolv.conf
sudo rm -f /mnt/exherbo/etc/resolv.conf
sudo cp -L /etc/resolv.conf /mnt/exherbo/etc/resolv.conf

sudo env -i TERM="$TERM" SHELL=/bin/bash HOME=/root chroot /mnt/exherbo /bin/bash
source /etc/profile
export PS1="(exherbo chroot) $PS1"
                

The rbind on /dev matters. Paludis and device-heavy builds can behave badly if the chroot is mounted lazily.

base-system identity and first login

Run this part inside the chroot as root. Exact locale and administrative groups are policy choices; inspect the files and installed tools instead of assuming another distribution's defaults.

# identity and time
printf '%s\n' exherbo-host > /etc/hostname
ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
printf '%s\n' '127.0.0.1 localhost' '127.0.1.1 exherbo-host' > /etc/hosts

# inspect available locales and configure the one you actually use
locale -a
locale

# credentials; use the user-management tools supplied by the stage
passwd
useradd -m -s /bin/bash alice
passwd alice
id alice
                

Install and configure either sudo or doas, then test it from a second root shell before closing the first. Add only the groups required by installed software; modern logind, udev, and polkit setups usually do not require broad legacy groups for ordinary desktop access.

firmware and CPU microcode

Firmware is required by many AMD GPUs, Wi-Fi adapters, Bluetooth controllers, and Intel audio DSPs. CPU microcode is separate and should be loaded early. Package categories and split packages can change, so locate them rather than guessing.

cave search firmware
cave search microcode
cave show category/firmware-package

# after installation and reboot
journalctl -b -k | grep -iE 'firmware|microcode|amdgpu|radeon|iwlwifi|rtw|ath|sof'
dmesg | grep -i 'failed to load'
                
hardwareusual requirementfailure clue
modern AMD GPUAMDGPU kernel driver plus matching Radeon firmwareDisplay stays basic or logs name a missing amdgpu/*.bin file.
older Radeonradeon driver and firmware; some transition-era cards can use AMDGPU experimentallyWrong driver binds, acceleration is absent, or display initialization fails.
Intel Wi-Fi/audiodevice firmware; SOF firmware for some DSP audioInterface or sound card is absent while PCI hardware is visible.
Intel/AMD CPUmatching microcode package and early initramfs/bootloader loadingKernel log lacks a current microcode update line.

Paludis basics

task command notes
sync repositories cave sync Do this before a serious install or world update.
search package names cave search plasma Search first. Do not assume Gentoo package names.
inspect options cave show kde/plasma-desktop Shows options, suggestions, masks, repository, and reasons.
preview install cave resolve world Shows what would happen. This is the safe read-only step.
execute install cave resolve --execute world Actually builds/installs. Do not interrupt core packages.
remove package cave uninstall distribution/steam Useful when a package was only an experiment.

options.conf: common desktop base

Start with shared session and input requirements, then add exactly one graphics snippet from the next table. Keep global options small; do not enable every attractive option or copy hardware settings from an unrelated machine.

# /etc/paludis/options.conf

# Add only the session features in use.
# */* X          # X.Org or Xwayland
# */* wayland    # Wayland compositor/toolkit support

# Build behavior
*/* build_options: symbols=split jobs=8 -dwarf_compress -recommended_tests -trace work=tidyup

# Input stack
*/* input_devices: libinput

# KDE shutdown/reboot/unlock helpers
sys-apps/systemd polkit

# EFI GRUB
sys-boot/grub efi GRUB_PLATFORMS: efi-64 pc

# Archive support
app-arch/libarchive zstd

# KDE profile additions: omit or replace for another desktop
# Qt5 tooling for older KDE/theme packages
x11-libs/qtbase:5 sql sqlite

# KDE image and QR support
kde-frameworks/prison scanner pdf417
kde-frameworks/kimageformats avif

# Flatpak and portals
# This avoids the Qt6 libportal private-header trap seen on some Exherbo setups.
sys-libs/libportal PROVIDERS: gtk3 -gtk4 -qt5 -qt6

# Audio integration
media-sound/pulseaudio bluetooth
sys-sound/alsa-plugins pulseaudio
media-libs/libcanberra pulseaudio

# Bluetooth desktop integration
net-wireless/bluez obex

# GTK, tray, and device integration
dev-libs/at-spi2-core gobject-introspection
x11-libs/gtk+:3 gobject-introspection
core/json-glib gobject-introspection
dev-libs/libgusb gobject-introspection

# Optional UI polish
app-misc/fastfetch X wayland opengl vulkan libdrm dbus
kde/kinfocenter usb
                

If cave resolve world shows only same-version r rebuilds after editing options, that usually means option drift, not corruption. It wants to rebuild packages so their recorded build options match the current file.

graphics profile: choose one starting point

GPUPaludis directionkernel and userspace
modern AMDx11-dri/mesa video_drivers: radeonCONFIG_DRM_AMDGPU, firmware, Mesa RadeonSI, and a separately selected Vulkan implementation if needed.
older Radeon R300-R500x11-dri/mesa video_drivers: r300CONFIG_DRM_RADEON, matching firmware, and the generation-appropriate Mesa driver.
older Radeon HD 2000+x11-dri/mesa video_drivers: radeonCONFIG_DRM_RADEON or supported AMDGPU transition path, firmware, and Mesa. Identify the exact generation first.
Intel Gen4-7x11-dri/mesa video_drivers: crocusNormally CONFIG_DRM_I915; verify support for the exact generation.
Intel Gen8+x11-dri/mesa video_drivers: irisCONFIG_DRM_I915 or CONFIG_DRM_XE where documented, with a separately selected Vulkan implementation if needed.
NVIDIA with nouveaux11-dri/mesa video_drivers: nouveauCONFIG_DRM_NOUVEAU, Mesa, and required firmware. Do not blacklist nouveau.
NVIDIA proprietaryInstall x11-drivers/nvidia-drivers; this is not a Mesa video-driver choiceMatching vendor kernel modules and userspace. Do not enable the nouveau kernel driver for the same device.
QEMU/KVM guestx11-dri/mesa video_drivers: virtio-gpuCONFIG_DRM_VIRTIO_GPU, Mesa virgl support, and virtio input where used.
headless/consoleDo not add desktop graphics globallyKeep simpledrm/EFI framebuffer for a local console if useful; omit X11, Wayland, Mesa, and a display manager unless another package needs them.
# Confirm names and available choices on this repository snapshot.
cave show x11-dri/mesa
cave search vulkan
cave resolve world
                

Paludis option names are repository metadata, not universal constants. If a listed token is unavailable, use the choices shown by cave show. Hardware detection comes first: lspci -nnk | grep -A3 -E 'VGA|3D|Display'.

package selection: minimal but not barebones KDE

cave resolve --execute \
  kde/plasma-desktop \
  kde/plasma-workspace \
  kde/kwin \
  kde/kwin-x11 \
  kde/systemsettings \
  kde/dolphin \
  kde/konsole \
  kde/kate \
  kde/ark \
  kde/gwenview \
  kde/kcalc \
  kde/spectacle \
  kde/okular \
  kde/kfind \
  kde/kmenuedit \
  kde/kdebugsettings \
  kde/kinfocenter \
  kde/kio-extras \
  kde/kio-admin \
  kde/kio-fuse \
  kde/ffmpegthumbs \
  kde/kdegraphics-thumbnailers \
  kde/breeze \
  kde/qqc2-breeze-style \
  kde/kde-gtk-config \
  kde/plasma-workspace-wallpapers \
  kde/ocean-sound-theme \
  kde/plasma-systemmonitor \
  kde/ksystemstats \
  kde/filelight \
  kde/colord-kde \
  kde/plasma-disks \
  kde/partitionmanager \
  kde/plasma-nm \
  kde/plasma-pa \
  kde/powerdevil \
  kde/kscreen \
  kde/sddm-kcm \
  kde/flatpak-kcm
                

Use cave search if any package name fails. Exherbo package names can move, slots matter, and repositories differ.

tested KDE daily desktop base packages

cave resolve --execute \
  sys-auth/sddm \
  net-apps/NetworkManager \
  sys-apps/power-profiles-daemon \
  sys-apps/upower \
  net-wireless/bluez \
  media/pipewire \
  sys-apps/xdg-desktop-portal \
  kde/xdg-desktop-portal-kde \
  sys-apps/flatpak \
  sys-apps/xdg-dbus-proxy \
  sys-libs/libportal \
  x11-server/xwayland \
  x11-libs/qtwayland \
  fonts/noto \
  fonts/noto-emoji \
  fonts/dejavu \
  fonts/liberation-fonts \
  x11-apps/xdg-user-dirs
                

other desktops and standalone sessions

Package sets vary across repositories. Search for the desktop, inspect its set or core package, preview the plan, and then add the integration pieces appropriate to that session.

sessiondiscover/install directionintegration to verify
GNOMEcave search gnome; inspect the GNOME desktop/shell setGDM or TTY launch, GNOME portal backend, settings daemon, NetworkManager, PipeWire, and Wayland/X11 session files.
XFCEcave search xfce; start with the core desktopLightDM or TTY launch, an appropriate GTK portal backend, polkit agent, notification service, power manager, and X11.
LXQtcave search lxqt; inspect the LXQt setSDDM or TTY launch, Qt platform support, polkit agent, notification service, and the selected X11 or Wayland window manager.
i3 or another X11 WMcave search i3 plus X.OrgTerminal, launcher, bar, notification daemon, polkit agent, locker, compositor if wanted, portal backend, and an xsessions entry.
sway or another wlroots compositorcave search sway plus Wayland/Xwayland as neededxdg-desktop-portal-wlr or current equivalent, notification daemon, polkit agent, locker, clipboard tools, and PipeWire for capture.
console/headlessNo desktop setTTY login, networking, time sync, optional SSH, and no display manager.
cave search gnome        # substitute xfce, lxqt, i3, sway, etc.
cave show category/candidate-package-or-set
cave resolve category/candidate-package-or-set

# A display manager is optional. Inspect installed sessions:
find /usr/share/xsessions /usr/share/wayland-sessions -maxdepth 1 -type f 2>/dev/null
                

Choose portal backends for the active desktop and inspect which interfaces each provides. Some combinations are intentional: for example, a wlroots screen-capture backend may coexist with GTK for file choosing. Unplanned competing backends can still cause slow startup or the wrong chooser.

services to enable

Enable only services installed for the chosen profile. A console server does not need SDDM, Bluetooth, or desktop power management; GNOME commonly uses GDM instead of SDDM.

systemctl enable sddm
systemctl enable NetworkManager
systemctl enable power-profiles-daemon
systemctl enable upower
systemctl enable bluetooth
systemctl enable systemd-timesyncd

# dbus and polkit are usually static/activation based; status matters more than enable
systemctl status dbus polkit --no-pager
                

networking: installation, desktop, and headless systems

NetworkManager is a convenient desktop default. A small server may instead use systemd-networkd or another deliberate stack. Do not run multiple DHCP clients or resolver managers on the same interface.

# identify the device, driver, radio state, address, route, then DNS
ip -br link
lspci -nnk | grep -A3 -iE 'ethernet|network'
rfkill list
ip -br address
ip route
resolvectl status 2>/dev/null || cat /etc/resolv.conf

# NetworkManager examples after its service is running
nmcli device status
nmcli device wifi list
nmcli device wifi connect 'SSID' --ask
nmcli connection show

# separate routing from DNS failures
ping -c 3 1.1.1.1
getent hosts exherbo.org
                

For a remote/headless first boot, install an SSH server, add a tested public key, verify the firewall and service from the local console, and only then rely on remote access. Never expose password-based root SSH as a shortcut around user setup.

kernel: desktop-ready checklist

area kernel options/modules why it matters
modules CONFIG_MODULES, depmod, modprobe NVIDIA, FUSE, Bluetooth, gamepads, filesystems, and many drivers depend on modules.
desktop graphics CONFIG_DRM, CONFIG_DRM_KMS_HELPER, CONFIG_DRM_FBDEV_EMULATION Needed for modern display handoff, Wayland, and smooth boot graphics.
Flatpak/AppImage CONFIG_FUSE_FS=m, CONFIG_CUSE=m Flatpak, AppImages, portals, and desktop sandboxes expect /dev/fuse.
containers and VPN CONFIG_OVERLAY_FS, CONFIG_TUN, CONFIG_WIREGUARD, namespaces, cgroups Containers, Steam runtimes, VPN tools, and sandboxed apps expect these.
gaming/input CONFIG_JOYSTICK_XPAD, CONFIG_HID_NINTENDO, CONFIG_HID_PLAYSTATION Gamepads and USB input devices.
filesystems ext4, btrfs, exFAT, NTFS3, VFAT, ISO9660, UDF, squashfs Normal disks, Windows drives, USB media, ISOs, and compressed images.
virtualization CONFIG_KVM, CONFIG_KVM_INTEL or CONFIG_KVM_AMD QEMU/KVM, virt-manager, Android containers, and VM testing.

kernel, initramfs, and UEFI GRUB contract

Inside an installation chroot, uname -r reports the live medium's kernel. Derive the target version from the kernel you built and use that same value for modules, initramfs, and bootloader checks.

# Before using the commands below, locate and install the required tools.
cave search dracut
cave search grub
cave search efibootmgr
cave resolve category/dracut-package category/grub-package category/efibootmgr-package
cave resolve --execute category/dracut-package category/grub-package category/efibootmgr-package
                
cd /usr/src/linux
make menuconfig
make -j"$(nproc)"

# Record the target kernel version before installing it.
KVER="$(make -s kernelrelease)"
make modules_install
install -Dm755 arch/x86/boot/bzImage "/boot/vmlinuz-${KVER}"
depmod "$KVER"
dracut --force "/boot/initramfs-${KVER}.img" "$KVER"

test -s "/boot/vmlinuz-${KVER}"
test -s "/boot/initramfs-${KVER}.img"
test -d "/lib/modules/${KVER}"
                

The worked layout mounts the EFI System Partition at /boot. With efivarfs available and the machine booted in UEFI mode, install GRUB once, then regenerate its configuration after kernel changes.

test -d /sys/firmware/efi/efivars
findmnt /boot
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Exherbo
grub-mkconfig -o /boot/grub/grub.cfg
efibootmgr -v
grep -nE 'vmlinuz|initramfs' /boot/grub/grub.cfg
                
Keep a fallback: retain one known-good kernel, its modules, and its initramfs until the new kernel has booted successfully. Legacy BIOS, Secure Boot, encrypted root, RAID, LVM, and a separate /boot/efi need different steps; follow the official guide for that layout.

building missing FUSE after the fact

If modprobe fuse says the module does not exist and Flatpak complains, build it from the same kernel tree used for the running kernel.

cd /usr/src/linux

./scripts/config --module FUSE_FS
./scripts/config --module CUSE
./scripts/config --disable FUSE_PASSTHROUGH
./scripts/config --disable FUSE_IO_URING
./scripts/config --disable FUSE_DAX

make olddefconfig
make -j"$(nproc)" fs/fuse/fuse.ko fs/fuse/cuse.ko
sudo make M=fs/fuse modules_install

KVER="$(uname -r)"
sudo depmod "$KVER"
sudo modprobe fuse
ls -lah /dev/fuse
                

If FUSE passthrough causes undefined symbols while building only the module, disable passthrough/io_uring unless you are intentionally wiring those dependencies.

AMD, Radeon, Intel, nouveau, and virtual graphics

Open drivers normally use kernel DRM plus Mesa. They do not use nvidia-smi, NVIDIA module parameters, or a nouveau blacklist. Get a working KMS console first, then confirm rendering, Vulkan if needed, and the desktop session.

lspci -nnk | grep -A3 -E 'VGA|3D|Display'
lsmod | grep -E 'amdgpu|radeon|i915|xe|nouveau|virtio_gpu'
journalctl -b -k | grep -iE 'drm|amdgpu|radeon|i915|xe|nouveau|virtio|firmware'
glxinfo -B
vulkaninfo --summary
                
resultmeaningnext check
Kernel driver in use: amdgpuNormal for supported modern AMD GPUs.Firmware errors, Mesa renderer, RADV/Vulkan, monitor connectors.
Kernel driver in use: radeonNormal for many older Radeon generations.Do not force AMDGPU without confirming the card family and kernel support.
llvmpipe rendererSoftware rendering; the graphical session is not using GPU acceleration.Kernel binding, firmware, Mesa driver selection, permissions, and mismatched libraries.
GPU visible but no kernel driverDriver missing, disabled, blacklisted, or unsupported.Kernel config, module aliases, command line, and journalctl -b -k.
virtio GPU has basic output onlyGuest display works without accelerated virgl.VM display model, host 3D setting, guest Mesa virgl, and virtio GPU kernel support.

For video decode, inspect the available VA-API/VDPAU packages and test with vainfo. Hardware rendering and hardware video decode are related but separate paths.

hybrid graphics and multi-GPU laptops

Keep the integrated GPU as the display device first, verify both drivers independently, then configure render offload for selected applications. Do not blacklist the integrated driver or force every application onto the discrete GPU.

lspci -nnk | grep -A3 -E 'VGA|3D|Display'
loginctl show-session "$XDG_SESSION_ID" -p Type -p Desktop
glxinfo -B

# Mesa render-offload example; verify the discrete renderer in the output
DRI_PRIME=1 glxinfo -B
                

Proprietary NVIDIA offload uses vendor-specific environment variables and matching userspace libraries. Confirm the current driver documentation, external-monitor wiring, and suspend behavior before enabling aggressive dGPU power management.

NVIDIA Wayland setup

The practical NVIDIA rule: kernel modules, userspace libraries, EGL/Wayland pieces, GRUB flags, modprobe config, initramfs, and KWin must all agree. Mixing a half-installed driver stack is how you get llvmpipe, black screens, or a slideshow compositor.

# install/build driver package according to your repositories
sudo cave resolve --execute x11-drivers/nvidia-drivers

# verify modules exist
find "/lib/modules/$(uname -r)" -name 'nvidia*.ko*'

# /etc/modprobe.d/nvidia.conf
sudo tee /etc/modprobe.d/nvidia.conf >/dev/null <<'EOF'
options nvidia_drm modeset=1 fbdev=1
softdep nvidia post: nvidia-uvm
blacklist nouveau
EOF
                

Optional laptop features need separate validation. NVreg_DynamicPowerManagement=0x02 is for supported runtime-power-management setups. NVreg_PreserveVideoMemoryAllocations=1 requires the NVIDIA suspend/resume/hibernate units and enough backing storage; do not enable either as a universal desktop default.

GRUB kernel arguments:

nvidia-drm.modeset=1 nvidia-drm.fbdev=1
                

Verify after boot:

nvidia-smi
glxinfo -B
vulkaninfo --summary

sudo sh -c '
echo -n "modeset="; cat /sys/module/nvidia_drm/parameters/modeset
echo -n "fbdev="; cat /sys/module/nvidia_drm/parameters/fbdev
'
                

Good values are modeset=Y and fbdev=Y. If sysfs files are root-readable only, a normal user may see empty output.

initramfs and GRUB safety sweep

After first boot, uname -r is suitable for rebuilding the running kernel's initramfs. During installation, reuse the explicit KVER from the kernel build section instead.

KVER="$(uname -r)"

sudo depmod "$KVER"
sudo dracut --force "/boot/initramfs-${KVER}.img" "$KVER"
sudo grub-mkconfig -o /boot/grub/grub.cfg

find /boot/EFI -maxdepth 4 -type f | sort
grep -nE 'vmlinuz|initrd' /boot/grub/grub.cfg
                

Wayland, portals, PipeWire, and Discord screenshare

For KDE Wayland, screen sharing is not just Discord. It needs PipeWire, WirePlumber, xdg-desktop-portal, and the KDE portal backend. Flatpak apps also use the portal path.

systemctl --user status pipewire wireplumber pipewire-pulse xdg-desktop-portal --no-pager
ps aux | grep -E 'pipewire|wireplumber|xdg-desktop-portal' | grep -v grep
echo "$XDG_CURRENT_DESKTOP"
echo "$XDG_SESSION_TYPE"

pactl info
wpctl status
ls /usr/share/xdg-desktop-portal/portals
                

PipeWire services can show as disabled while sockets are enabled and the services are active. That is normal socket activation, not failure.

Flatpak and Steam

Use Flatpak Steam unless you intentionally want to build out Exherbo multiarch/32-bit userspace. The native Steam installer package can install the launcher but still fail with missing 32-bit libc.so.6.

flatpak remotes
flatpak install flathub com.valvesoftware.Steam
flatpak run com.valvesoftware.Steam

# optional permissions for a games folder
flatpak override --user --filesystem=/path/to/games com.valvesoftware.Steam
                

If native Steam says libc.so.6 is missing, check with find /usr /lib /lib32 /usr/lib32 -name libc.so.6 -exec file {} \;. If only 64-bit libc exists, native Steam will not run yet.

UI polish that stops KDE feeling half-installed

symptom install/check notes
missing settings pages kde-frameworks/kcmutils, kde/kscreen, kde/powerdevil, kde/sddm-kcm KCMs are the System Settings modules.
missing network GUI kde/plasma-nm, net-apps/NetworkManager Enable NetworkManager service.
missing audio applet kde/plasma-pa, kde/pulseaudio-qt PipeWire can still expose PulseAudio compatibility.
bad icons kde-frameworks/breeze-icons, gnome-desktop/adwaita-icon-theme, x11-themes/hicolor-icon-theme Some apps expect Adwaita or hicolor even on KDE.
GTK apps look wrong x11-themes/breeze-gtk, kde/kde-gtk-config Set GTK theme from System Settings.
no wallpapers/sounds kde/plasma-workspace-wallpapers, kde/ocean-sound-theme Small packages that make a desktop feel complete.
bare home directory x11-apps/xdg-user-dirs Run xdg-user-dirs-update to create Documents, Music, Videos, Templates, and Public.

theme refresh commands

lookandfeeltool -a org.kde.breeze.desktop 2>/dev/null || true
plasma-apply-colorscheme BreezeDark 2>/dev/null || true
plasma-apply-desktoptheme breeze-dark 2>/dev/null || true
plasma-apply-cursortheme breeze_cursors 2>/dev/null || true

kbuildsycoca6 --noincremental
gtk-update-icon-cache -f /usr/share/icons/hicolor 2>/dev/null || true
gtk-update-icon-cache -f /usr/share/icons/breeze 2>/dev/null || true
gtk-update-icon-cache -f /usr/share/icons/Adwaita 2>/dev/null || true
                

audio: ALSA first, then PipeWire

A complete modern desktop path needs kernel sound support, any device firmware, ALSA userspace, PipeWire, a session manager such as WirePlumber, and the PulseAudio compatibility service when desktop applications expect it.

cave search alsa-utils
cave search wireplumber
cave show media/pipewire

# after login as the desktop user
aplay -l
arecord -l
alsamixer
systemctl --user status pipewire wireplumber pipewire-pulse --no-pager
wpctl status
pactl info
                
symptomstart here
No cards in aplay -lKernel HDA/USB/SoundWire/SOF support, PCI/USB detection, firmware, and kernel log.
Card exists but is silentUnmute in alsamixer, inspect the WirePlumber profile, then select the correct sink with wpctl.
HDMI audio missingGPU audio function, display cable/receiver state, and the HDMI profile in wpctl status.
Microphone missingarecord -l, capture mute/gain, selected source, and application portal permission.
Bluetooth audio unavailableBlueZ service, adapter rfkill, PipeWire Bluetooth support/options, pairing, and selected codec/profile.

laptop completion checklist

areaverifynotes
battery and thermalsupower -d, powerprofilesctl, sensorsUse one power policy daemon. Competing tuners can continually overwrite each other.
suspend/resumesystemctl suspend, then journalctl -b -1Test from a TTY before trusting lid-close suspend. Check GPU, Wi-Fi, and storage resume separately.
hibernationswap capacity, resume device/offset, initramfs resume supportEncrypted swap, swap files on Btrfs, and secure boot need extra planning.
lid and keysloginctl, libinput debug-eventsCoordinate logind lid policy with the desktop power manager to avoid double handling.
touchpadlibinput list-devicesUse the libinput input profile; configure gestures in the desktop or compositor.
radiosrfkill list, Bluetooth and Wi-Fi logsAirplane-mode keys can leave a persistent soft or hardware block.
dock and displayslsusb -t, compositor output tool, DRM logUSB-C mode, DisplayPort MST, Thunderbolt authorization, and hybrid-GPU wiring all matter.

virtual machines: Exherbo guest and KVM host

rolerequired piecesverification
KVM guestvirtio block/SCSI, network, console, RNG, balloon, and optional virtio GPU drivers; root filesystem supportlspci -nnk, ip -br link, dmesg | grep -i virtio.
VMware/VirtualBox/Hyper-V guestmatching kernel guest drivers, clock source, storage/network driver, and optional integration toolsCheck the hypervisor identity and bound drivers before installing vendor tools.
KVM hostCPU virtualization enabled in firmware, KVM kernel driver, QEMU, libvirt/management tools, bridge or NAT networkinglscpu | grep Virtualization, lsmod | grep kvm, virsh list --all.
cave search qemu
cave search libvirt
cave search virt-manager
cave show category/candidate-package
cave resolve category/qemu-package category/management-package
                

Service names and group policy depend on the selected libvirt build. Inspect installed units and sockets with systemctl list-unit-files | grep -i virt. PCI passthrough requires IOMMU planning and can make the host lose access to a device; it is not a first-boot task.

leave the chroot and prove first boot

Before exiting, confirm the user, network service, filesystem table, kernel, initramfs, loader entry, and root filesystem UUID. Then leave the chroot and unmount in reverse order from the live system.

# inside chroot
getent passwd alice
findmnt --verify --verbose
ls -lh /boot/vmlinuz-* /boot/initramfs-*.img
grep -nE 'vmlinuz|initramfs|root=' /boot/grub/grub.cfg
exit

# live system
sudo umount -R /mnt/exherbo
sudo swapoff /dev/nvme0n1p2   # use the actual swap device
sudo reboot
                

At first boot, use a local TTY if the display manager fails. Verify the running kernel, root mount, network, clock, failed units, and boot errors before adding more packages:

uname -r
findmnt /
ip -br address
timedatectl
systemctl --failed
journalctl -b -p 3 --no-pager
                

CONFIG_PROTECT files

Exherbo protects local config files. When package updates provide a new config, Paludis may leave files like /etc/._cfg0000_hostname. Do not delete blindly; inspect and merge.

sudo find /etc -name '._cfg*' -print

for f in $(sudo find /etc -name '._cfg*' -print); do
  echo "===== $f ====="
  target="$(dirname "$f")/$(basename "$f" | sed 's/^._cfg[0-9]*_//')"
  echo "TARGET: $target"
  sudo diff -u "$target" "$f" 2>/dev/null || sudo cat "$f"
done
                

world updates without panic

sudo cave sync

# preview only
sudo cave resolve world

# execute only after reading the plan
sudo cave resolve --execute world
                
letter meaning dummy translation
n new install Paludis wants to add a package.
u upgrade Version changes.
r reinstall/rebuild Same version, usually option drift or rebuild needed.
< remove/purge candidate Read carefully before taking.

If world shows same-version r rebuilds after editing options.conf, it is usually not broken. It is trying to make installed package metadata match the current desired options.

post-update audit

uname -r
findmnt / /boot
ip -br address
systemctl --failed
journalctl -b -p 3 --no-pager

# graphical profiles
lspci -nnk | grep -A3 -E 'VGA|3D|Display'
glxinfo -B
echo "$XDG_CURRENT_DESKTOP / $XDG_SESSION_TYPE"
systemctl --user --failed
wpctl status
                

Good signs for any selected profile:

  • The running kernel has a matching module tree and the intended root and boot filesystems are mounted.
  • The expected GPU driver is bound and glxinfo -B names hardware rather than llvmpipe.
  • PipeWire/WirePlumber, portals, and a display manager are checked only when that profile uses them.
  • Laptops resume, reconnect networking, restore audio, and drive external displays after suspend.
  • No priority error spam in journalctl -b -p 3.

For proprietary NVIDIA, additionally run nvidia-smi and inspect /sys/module/nvidia_drm/parameters/modeset. For AMD, Intel, nouveau, and virtio, inspect the matching DRM driver in lspci -nnk and the kernel log instead.

common Exherbo failures by layer

problem likely layer check
cave sync or fetch fails clock, DNS, TLS, repository configuration date -u, getent hosts, repository files, certificate error, and proxy settings.
resolution cannot produce a plan masks, licenses, options, providers, repository availability Read every unmet decision; use cave show on the named package instead of adding random global options.
source build fails first compiler error, disk/RAM, tests, stale work Save the complete build log, find the first real error, check df -h and memory, and reproduce one package.
kernel cannot mount root storage/filesystem driver, root UUID, initramfs Compare blkid, fstab, GRUB command line, initramfs contents, and the target kernel config.
firmware/GRUB skips Exherbo UEFI mode, ESP mount, EFI entry, GRUB files findmnt /boot, efibootmgr -v, find /boot/EFI -type f, and grub-mkconfig output.
black screen or llvmpipe GPU binding, firmware, Mesa/vendor userspace, compositor lspci -nnk, glxinfo -B, and kernel log filtered for the actual driver, DRM, and firmware.
network has no internet radio/link, DHCP, route, DNS Check rfkill, address, default route, numeric-IP ping, then getent hosts in that order.
sound absent or wrong output kernel/firmware, ALSA, WirePlumber policy aplay -l, alsamixer, user service status, then wpctl status.
Flatpak fails with FUSE kernel config/modules modprobe fuse, ls -lah /dev/fuse, find /lib/modules/$(uname -r) -name fuse.ko*.
application cannot screenshare PipeWire/portal stack User-service logs, one desktop-appropriate portal backend, PipeWire/WirePlumber, and session environment.
suspend resumes broken GPU, Wi-Fi, storage, firmware, power policy Reproduce from a TTY and inspect journalctl -b -1; test one suspect subsystem at a time.
desktop session missing session desktop file find /usr/share/xsessions /usr/share/wayland-sessions -maxdepth 1 -type f and display-manager logs.
update leaves system inconsistent interrupted transaction, CONFIG_PROTECT, kernel/modules Review the failed package and protected files, finish the world plan, then rebuild boot artifacts if kernel-facing packages changed.

Collect a small evidence bundle before asking for help. Remove secrets, private hostnames, MAC addresses, and authentication data before posting it.

uname -a
cave print-id-environment
systemctl --failed
journalctl -b -p 3 --no-pager
lspci -nnk
findmnt
df -h
                
Daily-driver standard: boot files exist, GRUB names the right kernel/initramfs, the selected GPU or console profile works, networking survives reboot, the chosen session logs in, profile-specific audio and portals work, laptop suspend is tested where relevant, no CONFIG_PROTECT files are forgotten, and journalctl -b -p 3 has been reviewed.

Distro families and package notes.

A distro is a kernel plus userland plus packaging plus policy. The family matters because it decides package tools, service defaults, release rhythm, and documentation culture.

choosing a distro

Pick a distro based on hardware support, package freshness, release model, documentation, driver needs, and how much maintenance you want. The best distro is the one whose tradeoffs match the machine and the job.

common families

family docs tools good fit
Debian Debian docs apt, dpkg Stable servers, conservative desktops, and users who prefer a slow-moving base with a large package archive.
Ubuntu Ubuntu docs apt, dpkg, Snap General desktop use, hardware support, gaming setups, and people who want broad third-party software support.
Linux Mint Mint docs apt, dpkg Traditional desktop users, Windows switchers, and machines that need a comfortable out-of-box setup.
Pop!_OS Pop!_OS docs apt, dpkg Desktop users who want a polished GNOME-based workflow, System76 hardware support, and simple graphics setup.
Fedora Fedora docs dnf, rpm Modern Linux desktops, developers, GNOME users, and people who want fresh software without full rolling release behavior.
RHEL family Rocky docs dnf, rpm Servers, enterprise-style systems, long maintenance windows, and production-like lab environments.
AlmaLinux AlmaLinux wiki dnf, rpm RHEL-compatible servers and workstations with community governance and long-term stability.
Arch Arch Wiki pacman, PKGBUILD Users who want rolling packages, simple packaging, direct control, and excellent documentation.
EndeavourOS EndeavourOS Discovery pacman, AUR helpers Arch-style systems with a friendlier installer and fewer manual setup steps.
openSUSE openSUSE docs zypper, YaST Users who want strong admin tooling, snapshot-friendly setups, and a choice between stable and rolling tracks.
Gentoo Gentoo Wiki emerge, Portage, ebuilds People who want source-based control, USE flags, custom builds, and deep system learning.
Exherbo Exherbo docs cave, Paludis, exheres Advanced users who want a source-based system with explicit options, clean package metadata, and full control over boot, kernel, drivers, and desktop composition.
Alpine Alpine docs apk Containers, small systems, security-minded minimal installs, and users comfortable with musl and BusyBox.
Void Void Handbook xbps, runit Independent systems, fast package management, non-systemd setups, and users who like simple service supervision.
NixOS NixOS Manual nix, declarative config Reproducible systems, rollback-friendly machines, declarative configuration, and users willing to learn a different model.
Slackware SlackDocs pkgtool Traditional Unix-like Linux setups with minimal abstraction and old-school administration style.
MX Linux MX manuals apt, MX tools Stable desktop systems, older hardware, and users who want Debian-based convenience with helpful graphical tools.
Kali Kali docs apt, dpkg Security labs, penetration testing, training environments, and tool collections. Not the best choice for a normal daily desktop.

release model notes

model what it means tradeoff
stable Packages change slowly and receive security fixes. Predictable, but less fresh.
rolling Packages continuously update. Fresh, but requires more attention.
source based Packages are commonly built locally from source. Highly configurable, but time-consuming.
declarative System state is described in configuration. Reproducible, but requires learning the model.
enterprise clone Tracks enterprise Linux compatibility. Excellent for servers, less exciting for new desktop software.

stable

Good for servers, boring laptops, and systems where surprise upgrades should not be part of the hobby.

rolling

Good for new hardware, fresh desktops, and users willing to read package transaction output.

source based

Good for learning internals, tuning options, and understanding what your toolchain is doing.