16
octobre
2024
12:03

À quoi sert le package xdg-desktop-portal et comment l'utiliser?

16 octobre 2024 12:03

Linux dispose de plusieurs environnements logiciels - natifs basés sur les services Linux SystemD et D-Bus, FlatPak et Snap tiers.

Tout le monde sait probablement que les systèmes de distribution d'applications FlatPak et Snap utilisent un mécanisme sandbox, dans lequel les applications s'exécutent dans un environnement sécurisé.

Pour que les programmes exécutés dans le bac à sable puissent accéder aux ressources informatiques, telles que le système de fichiers, la caméra, le serveur audio, un composant de « réponse » (backend) est utilisé entre Snap/Flatpak et le système d'exploitation. Ce composant est appelé « XDG Desktop Portal ». Depuis Documentation Flatpak:

"Les portails sont des cadres permettant d'accéder en toute sécurité aux ressources depuis l'extérieur du bac à sable. Ils fournissent aux applications un certain nombre de fonctions courantes, notamment : détecter l'état du réseau, ouvrir un fichier avec un sélecteur de fichiers, ouvrir des URI, prendre des captures d'écran et effectuer des captures d'écran [...]"

Les portails ont été conçus pour être utilisés avec des applications isolées via Flatpak, mais n'importe quelle application peut utiliser des portails pour fournir un accès unique aux fonctionnalités indépendamment des bureaux et des ensembles d'outils. Ceci est couramment utilisé, par exemple, pour permettre le partage d'écran dans Wayland via PipeWire, ou pour utiliser les boîtes de dialogue d'ouverture et d'enregistrement de fichiers de Firefox, qui utilisent le même ensemble d'outils que votre environnement de bureau actuel.

Quand le composant xdg-desktop-portal est-il nécessaire ?

  • Il est nécessaire lors de l'utilisation de flatpak et snap

Comment installer xdg-desktop-portal ?

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

Comment démarrer le service xdg-desktop-portal.service ?

Ce service démarre automatiquement dans l'environnement de l'utilisateur lors de l'accès aux interfaces qui interagissent avec le système d'exploitation. Si vous le souhaitez, il peut être lancé manuellement pour vérifier le fonctionnement (état, statut, erreurs), mais uniquement dans l'environnement de l'utilisateur actuel. Équipe:

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

Vérification de l'état du service :

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

Statut des services xdg-desktop-portal.service devrait être vert -"actif (en cours d'exécution)". Des avertissements tels que « Échec du chargement de la propriété RealtimeKit : GDBus.Error : org.freedesktop.DBus.Error.ServiceUnknown : Le nom org.freedesktop.RealtimeKit1 n'a été fourni par aucun fichier .service » et « Aucun squelette à exporter » n'affectent pas le fonctionnement du service xdg-desktop-portal.service ; nous ignorons ces messages.

Quel est le principe de fonctionnement de xdg-desktop-portal.service ?

Le composant communique avec le système et Flatpak/Snap en utilisant le protocole DBus.

Comment supprimer xdg-desktop-portal.service ?

Si l'interaction avec le système d'exploitation provient de packages Snap, Flatpak n'est pas requis. vous pouvez supprimer les packages spécifiés

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

  • xdg-desktop-portal - paquet principal.
  • xdg-desktop-portal-gtk - package d'extension par défaut pour la plupart des fonctions liées au système d'exploitation (lancement d'applications, sélection d'un fichier, impression, paramètres du système d'exploitation, porte-clés gnome, etc.)

Dans la documentation sur wiki.archlinux.org/title/XDG_Desktop_Portal on dit que chaque environnement de bureau possède ses propres packages. Par exemple:

  • Environnement Gnome -> paquet xdg-desktop-portal-gnome
  • Environnement KDE -> package xdg-desktop-portal-kde
  • Environnement LXQt -> package xdg-desktop-portal-lxqt

Comment garantir le fonctionnement de xdg-desktop-portal.service ?

Le composant xdg-desktop-portal nécessite des variables d'environnement
*XDG_RUNTIME_DIR

Vérifiez l'environnement de bureau actuel et les autres variables XDG :

env | grepXDG

Les fichiers de configuration xdg-desktop-portal se trouvent dans le dossier /usr/share/xdg-desktop-portal/. Ils ne devraient pas être modifiés.

De plus, le composant a besoin des noms de dossiers répertoriés dans le fichier :
~/.config/user-dirs.dirs

Exemple - affichage d'une liste de dossiers utilisateur :

cat ~/.config/user-dirs.dirs

Résultat :
#Ce fichier est écrit par xdg-user-dirs-update
#Si vous souhaitez modifier ou ajouter des répertoires, modifiez simplement la ligne que vous êtes
#intéressé. Toutes les modifications locales seront conservées lors de la prochaine exécution.
#Le format est XDG_xxx_DIR="$HOME/yyy", où yyy est un shell échappé
#chemin relatif au répertoire personnel, ou XDG_xxx_DIR="/yyy", où /yyy est un
#chemin absolu. Aucun autre format n'est pris en charge.
#
XDG_DESKTOP_DIR="$HOME/Bureau"
XDG_DOWNLOAD_DIR="$HOME/Téléchargements"
XDG_TEMPLATES_DIR="$HOME/Modèles"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Musique"
XDG_PICTURES_DIR="$HOME/Images"
XDG_VIDEOS_DIR="$HOME/Vidéo"

Ce fichier est créé lors de l'exécution de la commande

xdg-user-dirs-update

Les dossiers utilisateur dans le système d'exploitation sont nommés en tenant compte des paramètres de langue régionaux actuels dans le profil utilisateur. La localisation des paramètres de langue définit également les variables d'environnement, qui peuvent être visualisées à l'aide de la commande paramètres régionaux:

paramètres régionaux

Pour installer en russe :

sudo update-locale LANG=ru_RU.UTF-8

Si la langue russe est sélectionnée lors de l'installation du système d'exploitation, aucune configuration n'est requise.

Ajout à partir de 2026 :
Si FlatPak est installé, modifiez le fichier ~/.bashrc.
Par exemple, en utilisant l'éditeur de texte nano :

nano ~/.bashrc

A la fin de quoi ajouter la ligne :
export XDG_DATA_DIRS="/usr/local/share/:/usr/share/:/var/lib/flatpak/exports/share:/home/vladimir/.local/share/flatpak/exports/share"

Enregistrez le fichier et quittez nano :
Ctrl+S, Ctrl+X.

Comment s'assurer que le portail xdg-desktop fonctionne s'il ne démarre pas ?

En important une variable système dans l'environnement de l'utilisateur :

Sur la plupart des systèmes d'exploitation, cela suffit :

systemctl --user import-environment XDG_CURRENT_DESKTOP

À Wayland :

systemctl --user import-environment WAYLAND_DISPLAY  XDG_CURRENT_DESKTOP

Redémarrer et vérifier que le portail fonctionne :

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

Comment vérifier le service xdg-desktop-portal.service ?

1) Vous devez installer l'application FlatPak, y installer une autre application, par exemple le navigateur Chromium comme écrit dans l'article précédent.

