16
Oktober
2024
12:03

Wozu dient das xdg-desktop-portal-Paket und wie wird es verwendet?

16 Oktober 2024 12:03

Linux verfügt über mehrere Softwareumgebungen – nativ basierend auf den SystemD- und D-Bus-Diensten von Linux, FlatPak und Snap von Drittanbietern.

Wahrscheinlich weiß jeder, dass die Anwendungsverteilungssysteme FlatPak und Snap einen Sandbox-Mechanismus verwenden, bei dem Anwendungen in einer sicheren Umgebung ausgeführt werden.

Damit in der Sandbox laufende Programme auf Computerressourcen wie Dateisystem, Kamera, Soundserver zugreifen können, wird zwischen Snap/Flatpak und dem Betriebssystem eine „Response“-Komponente (Backend) eingesetzt. Diese Komponente heißt „XDG Desktop Portal“. Aus Flatpak-Dokumentation:

"Portale sind Frameworks für den sicheren Zugriff auf Ressourcen von außerhalb der Sandbox. Sie stellen Anwendungen eine Reihe allgemeiner Funktionen zur Verfügung, darunter: Erkennen des Netzwerkstatus, Öffnen einer Datei mit einer Dateiauswahl, Öffnen von URIs, Erstellen von Screenshots und Durchführen von Screencasts [...]"

Portale wurden für die Verwendung mit über Flatpak isolierten Anwendungen entwickelt, aber jede Anwendung kann Portale verwenden, um unabhängig von Desktops und Toolsets einen einzelnen Zugriff auf Funktionen bereitzustellen. Dies wird beispielsweise häufig verwendet, um die Bildschirmfreigabe in Wayland über PipeWire zu ermöglichen oder um die Firefox-Dialoge zum Öffnen und Speichern von Dateien zu verwenden, die dieselben Tools wie Ihre aktuelle Desktop-Umgebung verwenden.

Wann wird die xdg-desktop-portal-Komponente benötigt?

  • Wird bei der Verwendung von Flatpak und Snap benötigt

Wie installiere ich xdg-desktop-portal?

sudo apt update
sudo apt install xdg-desktop-portal xdg-desktop-portal-gtk

Wie starte ich den Dienst xdg-desktop-portal.service?

Dieser Dienst startet automatisch in der Benutzerumgebung, wenn auf Schnittstellen zugegriffen wird, die mit dem Betriebssystem interagieren. Auf Wunsch kann es manuell gestartet werden, um den Vorgang (Status, Status, Fehler) zu überprüfen, jedoch nur in der Umgebung des aktuellen Benutzers. Befehle:

systemctl --user startet xdg-desktop-portal.service

Servicestatus prüfen:

systemctl --user status xdg-desktop-portal.service

Servicestatus xdg-desktop-portal.service sollte grün sein -„aktiv (laufend)“. Warnungen wie „Laden der RealtimeKit-Eigenschaft fehlgeschlagen: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: Der Name org.freedesktop.RealtimeKit1 wurde von keiner .service-Datei bereitgestellt“ und „Kein Skelett zum Exportieren“ haben keinen Einfluss auf den Betrieb des xdg-desktop-portal.service-Dienstes; Wir ignorieren diese Nachrichten.

Was ist das Funktionsprinzip von xdg-desktop-portal.service?

Die Komponente kommuniziert mit dem System und Flatpak/Snap über das DBus-Protokoll.

Wie entferne ich xdg-desktop-portal.service?

Wenn die Interaktion mit dem Betriebssystem über Snap-Pakete erfolgt, ist Flatpak nicht erforderlich. Sie können die angegebenen Pakete entfernen

sudo apt purge xdg-desktop-portal xdg-desktop-portal-gtk

Wo

  • xdg-desktop-portal – Hauptpaket.
  • xdg-desktop-portal-gtk – Standarderweiterungspaket für die meisten Betriebssystemfunktionen (Starten von Anwendungen, Auswählen einer Datei, Drucken, Betriebssystemeinstellungen, Gnome-Schlüsselbund usw.)

