Everything you need to master Tumbleweed & Slowroll — from your very first boot to kernel-level customisation. Beginner through advanced, all in one place.
New to all of this? Answer these two questions and you'll know exactly where to begin.
→ Choose Slowroll
Monthly big updates, daily security fixes. Less churn, less chance of breakage. Ideal for a family PC, secondary machine, or if you simply don't want to think about it.
→ Choose Tumbleweed
Daily/weekly snapshots with the very latest software. Best for developers, enthusiasts, and anyone who wants cutting-edge drivers and desktop environments.
openSUSE's flagship. Endlessly customisable, feature-rich, great for gamers and power users. Best integration with YaST and openSUSE tools. Recommended.
Clean, opinionated, and focused. Fewer options, but beautifully consistent. Best Wayland support historically. Great for "just works" users.
Lightweight, fast, traditional desktop. Perfect for older hardware or users who prefer simplicity over bells and whistles.
| I want to… | Jump to |
|---|---|
| Get openSUSE installed | Installation |
| Get my NVIDIA/AMD GPU working | GPU Drivers |
| Play games on Steam | Gaming |
| Dual-boot with Windows | Dual Boot |
| Fix something that broke | Troubleshooting |
| Connect to my NAS | Network Storage |
| Make my desktop look amazing | Theming Deep-Dive |
| Set up a home server | Self-Hosting |
Many of the topics in this guide have companion videos on the GNUToLinux YouTube channel. Look for the 📺 icon throughout the guide — it means there's a video available for that section.
openSUSE is one of the oldest and most robust Linux distributions, backed by SUSE — a German enterprise Linux company. It comes in several flavours, and the two that matter most for desktop users are Tumbleweed and Slowroll.
A true rolling release. Every snapshot is tested by openQA before being released. You get the latest kernels, desktop environments, and packages within days of upstream release. As of March 2026, Tumbleweed ships kernel 6.19.x and Plasma 6.6.
Best for: Users who want the absolute latest software and are comfortable with frequent updates.
Based on Tumbleweed but rolls slower — big updates arrive roughly monthly, with continuous security fixes. Slowroll updates typically land 5–10 days after their Tumbleweed snapshot. Still in beta but widely used.
Best for: Users who want fresh software without the daily churn. Great for machines you don't use every day.
After decades as openSUSE's all-in-one management tool, YaST is being phased out. Its role is being split between three modern replacements:
https://localhost:9090.Where things stand (April 2026): Leap 16 has fully dropped YaST. Tumbleweed and Slowroll still ship YaST but it's in community maintenance mode — SUSE is no longer developing it. The zypper command line is unaffected and remains the primary way most users manage packages. This guide covers both YaST (where it still exists) and the new tools.
YaST was openSUSE's all-in-one management tool. Cockpit is taking over system admin — a web dashboard for networking, storage, users, firewall, and services. Still available in Tumbleweed/Slowroll but on its way out.
Zypper remains the command-line package manager and isn't going anywhere. Myrlyn is its new GUI companion — a standalone Qt 6 app replacing YaST's Software Management module.
openSUSE defaults to Btrfs with automatic snapshots. Broke something? Boot from a snapshot and roll back in seconds.
The new web-based installer replacing YaST's installation wizard. Supports remote installs, API-driven deployments, and a cleaner UI. Default in Leap 16, coming to Tumbleweed.
The OBS lets anyone build and distribute packages for openSUSE (and other distros). It powers community repos and software.opensuse.org.
If you use your machine daily and enjoy staying on the bleeding edge, go Tumbleweed. If it's a secondary machine, a family PC, or you just want less frequent updates, Slowroll is a superb choice. Both use zypper dup to update — the only difference is how often packages arrive.
Grab the ISO from get.opensuse.org. For Tumbleweed, use the DVD or NET image. For Slowroll, use the dedicated ISO from the Slowroll download page or install Tumbleweed and migrate.
On any OS, use balenaEtcher, Ventoy, or the command line:
# Replace /dev/sdX with your USB device — BE CAREFUL
sudo dd if=openSUSE-Tumbleweed-DVD-x86_64.iso of=/dev/sdX bs=4M status=progress oflag=sync
openSUSE is transitioning to the Agama installer — a modern, web-based replacement for the classic YaST installer. Leap 16 already uses Agama by default. Tumbleweed and Slowroll are in transition and may use either installer depending on when you download your ISO.
Agama runs as a web interface — even during local installation, it opens in a browser. It's cleaner and simpler than YaST's installer but covers all the essentials. It also supports remote installation (install a headless server from another machine's browser). The process:
/home — this gives you snapshot support out of the boxIf your ISO still uses the YaST installer, the process is essentially the same — just with the traditional desktop-style wizard rather than a browser interface. Both produce identical results.
If you've installed Tumbleweed and want to switch to Slowroll, run the following:
# Download and install the Slowroll repos package
shopt -s globstar
TMPSR=$(mktemp -d)
zypper --pkg-cache-dir=${TMPSR} download openSUSE-repos-Slowroll
zypper modifyrepo --all --disable
zypper install ${TMPSR}/**/openSUSE-repos-Slowroll*.rpm
# Now perform a distribution upgrade to switch
sudo zypper dup
The migration tool version in some Tumbleweed repos may have a bug that causes migration to fail. If that happens, download the latest openSUSE-repos-Slowroll from the upstream GitHub source and install it directly.
Many people switching to Linux want to keep Windows around as a safety net. openSUSE handles dual-booting well, but there are some important steps to get right.
During the openSUSE installer's partitioning step:
/) and a swap partition. If you have space, create a separate XFS /home partitionopenSUSE's GRUB bootloader should automatically detect Windows and add it to the boot menu. If Windows doesn't appear after installation, run sudo grub2-mkconfig -o /boot/grub2/grub.cfg to regenerate the boot menu. Install os-prober if it's not already present: sudo zypper install os-prober.
Windows and Linux handle the hardware clock differently. Fix it by telling Linux to use local time:
sudo timedatectl set-local-rtc 1
Major Windows updates can overwrite the boot record. To fix:
# From rescue environment
mount /dev/sdaX /mnt # your root partition
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt
grub2-install --target=x86_64-efi --efi-directory=/boot/efi
grub2-mkconfig -o /boot/grub2/grub.cfg
exit
reboot
If BitLocker is enabled, Linux cannot mount the Windows partition. You'll need to either disable BitLocker in Windows or suspend it before booting into Linux if you need file access.
The very first thing to do after a fresh install:
# Refresh all repositories and perform a distribution upgrade
sudo zypper refresh
sudo zypper dup
On Tumbleweed and Slowroll, always use zypper dup (distribution upgrade), not zypper up (update). The dup command properly handles package renames, splits, and version changes that rolling releases require. Using up can leave your system in an inconsistent state.
Packman provides multimedia codecs, proprietary video codecs, and other packages that openSUSE can't ship due to licensing.
# For Tumbleweed
sudo zypper ar -cfp 90 https://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Tumbleweed/ packman
# For Slowroll — use the dedicated Slowroll Packman repo
sudo zypper ar --refresh -p 70 http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Slowroll/Essentials/ packman
# Switch system packages to Packman versions (for full codec support)
sudo zypper dup --from packman --allow-vendor-change
# Install Flatpak if not already present
sudo zypper install flatpak
# Add Flathub
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
After adding Packman:
# Install essential codecs
sudo zypper install --from packman ffmpeg gstreamer-plugins-bad gstreamer-plugins-ugly gstreamer-plugins-libav libavcodec-full
sudo hostnamectl set-hostname my-opensuse-machine
| Action | Command |
|---|---|
| Search for a package | zypper search firefox |
| Install a package | sudo zypper install firefox |
| Remove a package | sudo zypper remove firefox |
| Get package info | zypper info firefox |
| List installed packages | zypper search -i |
| Clean package cache | sudo zypper clean |
| Install a pattern (group) | sudo zypper install -t pattern devel_basis |
| List available patterns | zypper search -t pattern |
| Lock a package version | sudo zypper addlock package-name |
| Unlock a package | sudo zypper removelock package-name |
Myrlyn is the standalone Qt 6 replacement for YaST's Software Management module. It uses the same libzypp backend as zypper, so everything stays consistent.
# Install Myrlyn (if not already present)
sudo zypper install myrlyn
# Run it
sudo myrlyn
# Or run in read-only mode (no root needed) to browse packages
myrlyn
Myrlyn lets you search, install, update, and remove individual packages or patterns. It also manages your repositories, supports package locking ("taboo" and "protected" states), and auto-refreshes repos on launch. If you've used YaST's Software Management before, Myrlyn will feel immediately familiar — it was built by the same developer.
On Tumbleweed and Slowroll (as of early 2026), YaST is still installed and functional. Open YaST → Software Management to search, install, or remove packages. However, YaST is in maintenance mode and will eventually be removed. Get comfortable with Myrlyn and zypper instead.
Cockpit is the replacement for YaST's system configuration modules (network, firewall, users, services, storage). It runs as a web dashboard.
# Install Cockpit (may already be present)
sudo zypper install cockpit
sudo systemctl enable --now cockpit.socket
# Open firewall for Cockpit
sudo firewall-cmd --permanent --add-service=cockpit
sudo firewall-cmd --reload
# Access in your browser:
# https://localhost:9090
# Log in with your system username and password
From Cockpit you can manage networking, firewall rules, user accounts, systemd services, storage, software updates, and even open a terminal — all from your browser. It also works remotely, so you can manage headless machines.
# Search Flathub
flatpak search discord
# Install
flatpak install flathub com.discordapp.Discord
# Run
flatpak run com.discordapp.Discord
# Update all Flatpaks
flatpak update
# Remove
flatpak uninstall com.discordapp.Discord
The software.opensuse.org website lets you find community-built packages and install them via 1-Click Install (downloads a .ymp file that adds the repo and installs the package via YaST). Be cautious with community repos — they can conflict with official packages.
Having three ways to install software is a strength, not a problem — once you know which to reach for:
| Method | Best For | Pros | Cons |
|---|---|---|---|
| Zypper (official repos) | System tools, drivers, desktop components, dev libraries | Best integration, auto-snapshots, fastest, dependency-aware | Software may lag behind upstream slightly |
| Flatpak (Flathub) | Desktop apps — browsers, Discord, Spotify, Obsidian, gaming launchers | Sandboxed, always up-to-date, distro-independent, easy | Larger disk usage, slight overhead, some system integration quirks |
| OBS / 1-Click | Niche software not in official repos | Huge catalogue of community packages | Can cause dependency conflicts, repos may be unmaintained |
System-level stuff (drivers, codecs, kernel modules, dev tools) → Zypper. User-facing apps (chat apps, creative tools, browsers) → Flatpak. Only use OBS/1-Click when the software isn't available anywhere else, and remove the repo after installing if you want to avoid future conflicts.
Do not use Timeshift alongside Snapper on Btrfs. They both try to manage Btrfs snapshots and will conflict, potentially corrupting your snapshot layout. openSUSE's built-in Snapper integration is superior on this distro — use that instead. Timeshift is designed for distros that don't have native snapshot tooling.
# Install build essentials
sudo zypper install -t pattern devel_basis
# Standard build from source
tar xf package-1.0.tar.gz
cd package-1.0
./configure --prefix=/usr/local
make -j$(nproc)
sudo make install
openSUSE uses RPM packages. You can install a downloaded .rpm file directly with sudo zypper install ./package.rpm — this handles dependencies automatically unlike using rpm -i directly.
# The standard update process — always use dup for rolling releases
sudo zypper refresh
sudo zypper dup
# If you want to see what will change before committing
sudo zypper dup --dry-run
On KDE Plasma, the Discover app will also notify you of updates. On GNOME, GNOME Software does the same. However, many openSUSE users prefer the terminal for full control.
# Enable automatic updates (checks and downloads, doesn't auto-install by default)
sudo zypper install yast2-online-update-configuration
# Or use a systemd timer for scheduled dup
# Create /etc/systemd/system/zypper-dup.service
# and /etc/systemd/system/zypper-dup.timer
Tumbleweed can receive updates daily. You don't have to update every day — once or twice a week is perfectly fine. If you skip updates for too long (months), run a few zypper dup cycles to catch up safely. Slowroll is gentler: expect monthly batch updates with security fixes in between.
Sometimes zypper dup will present you with conflicts. Read them carefully. Common solutions:
--allow-vendor-change if needed.zypper addlock package-name.zypper packages --orphaned and remove what you don't need.This is one of openSUSE's killer features. If you accepted the default Btrfs partitioning during install, Snapper is already configured and working. Every time you run zypper (or Myrlyn), a pair of snapshots (before/after) is automatically created.
A snapshot is a frozen state of your root filesystem at a point in time. Your /home directory is typically on a separate partition or subvolume and is not included in snapshots — so your personal files are safe during rollbacks.
# List all snapshots
sudo snapper list
# Create a manual snapshot
sudo snapper create --description "Before I broke everything"
# Compare two snapshots (see what changed)
sudo snapper status 10..11
# View file diffs between snapshots
sudo snapper diff 10..11
# Undo changes between two snapshots
sudo snapper undochange 10..11
If an update breaks your system and you can't boot properly:
# Perform the actual rollback
sudo snapper rollback
# Reboot to complete
sudo reboot
No other mainstream distro makes rollbacks this easy. On Tumbleweed especially, knowing how to use Snapper means you can fearlessly update. Something broke? Roll back in under two minutes.
# Check Btrfs disk usage
sudo btrfs filesystem usage /
# Delete a specific snapshot
sudo snapper delete 15
# Delete a range
sudo snapper delete 10-20
# Configure retention policy
sudo snapper set-config NUMBER_LIMIT=10 NUMBER_LIMIT_IMPORTANT=5
# Snapper auto-cleanup runs via systemd timer
systemctl status snapper-cleanup.timer
# List Btrfs subvolumes
sudo btrfs subvolume list /
# Check filesystem
sudo btrfs scrub start /
sudo btrfs scrub status /
# Enable compression (add to /etc/fstab)
# compress=zstd:1 for fast compression
# Example fstab entry:
# UUID=xxx / btrfs subvol=/@,compress=zstd:1 0 0
# Balance filesystem (reclaim space)
sudo btrfs balance start --bg /
# Defragment
sudo btrfs filesystem defragment -r /
KDE Plasma is openSUSE's flagship desktop. It's extraordinarily customisable:
sudo zypper install gnome-tweaks) for theme and font controls# Install Microsoft fonts (for compatibility)
sudo zypper install fetchmsttfonts
# Install Google's Noto fonts (excellent Unicode coverage)
sudo zypper install google-noto-fonts
# Install custom fonts manually
mkdir -p ~/.local/share/fonts
cp MyFont.ttf ~/.local/share/fonts/
fc-cache -fv
Both KDE and GNOME default to Wayland on openSUSE. Wayland offers better security, smoother compositing, and VRR/HDR support. However, some apps (especially older ones or screen-sharing tools) may work better under X11. You can switch at the login screen.
Both KDE Plasma and GNOME support VRR (FreeSync/G-Sync compatible) under Wayland. KDE Plasma 6.x also has experimental HDR support. These features require a compatible monitor and GPU driver.
NVIDIA drivers on openSUSE require adding the NVIDIA repository. The open kernel driver (G07) is recommended for Turing-generation GPUs and newer.
# Check your GPU
inxi -aG
# Method 1: Install the NVIDIA repos package (recommended)
sudo zypper install openSUSE-repos-NVIDIA
# Then install the driver (auto-detects your GPU)
sudo zypper install-new-recommends --repo repo-non-free
# Method 2: Manually add the repo (Tumbleweed)
sudo zypper addrepo --refresh https://download.nvidia.com/opensuse/tumbleweed/ nvidia
# Install the open kernel driver (Turing+ GPUs / G07)
sudo zypper install nvidia-open-driver-G07-signed-kmp-default
# Reboot
sudo reboot
During installation, a MOK (Machine Owner Key) is created and the kernel modules are signed. On the first reboot after driver installation, the EFI tool will prompt you to "Enroll MOK" → select Continue → Yes → enter your root password (US keyboard layout!). This is essential — skipping it means the driver won't load.
AMD GPUs use the open-source Mesa drivers, which are included in openSUSE by default. There's nothing extra to install — it just works out of the box. This is one of the reasons AMD is the easier choice for Linux gaming.
# Verify your AMD driver is loaded
lsmod | grep amdgpu
# Install Vulkan support (may already be installed)
sudo zypper install libvulkan_radeon libvulkan_radeon-32bit
# Check Vulkan
vulkaninfo | head -20
# Intel drivers are built into the kernel (i915)
# For Vulkan support:
sudo zypper install libvulkan_intel libvulkan_intel-32bit
# For hybrid laptops, use PRIME render offload
# Add to game launch options in Steam:
# DRI_PRIME=1 %command%
# Or for NVIDIA specifically:
# __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia %command%
# Check which GPU is being used
glxinfo | grep "OpenGL renderer"
Linux gaming has never been better. Thanks to Valve's Proton, the vast majority of Windows games run on Linux — and openSUSE handles it beautifully.
# Install Steam
sudo zypper install steam
# If on Tumbleweed with SELinux (default since Feb 2025),
# the selinux-policy-targeted-gaming package is auto-installed
# with Steam to handle the required boolean.
# If you use the Flatpak version of Steam, install it manually:
sudo zypper install selinux-policy-targeted-gaming
After installing, launch Steam, go to Settings → Compatibility, enable "Enable Steam Play for all other titles", and select the latest Proton version. That's it — most Windows games will now work.
Before buying a game, check protondb.com to see how well it runs on Linux. Users rate games from Platinum (flawless) to Borked (doesn't work).
Lutris is a game manager that handles non-Steam games — GOG, Epic, emulators, and standalone Windows games.
sudo zypper install lutris
For Epic Games Store and GOG games, Heroic provides a native launcher:
flatpak install flathub com.heroicgameslauncher.hgl
A community build of Proton with extra patches and fixes for games that don't work with official Proton:
# Install ProtonUp-Qt to manage Proton-GE versions
flatpak install flathub net.davidotek.pupgui2
# Or install via Flatpak
flatpak install flathub com.valvesoftware.Steam.CompatibilityTool.Proton-GE
# RetroArch — the all-in-one emulator frontend
sudo zypper install retroarch
# Or use the Flatpak for the latest version
flatpak install flathub org.libretro.RetroArch
# Individual emulators
sudo zypper install dolphin-emu # GameCube/Wii
flatpak install flathub org.DolphinEmu.dolphin-emu
flatpak install flathub org.ppsspp.PPSSPP # PSP
flatpak install flathub app.xemu.xemu # Xbox
# GameMode — optimises system settings while gaming
sudo zypper install gamescope gamemode
# MangoHud — FPS overlay
sudo zypper install mangohud
# Launch a game with MangoHud:
# MANGOHUD=1 %command%
# Launch with GameMode:
# gamemoderun %command%
# Combine both:
# MANGOHUD=1 gamemoderun %command%
# Disable KDE compositor for better performance
# Alt+Shift+F12 toggles it on/off
# Or add to game launch options:
# KWIN_COMPOSE=0 %command%
Xbox controllers work out of the box via USB or Bluetooth. PlayStation controllers (DualShock 4, DualSense) also work natively. Steam's built-in controller configuration handles most edge cases. For Switch Pro controllers, they're supported by the kernel — just pair via Bluetooth.
NetworkManager handles connections in both KDE and GNOME. Click the system tray icon to connect to Wi-Fi. For terminal:
# List available Wi-Fi networks
nmcli device wifi list
# Connect to a network
nmcli device wifi connect "MyNetwork" password "MyPassword"
# Show all connections
nmcli connection show
To access Windows shares, NAS devices, or other Samba shares:
# Install Samba client tools
sudo zypper install samba-client cifs-utils
# Browse available shares on a server
smbclient -L //192.168.1.100 -U username
# Mount a share temporarily
sudo mount -t cifs //192.168.1.100/SharedFolder /mnt/share \
-o username=myuser,password=mypass,uid=$(id -u),gid=$(id -g)
# KDE Dolphin — just type in the address bar:
# smb://192.168.1.100/SharedFolder
# Create credentials file (safer than passwords in fstab)
sudo nano /etc/samba/credentials
# Add:
# username=myuser
# password=mypass
sudo chmod 600 /etc/samba/credentials
# Add to /etc/fstab:
# //192.168.1.100/SharedFolder /mnt/nas cifs credentials=/etc/samba/credentials,uid=1000,gid=1000,iocharset=utf8 0 0
# Mount it
sudo mount -a
# Install NFS client
sudo zypper install nfs-client
# Mount an NFS share
sudo mount -t nfs 192.168.1.100:/export/data /mnt/nfs
# Persistent mount in /etc/fstab:
# 192.168.1.100:/export/data /mnt/nfs nfs defaults 0 0
# Connect to a remote machine
ssh user@192.168.1.50
# Generate SSH keys
ssh-keygen -t ed25519
# Copy your public key to a remote server
ssh-copy-id user@192.168.1.50
# Enable SSH server on your openSUSE machine
sudo systemctl enable --now sshd
# Install Samba server
sudo zypper install samba
# Create a shared directory
sudo mkdir -p /srv/samba/shared
sudo chmod 777 /srv/samba/shared
# Add Samba user
sudo smbpasswd -a yourusername
# Edit /etc/samba/smb.conf — add at the bottom:
# [Shared]
# path = /srv/samba/shared
# browseable = yes
# writable = yes
# valid users = yourusername
# Start and enable
sudo systemctl enable --now smb nmb
# Open firewall
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
# openSUSE uses firewalld by default
# Check status
sudo firewall-cmd --state
# List open ports/services
sudo firewall-cmd --list-all
# Open a port
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
# Or use Cockpit (https://localhost:9090) for a web-based firewall GUI
Btrfs snapshots are brilliant for rolling back system changes, but they live on the same drive. If the drive fails, you lose everything. Always maintain off-drive backups for important data.
# Backup home directory to an external drive
rsync -avh --progress /home/username/ /mnt/backup/home/
# Backup to a remote server via SSH
rsync -avh --progress /home/username/ user@server:/backup/home/
# Incremental backup (only copies changed files)
rsync -avh --delete /home/username/ /mnt/backup/home/
Timeshift provides a GUI for system snapshots. On openSUSE with Btrfs, it integrates with existing snapshots:
sudo zypper install timeshift
Borg is a deduplicating backup tool — perfect for efficient, encrypted backups:
# Install
sudo zypper install borgbackup
# Initialise a repository
borg init --encryption=repokey /mnt/backup/borg-repo
# Create a backup
borg create /mnt/backup/borg-repo::home-{now} /home/username \
--exclude '/home/username/.cache'
# List archives
borg list /mnt/backup/borg-repo
# Restore from backup
borg extract /mnt/backup/borg-repo::home-2026-04-12
# Create /etc/systemd/system/backup.service
# [Unit]
# Description=Daily Borg Backup
#
# [Service]
# Type=oneshot
# ExecStart=/usr/local/bin/backup.sh
# Create /etc/systemd/system/backup.timer
# [Unit]
# Description=Run backup daily at 2am
#
# [Timer]
# OnCalendar=*-*-* 02:00:00
# Persistent=true
#
# [Install]
# WantedBy=timers.target
sudo systemctl enable --now backup.timer
| Command | What It Does |
|---|---|
ls -la | List files with details & hidden files |
cd /path | Change directory |
cp -r src dst | Copy files/folders |
mv old new | Move or rename |
rm -rf dir | Delete (careful!) |
find / -name "file" | Search for files |
grep "text" file | Search inside files |
df -h | Disk space usage |
free -h | Memory usage |
htop | Interactive process viewer |
journalctl -xe | View system logs |
systemctl status sshd | Check service status |
ip a | Show network interfaces |
sudo !! | Re-run last command as root |
# openSUSE uses Bash by default. Install Zsh for a richer experience:
sudo zypper install zsh
# Install Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# Or try Fish — a modern, user-friendly shell
sudo zypper install fish
# Set your default shell
chsh -s /usr/bin/zsh
# Modern replacements for classic tools
sudo zypper install bat # better cat (syntax highlighting)
sudo zypper install eza # better ls
sudo zypper install fd # better find
sudo zypper install ripgrep # better grep
sudo zypper install btop # better htop
sudo zypper install dust # better du
sudo zypper install duf # better df
sudo zypper install tldr # simplified man pages
# Add to ~/.bashrc or ~/.zshrc
alias update='sudo zypper ref && sudo zypper dup'
alias ll='ls -alh --color=auto'
alias gs='git status'
alias cls='clear'
alias ports='sudo ss -tulnp'
alias myip='curl -s ifconfig.me'
openSUSE ships Podman instead of Docker by default. Podman is daemonless, rootless, and command-compatible with Docker:
# Install
sudo zypper install podman podman-compose
# Run a container (same syntax as docker)
podman run -it --rm ubuntu bash
# Run rootless (no sudo needed)
podman run -d -p 8080:80 nginx
# List running containers
podman ps
# Docker Compose equivalent
podman-compose up -d
# If you specifically need Docker
sudo zypper install docker docker-compose
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
# Log out and back in for group change
# Install virtualisation stack
sudo zypper install -t pattern kvm_server kvm_tools
sudo zypper install virt-manager
# Enable and start libvirtd
sudo systemctl enable --now libvirtd
# Add your user to the libvirt group
sudo usermod -aG libvirt $USER
# Launch the GUI
virt-manager
sudo zypper install virtualbox virtualbox-qt
sudo usermod -aG vboxusers $USER
# Install
sudo zypper install distrobox
# Create an Ubuntu container
distrobox create --name ubuntu --image ubuntu:24.04
# Enter it
distrobox enter ubuntu
# Export an app from the container to your host
distrobox-export --app firefox
As of February 2025, openSUSE Tumbleweed uses SELinux as the default Mandatory Access Control mechanism (replacing AppArmor). Slowroll follows suit. SELinux enforces fine-grained access policies on processes and files.
# Check SELinux status
sestatus
# Check current mode
getenforce
# Temporarily set to permissive (logging only, no enforcement)
sudo setenforce 0
# View SELinux denials
sudo ausearch -m AVC -ts recent
# Manage booleans
sudo getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect on
If you install Steam or Lutris via RPM, the selinux-policy-targeted-gaming package is automatically installed, which sets the required selinuxuser_execmod boolean. If you use Flatpak versions, install this package manually or set the boolean yourself.
openSUSE uses firewalld. Manage it via Cockpit (web dashboard), the YaST Firewall module (while still available), or the firewall-cmd commands covered in the Network section above.
# KeePassXC — excellent offline password manager
sudo zypper install keepassxc
# Or use Bitwarden via Flatpak
flatpak install flathub com.bitwarden.desktop
The openSUSE installer offers LUKS encryption during partitioning. If you didn't enable it during install, encrypting afterwards is complex — it's best done at install time. For encrypting external drives:
# Encrypt a USB drive
sudo cryptsetup luksFormat /dev/sdX1
sudo cryptsetup open /dev/sdX1 encrypted_usb
sudo mkfs.ext4 /dev/mapper/encrypted_usb
sudo mount /dev/mapper/encrypted_usb /mnt/usb
# On Tumbleweed/Slowroll, security fixes come with zypper dup
# For automated patching, consider:
sudo zypper install yast2-online-update-configuration
# Configure via YaST → Online Update Configuration
# System info at a glance
inxi -Fxz
# Hardware info
sudo hwinfo --short
# Disk I/O
iostat -x 1
# Network monitoring
sudo iftop
# Install TLP for better battery life
sudo zypper install tlp
sudo systemctl enable --now tlp
# Check battery status
tlp-stat -b
# Or use power-profiles-daemon (GNOME default)
powerprofilesctl list
powerprofilesctl set power-saver
# View current kernel parameters
cat /proc/cmdline
# Edit GRUB defaults
sudo nano /etc/default/grub
# Modify GRUB_CMDLINE_LINUX_DEFAULT
# Rebuild GRUB config
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# Check current swap
swapon --show
# Adjust swappiness (lower = less eager to swap)
# Add to /etc/sysctl.d/99-swappiness.conf:
# vm.swappiness=10
# ZRAM is enabled by default on newer openSUSE installations
# Check status
zramctl
# List all running services
systemctl list-units --type=service --state=running
# Check boot time
systemd-analyze
systemd-analyze blame
# Disable a slow service
sudo systemctl disable --now some-slow-service
# View failed services
systemctl --failed
# Python (usually pre-installed)
sudo zypper install python3 python3-pip python3-virtualenv
# Node.js
sudo zypper install nodejs npm
# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Go
sudo zypper install go
# Java
sudo zypper install java-21-openjdk java-21-openjdk-devel
# C/C++ toolchain
sudo zypper install -t pattern devel_basis devel_C_C++
# VS Code (via Flatpak)
flatpak install flathub com.visualstudio.code
# Or the RPM from Microsoft's repo
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo zypper addrepo https://packages.microsoft.com/yumrepos/vscode vscode
sudo zypper install code
# Neovim
sudo zypper install neovim
# Kate (KDE's advanced editor — already installed with Plasma)
# Sublime Text, JetBrains IDEs — available via Flatpak or Snap
# Usually pre-installed
sudo zypper install git
# Configure
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
# Jellyfin — free, open-source media server
flatpak install flathub org.jellyfin.JellyfinServer
# Or via Podman
podman run -d --name jellyfin \
-p 8096:8096 \
-v /path/to/media:/media \
-v /path/to/config:/config \
jellyfin/jellyfin
# Run via Podman
podman run -d --name homeassistant \
--network=host \
-v /path/to/config:/config \
ghcr.io/home-assistant/home-assistant:stable
sudo zypper install gimp # Photo editing
sudo zypper install krita # Digital painting
sudo zypper install inkscape # Vector graphics
sudo zypper install kdenlive # Video editing
sudo zypper install obs-studio # Streaming/recording
sudo zypper install audacity # Audio editing
sudo zypper install blender # 3D modelling
# LibreOffice is pre-installed
# For additional apps:
sudo zypper install thunderbird # Email
flatpak install flathub md.obsidian.Obsidian # Note-taking
flatpak install flathub com.logseq.Logseq # Knowledge management
sudo zypper install ardour # DAW
sudo zypper install lmms # Beginner-friendly DAW
sudo zypper install musescore # Sheet music notation
# For low-latency audio, install PipeWire (default on modern openSUSE)
# and configure with:
# pw-metadata -n settings 0 clock.min-quantum 64
sudo zypper install transmission-gtk # Simple
sudo zypper install qbittorrent # Full-featured
# Install Wine
sudo zypper install wine wine-32bit
# Install Bottles (modern Wine manager with sandboxing)
flatpak install flathub com.usebottles.bottles
# CUPS is pre-installed. Access the web interface:
# http://localhost:631
# For HP printers
sudo zypper install hplip
# Configure printers via CUPS web interface: http://localhost:631
# Or use Cockpit → Services to manage CUPS
# Usually works out of the box. If not:
sudo zypper install bluez
sudo systemctl enable --now bluetooth
# Use bluetoothctl for command-line pairing:
bluetoothctl
# power on
# scan on
# pair XX:XX:XX:XX:XX:XX
# connect XX:XX:XX:XX:XX:XX
This is the section you'll actually bookmark. These are the problems people hit most often — and how to fix them.
This is the single most common issue on openSUSE with NVIDIA. Usually caused by the MOK key not being enrolled or the wrong driver version being installed.
# Log in at the TTY
lsmod | grep nvidia
# If no output, the driver isn't loaded. Check why:
sudo dmesg | grep -i nvidia
sudo journalctl -b | grep -i nvidia
# Most common cause: MOK key not enrolled
# Check Secure Boot state:
mokutil --sb-state
If Secure Boot is on and you missed the MOK enrolment prompt during reboot:
# Re-trigger MOK enrolment
sudo mokutil --import /usr/share/nvidia-pubkeys/*.der
# Enter a temporary password, reboot, and complete enrolment in the EFI tool
If all else fails — roll back:
# Reboot, select "Start Bootloader from a read-only snapshot" in GRUB
# Boot into the pre-NVIDIA snapshot, then:
sudo snapper rollback
sudo reboot
# Check PipeWire is running (default audio server on modern openSUSE)
systemctl --user status pipewire pipewire-pulse wireplumber
# Restart audio stack
systemctl --user restart pipewire pipewire-pulse wireplumber
# Check which sound card is detected
aplay -l
# Open audio mixer
pavucontrol # install with: sudo zypper install pavucontrol
# If PipeWire isn't working at all, check it's installed:
sudo zypper install pipewire pipewire-pulseaudio wireplumber
# HDMI audio not working? Check output device in pavucontrol
# and make sure the correct HDMI output is selected
# Identify your Wi-Fi hardware
lspci | grep -i network
# or for USB adapters:
lsusb
# Check if a driver is loaded
lsmod | grep -i iwl # Intel
lsmod | grep -i ath # Atheros/Qualcomm
lsmod | grep -i rtw # Realtek
# If no driver loaded, check what's needed:
sudo dmesg | grep -i firmware
# Many Realtek and Broadcom cards need firmware:
sudo zypper install kernel-firmware-all
# For stubborn Broadcom cards:
sudo zypper install broadcom-wl
# Reboot after installing firmware
sudo reboot
# If GRUB shows but won't boot:
# 1. Try booting from a snapshot (read-only snapshot option in GRUB)
# 2. If that works, rollback:
sudo snapper rollback && sudo reboot
# If GRUB itself is missing (e.g. after Windows update):
# Boot from openSUSE USB → Rescue System
# See the Dual Boot section for full repair steps
# Regenerate GRUB config:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# Reinstall GRUB (UEFI):
sudo grub2-install --target=x86_64-efi --efi-directory=/boot/efi
# On KDE Plasma:
# System Settings → Display → Compositor → set Rendering backend to OpenGL 3.1
# Tick "Enable VSync"
# Or disable the compositor entirely for gaming: Alt+Shift+F12
# For NVIDIA, ensure DRM kernel modesetting is enabled:
# Check /etc/default/grub for:
# GRUB_CMDLINE_LINUX_DEFAULT="... nvidia-drm.modeset=1 ..."
# Then: sudo grub2-mkconfig -o /boot/grub2/grub.cfg && sudo reboot
# On Wayland with NVIDIA, force GBM backend if needed:
# Add to /etc/environment:
# GBM_BACKEND=nvidia-drm
# __GLX_VENDOR_LIBRARY_NAME=nvidia
# View what's conflicting
sudo zypper dup --dry-run
# Force vendor change if Packman/official are fighting
sudo zypper dup --from packman --allow-vendor-change
# Find orphaned packages (leftover from removed repos)
zypper packages --orphaned
# Remove orphans
sudo zypper remove $(zypper packages --orphaned | awk 'NR>4 {print $5}')
# Nuclear option — verify and repair RPM database
sudo rpm --rebuilddb
# Usually caused by too many snapshots
# Check usage
sudo btrfs filesystem usage /
# List and delete old snapshots
sudo snapper list
sudo snapper delete 1-50 # delete a range
# If truly full, emergency cleanup:
sudo btrfs balance start -dusage=5 /
# Run from terminal to see errors
flatpak run com.example.App
# Repair Flatpak installation
flatpak repair
# Update runtime
flatpak update
The default openSUSE kernel is excellent for most users. But specific workloads benefit from alternative kernels.
Optimised for desktop responsiveness and gaming. Uses a 1000Hz tick rate for precise low-jitter scheduling. If you get audio crackling in games, this kernel often fixes it.
For professional audio production with JACK or PipeWire low-latency. Guarantees timing precision for recording and live performance.
Extra security patches and restrictive defaults. Suitable for servers or security-conscious setups.
# Add the community kernel repo
# Check software.opensuse.org for the latest Liquorix package
# Search for "kernel-liquorix"
# Install
sudo zypper install kernel-liquorix
# Reboot and select the new kernel in GRUB
# The default kernel remains as a fallback
NVIDIA drivers need to be rebuilt for each kernel. If you install a custom kernel, you may need to reinstall or rebuild the NVIDIA kernel module. The DKMS approach (sudo zypper install dkms) helps automate this, but it's not always seamless. Always keep the default kernel as a fallback in GRUB.
# If a specific kernel version works perfectly, lock it:
sudo zypper addlock kernel-default
# To unlock later:
sudo zypper removelock kernel-default
# List locked packages:
zypper locks
KDE Plasma is arguably the most customisable desktop on any operating system. Here's a systematic approach:
System Settings → Appearance → Global Theme → "Get New Global Themes". Popular choices include Layan, WhiteSur (macOS-like), Nordic, and Catppuccin.
Kvantum is a theme engine that gives you far more control over how Qt applications look — transparency, blur, custom colours, shadows.
# Install Kvantum
sudo zypper install kvantum-manager
# Download a Kvantum theme (e.g. from kde-store or GitHub)
# Open Kvantum Manager → "Change/Delete Theme" → Install
# Set Kvantum as the application style:
# System Settings → Appearance → Application Style → kvantum-dark
Firefox, GIMP, and other GTK apps won't follow your Qt theme by default. Fix it:
# Install Breeze GTK theme (matches KDE's default)
sudo zypper install gtk3-metatheme-breeze
# Or for a specific theme:
# System Settings → Appearance → GNOME/GTK Application Style
# Select your GTK theme here
# For Flatpak apps, override the theme:
flatpak override --user --env=GTK_THEME=Breeze-Dark
Popular icon themes: Papirus, Tela, Colloid, Fluent.
# Install Papirus
sudo zypper install papirus-icon-theme
# Apply: System Settings → Appearance → Icons → Papirus-Dark
# SDDM login theme:
# System Settings → Startup and Shutdown → Login Screen (SDDM) → Get New
# Or install manually to /usr/share/sddm/themes/
# GRUB theme (e.g., Vimix or Stylish):
# Clone the theme from GitHub
git clone https://github.com/vinceliuice/grub2-themes.git
cd grub2-themes
sudo ./install.sh -t vimix
# Install GNOME Tweaks and Extension Manager
sudo zypper install gnome-tweaks
flatpak install flathub com.mattjakeman.ExtensionManager
# Popular GNOME themes: adw-gtk3, Catppuccin, Marble
# Install via GNOME Tweaks → Appearance
# Recommended extensions for customisation:
# - User Themes (allows custom Shell themes)
# - Blur my Shell
# - Dash to Dock / Dash to Panel
# - Just Perfection (hide/show UI elements)
# - Rounded Window Corners
openSUSE's font rendering can feel different to Windows or macOS. Tweak it:
# Install better fonts
sudo zypper install google-noto-fonts noto-sans-mono-fonts
# For subpixel rendering, create or edit:
# ~/.config/fontconfig/fonts.conf
# Add:
# <match target="font">
# <edit name="antialias" mode="assign"><bool>true</bool></edit>
# <edit name="hinting" mode="assign"><bool>true</bool></edit>
# <edit name="hintstyle" mode="assign"><const>hintslight</const></edit>
# <edit name="rgba" mode="assign"><const>rgb</const></edit>
# <edit name="lcdfilter" mode="assign"><const>lcddefault</const></edit>
# </match>
# Rebuild font cache
fc-cache -fv
sudo zypper install conky
# Configure via ~/.conkyrc or ~/.config/conky/conky.conf
# Search GitHub for "conky themes" for gorgeous pre-built configs
Your configuration files (dotfiles) represent hours of customisation. Version-controlling them means you can set up any new machine in minutes and never lose your setup.
This is the cleanest approach — no symlinks, no extra tools:
# Initialise a bare repo in your home directory
git init --bare $HOME/.dotfiles
# Create an alias (add to ~/.bashrc or ~/.zshrc)
alias dotfiles='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
# Hide untracked files (so "dotfiles status" isn't noisy)
dotfiles config --local status.showUntrackedFiles no
# Now track files:
dotfiles add ~/.bashrc
dotfiles add ~/.config/kitty/kitty.conf
dotfiles add ~/.config/nvim/init.lua
dotfiles commit -m "Initial dotfiles"
# Push to a remote (GitHub, GitLab, etc.)
dotfiles remote add origin git@github.com:yourusername/dotfiles.git
dotfiles push -u origin main
# Clone the bare repo
git clone --bare git@github.com:yourusername/dotfiles.git $HOME/.dotfiles
# Set up the alias
alias dotfiles='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
# Checkout
dotfiles checkout
# If there are conflicts with existing files:
dotfiles checkout 2>&1 | grep -E "\s+\." | awk '{print $1}' | xargs -I{} mv {} {}.backup
dotfiles checkout
~/.bashrc / ~/.zshrc — shell config and aliases~/.config/ — application configs (kitty, nvim, i3, sway, hyprland, etc.)~/.gitconfig — Git settings~/.ssh/config — SSH host configs (not keys!)~/.local/bin/ — custom scriptsSSH private keys, API tokens, passwords, ~/.gnupg/, browser profiles, or anything in ~/.cache. Add these to a .gitignore in your home directory.
# Stow uses symlinks from an organised directory structure
sudo zypper install stow
# Create a dotfiles directory
mkdir -p ~/dotfiles/{bash,nvim,git}
# Move configs into the structure (mirroring home directory paths)
mv ~/.bashrc ~/dotfiles/bash/.bashrc
mv ~/.config/nvim ~/dotfiles/nvim/.config/nvim
mv ~/.gitconfig ~/dotfiles/git/.gitconfig
# Apply with stow (creates symlinks)
cd ~/dotfiles
stow bash nvim git
openSUSE makes an excellent home server platform. Enterprise-grade reliability with rolling updates and Snapper as a safety net.
# Easiest method: Podman container
podman run -d --name nextcloud \
-p 8080:80 \
-v /srv/nextcloud/data:/var/www/html \
nextcloud
# Access at http://your-ip:8080
# For production, add a proper database:
podman run -d --name nextcloud-db \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=nextcloud \
-e MYSQL_USER=nextcloud \
-e MYSQL_PASSWORD=secret \
-v /srv/nextcloud/db:/var/lib/mysql \
mariadb
# AdGuard Home (simpler than Pi-hole, single binary)
podman run -d --name adguard \
--restart always \
-p 53:53/tcp -p 53:53/udp \
-p 3000:3000/tcp \
-v /srv/adguard/work:/opt/adguardhome/work \
-v /srv/adguard/conf:/opt/adguardhome/conf \
adguard/adguardhome
# Setup wizard at http://your-ip:3000
# Then point your router's DNS to this machine's IP
# Install Nginx
sudo zypper install nginx
# Enable and start
sudo systemctl enable --now nginx
# Create a reverse proxy config
# /etc/nginx/vhosts.d/nextcloud.conf:
# server {
# listen 80;
# server_name cloud.yourdomain.com;
#
# location / {
# proxy_pass http://localhost:8080;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
# }
# }
sudo nginx -t && sudo systemctl reload nginx
# Install certbot
sudo zypper install certbot python3-certbot-nginx
# Get a certificate
sudo certbot --nginx -d cloud.yourdomain.com
# Auto-renewal is set up automatically via systemd timer
systemctl list-timers | grep certbot
Cockpit is covered in the Software chapter as YaST's replacement, but it's also perfect for managing a home server remotely. Once enabled, access it from any device on your network at https://your-server-ip:9090. Install additional modules for extra functionality:
# Cockpit modules for server management
sudo zypper install cockpit cockpit-machines cockpit-podman cockpit-networkmanager cockpit-storaged
sudo systemctl enable --now cockpit.socket
# cockpit-machines: manage KVM virtual machines from the browser
# cockpit-podman: manage containers from the browser
# cockpit-storaged: disk/partition management
# Tailscale — zero-config mesh VPN
sudo zypper install tailscale
sudo systemctl enable --now tailscaled
sudo tailscale up
# WireGuard — manual but lightweight
sudo zypper install wireguard-tools
# Configure via /etc/wireguard/wg0.conf
# See wireguard.com/quickstart for config generation
Automating tasks is one of the great joys of Linux. You've got two options: old-school cron and modern systemd timers.
# Edit your user's crontab
crontab -e
# Format: minute hour day month weekday command
# Examples:
# Run a backup script every day at 3am
0 3 * * * /home/username/scripts/backup.sh
# Clean /tmp every Sunday at midnight
0 0 * * 0 rm -rf /tmp/myapp-cache/*
# Check disk space every 6 hours, log it
0 */6 * * * df -h >> /home/username/disk-usage.log
# Run something every 5 minutes
*/5 * * * * /home/username/scripts/check-something.sh
| Field | Values | Example |
|---|---|---|
| Minute | 0–59 | 30 = at the 30th minute |
| Hour | 0–23 | 14 = 2pm |
| Day of Month | 1–31 | 1 = 1st of the month |
| Month | 1–12 | */2 = every 2 months |
| Day of Week | 0–7 (0&7=Sun) | 1-5 = weekdays |
# List your cron jobs
crontab -l
# Edit root's crontab (for system tasks)
sudo crontab -e
systemd timers are more powerful than cron: they support logging, dependencies, randomised delays, and persistent scheduling (runs missed jobs after boot).
Step 1: Create the service file:
# /etc/systemd/system/cleanup.service
[Unit]
Description=Daily cleanup of temp files
[Service]
Type=oneshot
ExecStart=/home/username/scripts/cleanup.sh
User=username
Step 2: Create the timer file:
# /etc/systemd/system/cleanup.timer
[Unit]
Description=Run cleanup daily at 4am
[Timer]
OnCalendar=*-*-* 04:00:00
Persistent=true
RandomizedDelaySec=600
[Install]
WantedBy=timers.target
Step 3: Enable it:
sudo systemctl daemon-reload
sudo systemctl enable --now cleanup.timer
# Check all active timers
systemctl list-timers --all
# Check if it ran
journalctl -u cleanup.service
| Schedule | OnCalendar Value |
|---|---|
| Every hour | *-*-* *:00:00 or hourly |
| Every day at noon | *-*-* 12:00:00 or daily |
| Every Monday at 9am | Mon *-*-* 09:00:00 |
| 1st of every month | *-*-01 00:00:00 or monthly |
| Every 15 minutes | *-*-* *:00/15:00 |
| Weekdays at 8am | Mon..Fri *-*-* 08:00:00 |
Cron is simpler for quick one-liners. systemd timers are better for anything important — they integrate with the journal for logging, can depend on other services, and Persistent=true means missed runs (e.g. the machine was off) will execute on next boot. For anything you care about, use timers.
# Create user service/timer in ~/.config/systemd/user/
mkdir -p ~/.config/systemd/user
# Same format as above, but enable with:
systemctl --user daemon-reload
systemctl --user enable --now my-task.timer
# List user timers
systemctl --user list-timers
news.opensuse.org — Official blog with monthly Tumbleweed summaries, Slowroll updates, and project announcements.
forums.opensuse.org — The main community forum. Excellent for troubleshooting and discussion.
doc.opensuse.org — The official user documentation project covering Tumbleweed setup, Snapper, NVIDIA drivers, and more.
Subscribe to the openSUSE Factory mailing list for Tumbleweed/Slowroll snapshot updates and developer discussions.
Keep these commands in your back pocket: sudo zypper dup (update), sudo snapper list (view snapshots), sudo snapper rollback (recover), inxi -Fxz (system info), journalctl -xe (debug), sestatus (security status).
You've reached the end. You now know more about openSUSE than most.
Now go break something — Snapper's got your back.