Flatpak: Apps sandboxen, aktuell halten und automatisch aktualisieren
Auf einer stabilen Distribution altern Anwendungen. Flatpak löst genau dieses Problem: Programme kommen mit ihren eigenen Bibliotheken, laufen in einer Sandbox und werden unabhängig vom System aktualisiert – auf Debian, Fedora, Arch und openSUSE mit identischen Befehlen. Dieser Artikel erklärt das Modell, die Berechtigungen, ein Setup-Skript für automatische Updates per systemd-Timer – und stellt zwei Apps vor, die den Unterschied zeigen.
Warum Flatpak – und warum nicht einfach apt?
Paketmanager wie apt oder dnf sind an ihre Distribution gebunden und liefern
genau die Versionen, die zur Stabilität des Systems passen. Das ist für Server richtig – für
Desktop-Anwendungen aber unpraktisch: Wer auf Debian stable arbeitet, bekommt dieselbe Anwendung ein Jahr
später in derselben Version, während der Hersteller längst vier Releases weiter ist.
Flatpak trennt beides:
| Eigenschaft | Was sie praktisch bedeutet |
|---|---|
| Distributionunabhängig | Dieselben Befehle und dieselben Pakete auf jeder Distribution – flatpak install flathub … funktioniert überall gleich. |
| Eigene Bibliotheken | Apps bringen ihre Laufzeitumgebung mit (Runtime). Kein „ich brauche GTK 4.18, das System hat 4.6“. |
| Sandbox | Die App sieht nur, was ihr ausdrücklich erlaubt wurde – Netzwerk, Dateien, Geräte, Dienste. Standard ist „so wenig wie möglich“. |
| Unabhängige Updates | Aktualisierungen kommen direkt vom Anbieter und brauchen kein Distributions-Release. |
| Kein Eingriff ins System | Installierte Dateien liegen unter /var/lib/flatpak bzw. ~/.local/share/flatpak, nicht verstreut in /usr. |
Abgrenzung zu den beiden anderen „Universalpaketen“:
| Technik | Modell | Stärke | Schwäche |
|---|---|---|---|
| Flatpak | Geteilte Runtimes, Sandbox, zentrales Repo (Flathub) | Sicherheit durch Isolation, saubere Updates, einheitlich | Große Runtimes (mehrere hundert MB), Portale nötig |
| Snap | Eigene Bundles, Backend von Canonical | Auf Ubuntu ab Werk, automatische Updates | Proprietäres Backend, langsamerer Start |
| AppImage | Eine Datei, keine Installation | Null Abhängigkeiten, überall lauffähig | Keine Updates, keine Sandbox, keine Integration |
Runtimes, Sandbox, Portale
Drei Begriffe erklären praktisch alles, was dir bei Flatpak begegnet:
| Begriff | Bedeutung |
|---|---|
| Runtime | Die gemeinsame Laufzeitumgebung: org.freedesktop.Platform, org.gnome.Platform, org.kde.Platform – jeweils in Versionen. Viele Apps teilen sich dieselbe Runtime, deshalb sind zehn Programme nicht zehn Gigabyte. |
| App-ID | Der eindeutige Name im Format einer umgekehrten Domain, z. B. com.rustdesk.RustDesk oder de.haeckerfelix.Shortwave. Mit dieser ID arbeitest du bei jedem Befehl. |
| Sandbox | Die Isolation. Umgesetzt mit Kernel-Namespaces (bubblewrap). In der Grundkonfiguration sieht die App weder dein Home-Verzeichnis noch das Netzwerk. |
| Portale | Die kontrollierten Türen aus der Sandbox heraus: Dateiauswahl, Bildschirmfreigabe, Benachrichtigungen, Schlüsselbund. Sie laufen über xdg-desktop-portal und fragen dich im Dialog. |
| Flathub | Das zentrale Repository – die Sammelstelle, aus der praktisch alle Desktop-Apps kommen. |
Flatpak und Flathub einrichten
| Distribution | Befehl |
|---|---|
| Debian / Ubuntu / Mint | sudo apt install flatpak – optional zusätzlich gnome-software-plugin-flatpak oder plasma-discover-backend-flatpak für die grafische Softwareverwaltung |
| Fedora / RHEL 9+ | sudo dnf install flatpak (auf Fedora meist vorinstalliert) |
| Arch / CachyOS / Manjaro | sudo pacman -S flatpak |
| openSUSE | sudo zypper install flatpak |
Danach das Repository hinzufügen – einmal, systemweit:
sudo flatpak remote-add --if-not-exists flathub \
https://dl.flathub.org/repo/flathub.flatpakrepo
# Kontrolle
flatpak remotes
flatpak search shortwave
xdg-desktop-portal-gtk nachinstallieren, sonst erscheinen keine Auswahldialoge.
Die Befehle, die du brauchst
| Aufgabe | Befehl |
|---|---|
| Suchen | flatpak search shortwave |
| Installieren (systemweit) | flatpak install flathub com.rustdesk.RustDesk |
| Installieren (nur für dich) | flatpak install --user flathub de.haeckerfelix.Shortwave |
| Starten | flatpak run com.rustdesk.RustDesk – aus dem Startmenü normalerweise nicht nötig |
| Alles auflisten | flatpak list, nur Apps: flatpak list --app, nur Runtimes: flatpak list --runtime |
| Details zu einer App | flatpak info de.haeckerfelix.Shortwave (Version, Runtime, Rechte) |
| Alle Updates einspielen | flatpak update |
| Eine App aktualisieren | flatpak update de.haeckerfelix.Shortwave |
| Deinstallieren | flatpak uninstall com.rustdesk.RustDesk |
| Nicht mehr benötigte Runtimes entfernen | flatpak uninstall --unused |
| Zustand prüfen und reparieren | flatpak repair (user: flatpak repair --user) |
| Repos verwalten | flatpak remotes, flatpak remote-delete … |
| Portal-Rechte ansehen | flatpak permissions |
| Rechte überschreiben | flatpak override --user --filesystem=xdg-download <app-id> |
| Überschreibungen anzeigen / zurücksetzen | flatpak override --user --show <app-id> · flatpak override --user --reset <app-id> |
--user und --system lassen sich bei den meisten Befehlen kombinieren:
Ohne Angabe arbeitet Flatpak auf beiden Ebenen, sofern vorhanden.
Berechtigungen: was die Sandbox darf
Rechte stehen bei jeder App als Schlüssel-Wert-Paare. Manche sind Alternativen mit und ohne Gegenstück – so entsteht ein lesbares Modell:
| Recht | Bedeutung |
|---|---|
--socket=x11, --socket=wayland | Zugriff auf das Anzeigesystem – ohne das startet keine grafische App. |
--share=network | Netzwerkzugriff. Ohne dieses Recht ist die App offline – auch wenn sie es „will“. |
--filesystem=home | Zugriff auf das eigene Home. Standardmäßig nicht gesetzt. |
--filesystem=xdg-download | Nur der Downloads-Ordner – die feinere, bessere Wahl. |
--device=all | Zugriff auf Geräte wie Webcam, Mikrofon, USB – deutlich mehr als üblich. |
--talk-name=org.freedesktop.secrets | Darf mit dem Schlüsselbund-Dienst sprechen. |
--unshare=network | Netzwerk aktiv entziehen – etwa für einen Offline-Editor. |
Für den Alltag brauchst du die Kommandozeile selten: Die App Flatseal zeigt alle Rechte grafisch und erlaubt das Umschalten mit einem Klick – sie ist selbst ein Flatpak:
flatpak install flathub com.github.tchx84.Flatseal
# Alternativ auf der Kommandozeile: nur den Downloads-Ordner freigeben
flatpak override --user --filesystem=xdg-download de.haeckerfelix.Shortwave
# Und wieder alles zurücksetzen
flatpak override --user --reset de.haeckerfelix.Shortwave
Aufräumen, Reparieren, Speicher
Der häufigste Kritikpunkt an Flatpak ist der Speicherbedarf – und er ist meist selbstgemacht: Alte Runtimes bleiben liegen, wenn eine App aktualisiert wurde oder verschwunden ist.
# Was belegt wie viel?
du -sh ~/.local/share/flatpak /var/lib/flatpak 2>/dev/null
# Alte, nicht mehr benötigte Runtimes entfernen (der wichtigste Befehl)
flatpak uninstall --unused
# Nur anzeigen, was entfernt würde:
flatpak uninstall --unused --no-related
| Maßnahme | Wirkt gegen |
|---|---|
flatpak uninstall --unused | Verwaiste Runtimes: der mit Abstand größte Verbraucher |
flatpak repair | Inkonsistenten Zustand nach Absturz, Stromausfall oder abgebrochenem Update |
flatpak update --appstream | Veraltete Beschreibungen und Screenshots in der Softwareverwaltung – Aktualisierung ohne Systemeingriff |
flatpak list --runtime | Sichtprüfung: Welche Plattformen liegen in welcher Version herum? |
Automatische Updates per systemd-Timer
Flatpak hat einen entscheidenden Vorteil, den es zu nutzen gilt: Updates brauchen keine root-Rechte und funktionieren im Hintergrund. Gerade bei Browsern und Kommunikations-Apps ist ein täglicher Rhythmus Pflicht – Sicherheitsupdates sollten nicht bis zum nächsten manuellen Aufruf warten.
Das folgende Skript legt dazu einen systemd-User-Service samt Timer an. Du führst es also einmal aus; danach übernimmt systemd die Arbeit – ohne root, ohne Cron, ohne Passworteingabe.
#!/usr/bin/env bash
# Fehler sofort abbrechen
set -euo pipefail
echo "=================================================="
echo " Start: Automatisches Flatpak-Update-Setup (User)"
echo "=================================================="
# 1. Verzeichnis für User-Services erstellen
echo "[1/4] Erstelle Systemd-User Verzeichnis..."
mkdir -p "$HOME/.config/systemd/user"
# 2. Service-Datei erstellen (Inklusive Autoremove & Repair)
echo "[2/4] Erstelle flatpak-update.service..."
cat << 'EOF' > "$HOME/.config/systemd/user/flatpak-update.service"
[Unit]
Description=Update User Flatpak Apps Automatically
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
# Updates einspielen
ExecStart=/usr/bin/flatpak update --user --noninteractive --assumeyes
# Reste aufräumen (Löscht ungenutzte Runtimes)
ExecStartPost=/usr/bin/flatpak uninstall --user --unused --noninteractive --assumeyes
# Optional: Repariert eventuelle Inkonsistenzen im User-Store
ExecStartPost=-/usr/bin/flatpak repair --user
[Install]
WantedBy=default.target
EOF
# 3. Timer-Datei erstellen (Täglicher Takt statt monatlich)
echo "[3/4] Erstelle flatpak-update.timer..."
cat << 'EOF' > "$HOME/.config/systemd/user/flatpak-update.timer"
[Unit]
Description=Timer for Automatic User Flatpak Updates
[Timer]
# Jeden Tag ausführen (wichtig für Browser-Sicherheitsupdates)
OnCalendar=daily
# Falls der Laptop aus war, sofort nach dem Hochfahren nachholen
Persistent=true
# 15 Minuten zufällige Verzögerung, um das WLAN nach dem Start zu schonen
RandomizedDelaySec=15m
[Install]
WantedBy=timers.target
EOF
# 4. Systemd-User-Daemon neu laden und Timer aktivieren
echo "[4/4] Aktiviere und starte den Systemd-Timer..."
systemctl --user daemon-reload
systemctl --user enable --now flatpak-update.timer
echo "=================================================="
echo " FERTIG! Die Flatpak-Updates laufen nun automatisch."
echo "=================================================="
echo "Zum Testen der Installation kannst du jetzt ausführen:"
echo "systemctl --user start flatpak-update.service"
echo "=================================================="
Speichern als flatpak-update-setup.sh, ausführbar machen, einmal starten:
chmod +x flatpak-update-setup.sh
./flatpak-update-setup.sh
# Läuft der Timer?
systemctl --user list-timers flatpak-update.timer
# Sofort testen, ohne auf 00:00 Uhr zu warten
systemctl --user start flatpak-update.service
journalctl --user -u flatpak-update.service -n 40 --no-pager
Warum die Zeilen so gewählt sind – die interessanten Details:
| Zeile | Beweggrund |
|---|---|
set -euo pipefail | Bricht beim ersten Fehler ab, statt halbe Konfigurationen zu hinterlassen. |
cat << 'EOF' | Die einfachen Anführungszeichen verhindern, dass die Shell $-Variablen in den Unit-Dateien ersetzt – die Dateien kommen exakt so an, wie sie gedacht sind. |
Type=oneshot | Ein Dienst ohne Dauerprozess: starten, arbeiten, fertig. Richtig für Wartungsläufe. |
--user bei jedem Befehl | Es geht um dich als angemeldeter Benutzer – kein sudo, kein Fremdeingriff in /var/lib/flatpak. |
--noninteractive --assumeyes | Keine Rückfragen. Ohne diese beiden Optionen bleibt ein unbeaufsichtigter Lauf an einer Bestätigung hängen. |
ExecStartPost=- | Das Minus bedeutet: Fehler dieses Schritts ignorieren. Ein fehlgeschlagenes repair darf ein erfolgreiches Update nicht als Fehlschlag markieren. |
Persistent=true | Verpasste Läufe werden nachgeholt – genau das macht den Timer für Laptops brauchbar. |
RandomizedDelaySec=15m | Streut den Zeitpunkt. Sonst starten tausende Rechner gleichzeitig und belasten Netzwerk und Flathub. |
--user-Flags durch --system und lege die Units statt unter
~/.config/systemd/user/ unter /etc/systemd/system/ ab – dann sind sie ein
normaler Systemdienst mit root und laufen auch ohne angemeldete Sitzung. Und wer den Update-Zeitpunkt
steuern will, schreibt statt OnCalendar=daily etwa
OnCalendar=*-*-* 12:00 – am Mittag ist der Rechner meist eingeschaltet, um Mitternacht oft nicht.
User- oder Systeminstallation?
Diese Entscheidung ist wichtiger als sie aussieht – sie bestimmt, welche Updates greifen und wer die Rechte vergibt.
| Systeminstallation (Standard) | User-Installation (--user) | |
|---|---|---|
| Ablageort | /var/lib/flatpak | ~/.local/share/flatpak |
| Installation | Mit sudo oder über die Softwareverwaltung | Ohne root, direkt durch dich |
| Updates | Bequem zentral, brauchen aber root-Kontext | Laufen komplett ohne Rechteerhöhung – ideal für Timer |
| Sichtbarkeit | Für alle Benutzer der Maschine | Nur für dein Konto |
| Bekannte Falle | Updates müssen im richtigen Kontext laufen (System-Timer oder root) | Units und Apps laufen nur in deiner Sitzung |
sudo loginctl enable-linger deinbenutzer. Danach startet der User-Manager bereits beim Boot
und der Timer läuft unabhängig von einer Anmeldung.
Ein Hinweis zur After=network-online.target-Zeile im Skript: Sie ist der klassische Weg,
Updates erst nach vorhandener Netzwerkverbindung zu starten. Im User-Manager ist diese Unit
nicht in jeder Distribution vorhanden – systemd ignoriert unbekannte Abhängigkeiten dann, ohne zu
scheitern. Praktisch ist das dank Persistent=true und der 15-Minuten-Streuung unproblematisch;
wer es strenger mag, kombiniert den Timer zusätzlich mit OnBootSec=5min. In einem
Systemdienst (siehe Tipp oben) funktioniert die Zeile wie erwartet.
Zwei Apps aus Flathub
Beide folgenden Programme zeigen, warum Flatpak in der Praxis gewinnt: Sie sind aktuell, laufen unabhängig von der Distributionsversion und bringen nur die Rechte mit, die sie wirklich brauchen.
RustDesk – eigener Remote-Desktop
flatpak install flathub com.rustdesk.RustDesk
flatpak run com.rustdesk.RustDesk
RustDesk ist ein in Rust geschriebener Remote-Desktop und die Open-Source-Alternative zu TeamViewer und
AnyDesk – mit dem entscheidenden Unterschied, dass du die Vermittlungsserver
(hbbs/hbbr) selbst hosten kannst. Dann läuft kein Byte über
fremde Infrastruktur, und du behältst die vollständige Kontrolle über Adressbuch und Verbindungen. Die
Einrichtung dieser Server ist in einem eigenen Artikel ausführlich beschrieben – Flatpak ist hier nur
der Client.
- Stärke: Bildschirmübertragung und Steuerung ohne Cloud-Zwang, eigene ID-Server, plattformübergreifend (Linux, Windows, macOS, Android).
- Berechtigungen: braucht Netzwerk und Bildschirmzugriff. Unter Wayland läuft die Bildschirmfreigabe über das Portal und muss je Sitzung bestätigt werden – das ist kein Fehler, sondern die Sicherheitsregel.
- Für Dauerbetrieb beachten: Wenn der Rechner dauerhaft fernsteuerbar sein soll, prüfe nach dem ersten Start einmal die Freigabe und den Autostart. Die Paketversion aus der Distribution ist in solchen Fällen gelegentlich unkomplizierter als die Sandbox-Variante.
Shortwave – Internetradio für den Desktop
flatpak install flathub de.haeckerfelix.Shortwave
Shortwave ist ein Internetradio im GNOME-Look: durchsuchbar nach Genre, Land und Sprache, mit Favoritenliste, Aufnahmefunktion und sogar Musikerkennung über das Mikrofon. Die Senderliste kommt aus der offenen Datenbank radio-browser.info – also aus einer Gemeinschaftsquelle statt aus einem kommerziellen Verzeichnis. Keine Werbung, kein Werbe-Tracking, kein Konto.
- Stärke: riesige Senderauswahl mit brauchbarer Suche; Streams laufen direkt, ohne Browser-Tab.
- Berechtigungen: braucht Netzwerk (für die Sender) und Audio. Für Mitschneiden zusätzlich Schreibzugriff – am saubersten auf den Downloads-Ordner begrenzt, statt das ganze Home zu öffnen.
- Typischer Flatpak-Moment: Die erste Aufnahme schlägt fehl, weil die Sandbox den Zielordner nicht kennt. Lösung ist der
override-Befehl aus dem Berechtigungs-Abschnitt – oder der Klick in Flatseal.
Typische Stolperfallen
| Symptom | Ursache und Lösung |
|---|---|
| Die App sieht meine Dateien nicht | Sandbox. Erst nachdenken, dann gezielt freigeben: flatpak override --user --filesystem=xdg-download <app-id> – nicht gleich home. |
| Keine Datei-Auswahldialoge, App „hängt“ beim Speichern | Es fehlt ein Portal. Auf minimalen Desktops xdg-desktop-portal plus passendes Backend nachinstallieren (z. B. xdg-desktop-portal-gtk). |
flatpak: command not found | Nicht installiert – oder eine musl-Distribution (Alpine), auf der Flatpak praktisch kein Thema ist. Snap und AppImage sind dort die Alternativen. |
remote flathub not found | Flathub wurde nie hinzugefügt: sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo. |
| Einträge fehlen im Startmenü | Einmal ab- und wieder anmelden. Danach hilft flatpak update --appstream für aktuelle Namen und Icons. |
| Update bricht mit Zustandsfehlern ab | flatpak repair (bzw. --user) und danach erneut aktualisieren. |
| Theme passt nicht zu GNOME/KDE | Für ältere GTK-Themes werden Flatpak-Gegenstücke benötigt (z. B. org.gtk.Gtk3theme.…). Meist reicht es, beim Standard-Theme zu bleiben. |
| Plötzlich viele Gigabyte belegt | Alte Runtimes. flatpak uninstall --unused bringt regelmäßig mehrere hundert MB zurück. |
Häufige Fragen (FAQ)
| Frage | Antwort |
|---|---|
| Brauche ich Flatpak, wenn ich apt habe? | Für Server nein. Auf dem Desktop ist es die bequemste Lösung, wenn du aktuelle Anwendungen willst, ohne die Distribution zu wechseln – oder wenn eine App nur als Flatpak gepflegt wird. |
| Ist Flatpak sicherer als Pakete? | Es ist anders: Apps laufen isoliert mit expliziten Rechten. Das ist ein echter Gewinn – sofern du die Rechte auch prüfst. Ein Paket mit root-Installation hat per Definition mehr Freiheit. |
| Wo liegen meine Daten einer Flatpak-App? | Konfiguration und Daten der App liegen unter ~/.var/app/<app-id>/. Beim Umzug auf einen neuen Rechner ist das der Ordner, den man mitnimmt. |
| Kann ich Flatpak auf einem Server ohne Desktop nutzen? | Eingeschränkt. Es gibt Flatpaks mit Kommandozeilen-Werkzeugen, aber für Serverdienste sind Pakete und Container der richtige Weg – Sandbox und Portale setzen einen Desktop-Kontext voraus. |
| Wie oft sollte ich aktualisieren? | Für Browser und Messenger täglich bis wöchentlich – genau dafür ist der Timer gedacht. Für selten genutzte Apps reicht ein manuelles flatpak update alle paar Wochen. |
| Kann ich Updates komplett abschalten? | Ja, aber es ist die schlechteste Idee. Wenn du Kontrolle willst, nimm den täglichen Timer und behalte mit journalctl --user -u flatpak-update.service im Blick, was passiert. |
| Warum startet die App nicht, wenn ich sie mit sudo installiere? | Weil die App dann mit root-Kontext liegt und die Portale der Sitzung nicht erreicht. Auf dem Desktop ist nie sudo nötig – der entscheidende Vorteil von Flatpak. |
| Flatpak oder Snap – was ist besser? | Technisch ist Flatpak offener und desktop-neutral, mit mehr Distributionen im Rücken. Snap ist von Canonical kontrolliert, dafür auf Ubuntu reibungslos integriert. Beides gleichzeitig zu betreiben ist möglich, aber verwirrend. |
Fazit
Flatpak löst ein Problem, das jede stabile Distribution hat: aktuelle Anwendungen ohne Eingriff ins System – und mit weniger Rechten, als ein klassisches Paket je hätte. Der Preis sind Speicherplatz und ein neues Denkmodell bei den Berechtigungen.
Der zweite Teil ist die eigentliche Erkenntnis dieses Artikels: Wenn Updates ohne root laufen, kann eine kleine systemd-Einheit sie täglich erledigen. Ein Skript, einmal ausgeführt – und die Frage „hast du heute schon aktualisiert?“ stellt sich nie wieder.
flatpak uninstall --unused gehört zur Routine wie apt autoremove.
④ Updates ohne root sind der Grund, warum ein systemd-User-Timer hier so elegant passt.
⑤ Autostart-Apps wie RustDesk brauchen einen Blick auf Timer und Rechte – beides gehört dazu.