In der Dokumentation zu wiki.archlinux.org/title/XDG_Desktop_Portal es wird gesagt, dass jede Desktop-Umgebung ihre eigenen Pakete hat. Zum Beispiel:

  • Gnome-Umgebung -> xdg-desktop-portal-gnome-Paket
  • KDE-Umgebung -> Paket xdg-desktop-portal-kde
  • LXQt-Umgebung -> Paket xdg-desktop-portal-lxqt

Wie kann sichergestellt werden, dass xdg-desktop-portal.service funktioniert?

Die xdg-desktop-portal-Komponente benötigt Umgebungsvariablen

  • XDG_RUNTIME_DIR
  • XDG_CONFIG_HOME
  • XDG_DATA_DIRS
  • und andere, siehe XDG-Beschreibung.

Überprüfen Sie die aktuelle Desktop-Umgebung und andere XDG-Variablen:

env | grep XDG

Die xdg-desktop-portal-Konfigurationsdateien befinden sich im Ordner /usr/share/xdg-desktop-portal/. Sie sollten nicht geändert werden.

Außerdem benötigt die Komponente die in der Datei aufgeführten Ordnernamen:
~/.config/user-dirs.dirs

Beispiel – Anzeigen einer Liste von Benutzerordnern:

cat ~/.config/user-dirs.dirs

Ergebnis:
#Diese Datei wird von xdg-user-dirs-update geschrieben
#Wenn Sie Verzeichnisse ändern oder hinzufügen möchten, bearbeiten Sie einfach die Zeile, in der Sie sich befinden
#interessiert. Alle lokalen Änderungen bleiben beim nächsten Durchlauf erhalten.
#Das Format ist XDG_xxx_DIR="$HOME/yyy", wobei yyy ein Shell-Escapezeichen ist
#homedir-relativer Pfad oder XDG_xxx_DIR="/yyy", wobei /yyy ein ist
#absoluter Weg. Es wird kein anderes Format unterstützt.
#
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Dokumente"
XDG_MUSIC_DIR="$HOME/Musik"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Video"

Diese Datei wird erstellt, wenn der Befehl ausgeführt wird

xdg-user-dirs-update

Benutzerordner im Betriebssystem werden unter Berücksichtigung der aktuellen regionalen Spracheinstellungen im Benutzerprofil benannt. Die Lokalisierung der Spracheinstellungen definiert auch Umgebungsvariablen, die mit dem Befehl angezeigt werden können Gebietsschema:

Gebietsschema

Zur Installation auf Russisch:

sudo update-locale LANG=ru_RU.UTF-8

Wenn bei der Installation des Betriebssystems die russische Sprache ausgewählt wird, ist keine Konfiguration erforderlich.

Ergänzung ab 2026:
Wenn FlatPak installiert ist, bearbeiten Sie die Datei ~/.bashrc.
Zum Beispiel mit dem Nano-Texteditor:

nano ~/.bashrc

Fügen Sie am Ende die Zeile hinzu:
export

Speichern Sie die Datei und beenden Sie Nano:
Strg+S, Strg+X.

Wie kann sichergestellt werden, dass das xdg-desktop-portal funktioniert, wenn es nicht startet?

Durch Importieren einer Systemvariablen in die Umgebung des Benutzers:

Auf den meisten Betriebssystemen reicht dies aus:

systemctl --user import-environment XDG_CURRENT_DESKTOP

In Wayland:

systemctl --user import-environment WAYLAND_DISPLAY  XDG_CURRENT_DESKTOP

Neustart und Überprüfung, ob das Portal funktioniert:

systemctl --user start xdg-desktop-portal.service
systemctl --user status xdg-desktop-portal.service

Wie überprüfe ich den Dienst xdg-desktop-portal.service?

1) Sie müssen die FlatPak-Anwendung installieren und darin eine andere Anwendung installieren, zum Beispiel den Chromium-Browser wie beschrieben im vorherigen Artikel.

2) Überprüfen wir zunächst, ob der Browser in der Liste der installierten FlatPak-Anwendungen vorhanden ist.

flatpak list

3) Lasst uns starten

flatpak run org.chromium.Chromium

