Gestion de volumes avec udisks

De ArchwikiFR


Utiliser les périphériques de stockage, c'est un besoin légitime et on s'attendrait à ce que ça fonctionne tout seul, sauf que, sur Arch Linux, c'est l'utilisateur qui configure. Et selon la solution choisie, une pièce peut faire échouer l'ensemble.

Cette page tente de récapituler les éléments nécessaires pour monter les périphériques en tant qu'utilisateur, et de donner des pistes de vérification afin de comprendre ce qui éventuellement ne fonctionne pas.

En schématisant, une demande pour monter/démonter le contenu d'un périphérique suit ce cheminement :

Gestionnaire de fichier -> dbus -> udisks -> dbus -> polkit -> dbus -> logind -->--\
 \-----------------------------<----/  \--------<-----/  \-------------<-----------/

Environnement

L'environnement de bureau ou le script de session du gestionnaire de fenêtres participe au bon fonctionnement de l'ensemble.

Selon le cas, il démarre ou non une session D-Bus et si c'est le cas, vous pouvez vous retrouver avec plusieurs services dbus en cours, voir la partie traitant de D-Bus pour vérifier.

Gestionnaire de fichiers

Le gestionnaire de fichiers choisi doit être compatible avec udisks, quelques exemples :

Dans le cas où les partitions n'apparaissent pas, essayez en lançant le logiciel avec :

dbus-launch exécutable_du_logiciel

Si elles apparaissent, référez-vous à la partie D-Bus.

Dans le cas où elles apparaissent mais ne se montent pas, en retournant un message similaire à :

Mount failed: Not Authorized

Référez-vous à la partie polkit et logind.

udisks

Note : udisks existe en 2 versions udisks et udisks2, les 2 sont disponibles car certains programmes dépendent encore du premier. Les lignes de commande et les permissions sont différentes, les 2 sont présentées ici.

udisks est en première ligne car c'est finalement le programme qui monte (ou pas) le contenu du périphérique. Il n'a pas besoin de traitement spécifique, il suffit qu'il soit installé.

De plus, udisks peut être utilisé en ligne de commande afin d'isoler un éventuel problème (ou juste pour l'utiliser !) :

$ udisksctl mount -b /dev/sda1
Error mounting /dev/sda1: GDBus.Error:org.freedesktop.UDisks2.Error.NotAuthorizedDismissed: The authentication dialog was dismissed
Note : Pour udisks 1 :
$ udisks --mount /dev/sda1
Mount failed: Not Authorized

L'exemple précédent cible une partition interne. Par défaut, cette action demande le mot de passe admin selon polkit.

$ udisksctl mount -b /dev/sdb1
Mounted /dev/sdb1 at /media/28DC-1CAE
udisksctl unmount -b /dev/sdb1
Note : Pour udisks 1 :
$ udisks --mount /dev/sdb1
Mounted /org/freedesktop/UDisks/devices/sdb1 at /media/28DC-1CAE
udisks --unmount /dev/sdb1

D-Bus

Le daemon D-Bus est l'élément central, c'est ce qui permet à tout le monde de communiquer. Il est automatiquement démarré lorsque vous utilisez systemd.

Pour la session graphique, cela dépend si on utilise un gestionnaire de connexions et si oui, lequel.

On peut vérifier si dbus est bien lancé en lançant :

$ ps -o user,cmd -C dbus-daemon
USER     CMD
dbus     /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
tuxce    /usr/bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session

Vous devriez avoir au minimum un service lancé par l'utilisateur dbus et un autre lancé par votre utilisateur.

Dans le cas où il n'y a pas de service lancé par l'utilisateur, modifiez la façon dont vous démarrez votre session, par exemple depuis ~/.xinitrc :

exec dbus-launch votre_environnement

logind

logind est un service donnant entre autre des informations sur votre session. Il s'utilise de manière transparente (les sessions utilisateurs sont suivis par le biais de pam).

Idéalement, une fois dans votre session, vous devriez avoir :

$ loginctl session-status $XDG_SESSION_ID | egrep '(Seat|State):'
	    Seat: seat0; vc1
	   State: active

polkit

Avec polkit, on rentre dans le vif du sujet, les droits d'utilisations. Pour les systèmes de fichiers, les droits sont définis par action, et en ce qui nous concerne, les actions sont les suivantes :

$ pkaction | grep "udisks.*filesystem.*mount"
org.freedesktop.udisks2.filesystem-mount
org.freedesktop.udisks2.filesystem-mount-other-seat
org.freedesktop.udisks2.filesystem-mount-system
org.freedesktop.udisks2.filesystem-unmount-others
  • org.freedesktop.udisks2.filesystem-mount est générale.
  • org.freedesktop.udisks2.filesystem-mount-other-seat permet de monter un système branché sur un autre ensemble matériel.
  • org.freedesktop.udisks2.filesystem-mount-system spécifie des permissions pour les partitions avec le drapeau system et qui correspondent généralement aux partitions internes. (correspond à org.freedesktop.udisks.filesystem-mount-system-internal pour udisks)
  • org.freedesktop.udisks2.filesystem-unmount-others permet ou non de démonter une partition montée par un autre utilisateur.

Vous pouvez avoir plus de précisions sur les actions ainsi que les permissions par défaut en lançant :

pkaction | grep "udisks.*filesystem.*mount" | xargs -n 1 pkaction --verbose --action-id

polkit est requis par udisks et n'a pas besoin de configuration (si les permissions par défaut vous semblent satisfaisantes). Néanmoins, il peut être nécessaire d'installer une interface pour s'authentifier si l'action le demande (en retournant par exemple Not Authorized) et que votre environnement n'en possède pas. Les interfaces disponibles dépendent de l'environnement : polkit-gnome ou polkit-kde.

Note : polkit-gnome ne dépend pas de gnome mais seulement de GTK.

Il faut que l'agent d'authentification soit lancé pour afficher l'interface de demande de mot de passe :

$ ps -p $(pgrep -d, -f "polkit.*auth") -o user,cmd
USER     CMD
tuxce    /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
Note : gnome-shell fournit son propre agent d'authentification, la commande précédente retournera donc une erreur, il n'y a pas de processus lancé à part.

Il devrait se lancer au démarrage de votre session si votre environnement est compatible XDG, sinon, il vous faut rajouter par exemple pour polkit-gnome :

/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1

Dans le fichier / dossier d' autostart de votre environnement.

La page de polkit propose un exemple pour modifier les autorisations d'une action : Montage d'une partition interne.