2) Tout d'abord, vérifions que le navigateur est présent dans la liste des applications FlatPak installées.

flatpak list

3) lançons

flatpak run org.chromium.Chromium

4) Sélectionnez l'élément "Ouvrir le fichier" - en appuyant sur les touches Ctrl+O. Une boîte de dialogue système devrait apparaître, affichant le contenu de votre dossier personnel. Cela signifie que le portail fonctionne.

Débogage

dbus-monitor --session

et lancez l'application dans une autre fenêtre

flatpak run org.chromium.Chromium

Et en appuyant Ctrl+O:

Dans la fenêtre moniteur dbus beaucoup de texte sera affiché :
chaîne "org.freedesktop.impl.portal.Request"
temps d'erreur = 1729069549.930735 expéditeur =: 1,49 -> destination =: 1,46 error_name = org.freedesktop.DBus.Error.UnknownMethod réponse_serial = 163
chaîne "L'objet au chemin "/org/freedesktop/portal/desktop/request/1_88/handle_0 " n'existe pas"
temps d'appel de méthode=1729069549.931375 expéditeur=:1.46 -> destination=:1.49 série=164 chemin=/org/freedesktop/portal/desktop ; interface=org.freedesktop.impl.portal.FileChooser; membre = fichier ouvert
chemin de l'objet "/org/freedesktop/portal/desktop/request/1_88/handle_0"
chaîne "org.chromium.Chromium"
chaîne "x11:0x3a00019"
chaîne "Ouvrir le fichier"
tableau[
dict entry(
string "modal"
variant boolean true
)
dict entry(
string "filters"
variant array [
]
)
]

Commencez à afficher une URL ou un document en utilisant xdg-open

Au lieu de lancer l'application et d'ouvrir un document à partir de celle-ci, vous pouvez utiliser une simple commande xdg-ouvert "nom de fichier" ou URL.

Par exemple :

xdg-open https://bfm.ru

ou

xdg-open 388643rus.pdf

Fichier PDF à tester - "Message du Directeur général de l'UNESCO*Audrey Azoulay à l'occasion de la Journée mondiale de la radio le 13 février 2024 :388643rus.pdf

  • UNESCO – Nations Unies pour l'éducation, les sciences et la culture.

L'utilitaire xdg-open est inclus dans le package xdg-utils et est installé par défaut sous Linux. Les processus qu'il lance s'exécutent dans le conteneur Flatpak. Il y a aussi un forfait flatpak-xdg-utils, qui possède une version spéciale de xdg-open, et une application appelée flatpak-spawn, qui permet des actions sur le système en dehors du conteneur. Cette version spéciale xdg-ouvert installé d'une manière différente:/usr/libexec/flatpak-xdg-utils/ au lieu de /usr/bin/xdg-open. Installation du paquet flatpak-xdg-utils, en règle générale, n'est pas requis.

Pour gérer les droits (permissions) des applications conteneurs Flatpak, il existe une application graphique Flatseal (com.github.tchx84.Flatseal).

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

Joint plat permet de limiter les autorisations des applications, similaires aux paramètres Android « Applications et notifications » - « Autorisations des applications » :

Par exemple, les autorisations pour le navigateur Chromium de FlatPak :

  • Réseau - Oui
  • Communication interprocessus - Oui
  • Système de fenêtre X11 - Oui.
  • Serveur de son PulseAudio - Oui
  • Système d'impression - Oui
  • Accélération GPU (device=dri) - par défaut Non -> peut être modifié en Oui
  • Tous les appareils (webcam) - Oui
  • Tous les fichiers utilisateur (filesystem=home) - Oui
  • Arrière-plan (peut fonctionner en arrière-plan) - Non
  • Notifications (peut envoyer des notifications) - Non

Liens vers les documents :

Intégration du bureau Flatpak
Portail de bureau XDG
*flatpak-xdg-utils



Publications connexes