4) Wählen Sie den Punkt „Datei öffnen“ – durch Drücken der Tasten Strg+O. Es sollte ein Systemdialogfeld erscheinen, das den Inhalt Ihres Home-Ordners anzeigt. Das bedeutet, dass das Portal funktioniert.

Debuggen

dbus-monitor --session

und starten Sie die Anwendung in einem anderen Fenster

flatpak run org.chromium.Chromium

Und drängend Strg+O:

Im Fenster dbus-monitor es wird viel Text ausgegeben:
string „org.freedesktop.impl.portal.Request“
Fehlerzeit = 1729069549.930735 Absender =: 1,49 -> Ziel =: 1,46 Fehlername = org.freedesktop.DBus.Error.UnknownMethod Antwort_serial = 163
string „Das Objekt im Pfad „/org/freedesktop/portal/desktop/request/1_88/handle_0“ existiert nicht“
Methodenaufrufzeit=1729069549.931375 sender=:1.46 -> Ziel=:1.49 serial=164 path=/org/freedesktop/portal/desktop; interface=org.freedesktop.impl.portal.FileChooser; member=OpenFile
Objektpfad „/org/freedesktop/portal/desktop/request/1_88/handle_0“
Zeichenfolge „org.chromium.Chromium“
Zeichenfolge „x11:0x3a00019“
Zeichenfolge „Datei öffnen“
Array[
dict entry(
string "modal"
variant boolean true
)
dict entry(
string "filters"
variant array [
]
)
]

Beginnen Sie mit der Anzeige einer URL oder eines Dokuments mit xdg-open

Anstatt die Anwendung zu starten und daraus ein Dokument zu öffnen, können Sie einen einfachen Befehl verwenden xdg-open „Dateiname“ oder URL.

Zum Beispiel:

xdg-open https://bfm.ru

oder

xdg-open 388643rus.pdf

PDF-Datei zum Testen – „Nachricht des Generaldirektors der UNESCO*Audrey Azoulay anlässlich des Weltradiotags 13. Februar 2024“:388643rus.pdf

  • UNESCO – Vereinte Nationen für Bildung, Wissenschaft und Kultur.

Das Dienstprogramm xdg-open ist im xdg-utils-Paket enthalten und wird unter Linux standardmäßig installiert. Die von ihm gestarteten Prozesse werden im Flatpak-Container ausgeführt. Es gibt auch ein Paket flatpak-xdg-utils, das über eine spezielle Version von xdg-open verfügt, und eine Anwendung namens flatpak-spawn, die Aktionen auf dem System außerhalb des Containers ermöglicht. Diese Sonderversion xdg-open mal anders installiert:/usr/libexec/flatpak-xdg-utils/ statt /usr/bin/xdg-open. Installieren des Pakets flatpak-xdg-utils ist in der Regel nicht erforderlich.

Um die Rechte (Berechtigungen) von Flatpak-Containeranwendungen zu verwalten, gibt es die grafische Anwendung Flatseal (com.github.tchx84.Flatseal).

sudo flatpak install com.github.tchx84.Flatseal
flatpak run com.github.tchx84.Flatseal

FlatSeal ermöglicht es Ihnen, Anwendungsberechtigungen einzuschränken, ähnlich wie in den Android-Einstellungen „Anwendungen und Benachrichtigungen“ – „Anwendungsberechtigungen“:

Zum Beispiel Berechtigungen für den Chromium-Browser von FlatPak:

  • Netzwerk – Ja
  • Interprozesskommunikation – Ja
  • X11-Fenstersystem – Ja.
  • PulseAudio-Soundserver – Ja
  • Drucksystem - Ja
  • GPU-Beschleunigung (Gerät=dri) – Standardeinstellung Nein -> kann in Ja geändert werden
  • Alle Geräte (Webcam) – Ja
  • Alle Benutzerdateien (Dateisystem=Home) – Ja
  • Hintergrund (kann im Hintergrund arbeiten) – Nein
  • Benachrichtigungen (kann Benachrichtigungen senden) – Nein

Dokumentationslinks:

Flatpak-Desktop-Integration
XDG-Desktop-Portal
*flatpak-xdg-utils



Verwandte Veröffentlichungen