Comment fonctionne le montage sur l'interface graphique «sous le capot»

12

MISE À JOUR

Veuillez me corriger si je me trompe : pour travailler sur mon ordinateur, avec une distribution GNU / Linux nommée Debian, je connais deux façons d'entrer une commande, de démarrer une application, d'ouvrir un fichier, etc.:

  • une interface de ligne de commande où j'entre du texte
  • une interface utilisateur graphique [aka GUI ]: une interface qui fournit des "fenêtres", des symboles, etc.

Il y a quelque chose qui s'appelle "Window Manager". Comme j'utilise GNU / Linux, je travaille sur le système X-Window [pour autant que je sache].

entrez la description de l'image ici


Publication d'origine


Situation : J'ai désactivé le montage automatique /etc/fstabpour les clés USB [par exemple /dev/sdb1]. Le montage doit être root, ou au moins une sudoentrée sur la ligne de commande mais pas dans un gestionnaire de fenêtres (!) . Je ne veux pas dire automount, je veux dire "cliquer sur le symbole" dans un gestionnaire de fenêtres ouvre l'appareil sur l'interface graphique sans aucune question, où sur la CLI, il faut être root.

Question : Comment fonctionne le montage dans une interface graphique "sous le capot"? Existe-t-il un configfichier pour les gestionnaires de fenêtres en général ou faut-il le définir individuellement?

Je comprends et utilise la mountcommande, je pense que pour comprendre comment lire et configurer /etc/fstabet savoir où chercher ce que les entrées là-bas et en /etc/mtabmoyenne.

erch
la source
1
aussi, les gestionnaires de fenêtres AFAIK ne sont pas responsables de cela; l'important est l'environnement de bureau (en partie) qui s'exécute en dessous. par exemple, j'utilise Awesome GNOME - GNOME utilisant Awesome au lieu du GNOME Shell - et les disques sont montés automatiquement. mais ils ne le feraient pas si j'utilisais simplement Awesome. Honnêtement, je ne comprends pas vraiment votre générosité - la réponse de @ slm semble assez claire.
strugee
2
Au tout début, c'était le monteur automatique qui faisait ces tours en arrière-plan (avec à peu près la même commande de montage que vous utiliseriez sur le root-cli). Maintenant, il existe des sous-processus propres qui s'intègrent à l'interface graphique qui font le travail. Voir la réponse de slm.
Nils
5
"J'ai du mal à croire que chacun des [différents gestionnaires de fenêtres] devrait chercher sa propre solution." -> Ce n'est jamais le gestionnaire de fenêtres (WM) qui fait ça. C'est l' environnement de bureau (DE). Quant à chacun d'entre eux devant le faire eux-mêmes, eh bien, ils font tous beaucoup d'autres choses pour eux aussi. Par choix . Mais ils n'ont pas à le faire. GNOME, par exemple, a une licence GPL, donc tout autre DE GPL pourrait simplement utiliser des parties GNOME, s'il le souhaite.
goldilocks
2
@goldilocks, comme par exemple Cinnamon et MATE.
strugee
2
@strugee: GNOME a une relation historique étroite avec GTK (qui était à l'origine pour GIMP), et les bibliothèques de support de niveau inférieur ( glib ) que GNU maintient également et je crois proliférées à partir de GNOME et GTK. Je suppose que presque tout le monde fait du glib, il fournit beaucoup de choses fondamentales pour une interface graphique multitâche, pilotée par les événements "sous le capot" (juste: pas les parties graphiques réelles). Je pense que GNOME est fondamentalement glib + gtk + un gestionnaire de windom + certaines applications.
goldilocks

Réponses:

5

C'est ma compréhension de la situation, mais je ne suis pas un expert, donc c'est moins technique que les autres réponses. C'est ce que je comprends après avoir utilisé ces systèmes pendant de nombreuses années, je ne les ai pas étudiés en détail.

Il y a trois acteurs principaux ici et entre eux, ils gèrent les montures:

  • FUSIBLE: C'est au centre de tout, comme décrit dans sa page wikipedia :

    Le système de fichiers dans l'espace utilisateur (FUSE) est un mécanisme de système d'exploitation pour les systèmes d'exploitation informatiques de type Unix qui permet aux utilisateurs non privilégiés de créer leurs propres systèmes de fichiers sans modifier le code du noyau. Ceci est réalisé en exécutant le code du système de fichiers dans l'espace utilisateur tandis que le module FUSE ne fournit qu'un «pont» vers les interfaces du noyau réelles.

    Donc, fondamentalement, c'est ce qui permet aux utilisateurs non privilégiés de monter des systèmes de fichiers.

  • gvfs: Dans la famille des environnements de bureau Gnome (qui comprend Gnome, Mate, Cinnamon), il s'agit (entre autres) d'un démon qui montera automatiquement les disques nouvellement connectés. Il le fait via FUSE. Je crois (mais peut-être tort) que l'équivalent pour la famille KDE s'appelle KIO

    Les principaux processus de gvfssont (tirés de man gvfs):

    • gvfsd - le démon gvfs principal
    • gvfs-fuse-daemon - monte gvfs comme un système de fichiers fusible
    • gvfsd-metadata - écrit les métadonnées gvfs
  • udev: Il s'agit d'un système qui détecte les nouveaux appareils et vous permet d'exécuter des scripts / commandes lorsqu'ils sont connectés. Par exemple, il udevdétecte un nouvel écran et peut refléter votre bureau dessus:

    udev est un gestionnaire de périphériques pour le noyau Linux. Il gère principalement les nœuds de périphériques dans / dev. Il est le successeur de devfs et hotplug, ce qui signifie qu'il gère le répertoire / dev et toutes les actions de l'espace utilisateur lors de l'ajout / la suppression de périphériques, y compris la charge du firmware.

    Plus précisément, il gvfssemble fonctionner grâce à gvfs-udisks2-volume-monitorun moniteur de volume basé sur les udisks. udiskslui-même s'appuie cependant sur udev(voir man 7 udisks).

Donc, fondamentalement (lire "horrible simplification"), ce qui se passe, c'est que lorsque vous connectez votre disque, le udevdétecte et alerte le gvfsdémon qui le montera ensuite comme un périphérique FUSE.

FUSE et udevsera le même pour tous les environnements de bureau, ce qui change, c'est le démon DE qui surveille udevet monte le disque en tant que système de fichiers FUSE.

terdon
la source
1
Mettez D-bus comblant les écarts entre udev, gvfs et tout le reste.
Braiam
Vous pouvez mettre à jour les informations sur gvfs. Ils déménagent à GIO.
Braiam
8

Cela dépend de votre environnement fenêtrage (GNOME / KDE / etc.) , Mais dans GNOME, par exemple, vous verrez daemons en cours d' exécution appelé, gvfs-*-volume-monitor. Ces démons sont responsables du montage des périphériques lors de l'exécution de l'environnement de bureau, ils n'ont rien à voir avec /etc/fstabet fonctionnent de manière complètement indépendante.

En ce qui concerne un fichier de configuration, il y a des fichiers qui sont liés à ce que vivent dans le répertoire de l'utilisateur qui exécute le DE, $HOME/.local/share/gvfs-metadata.

Ce Q&R U&L intitulé: Qu'est-ce que gvfs et pourquoi devrais-je le vouloir sur mon système? , tente d'expliquer ce qu'est GVFS. Il fait un travail correct de l'expliquer. Mais je pense que ce que vous demandez vraiment est abordé davantage par cette Q&R U&L intitulée: Montage automatique des disques USB (Comment cela fonctionne) .

slm
la source
La réponse semble être dans le HAL… J'ai trouvé quelques solutions pour thunar[que j'utilise] etc. L'article a indiqué une direction - merci pour cela! - mais je cherche toujours un dénominateur commun…
erch
IIRC the DE n'a pas besoin de root car il utilise FUSE (Filesystem in User Space).
strugee
@strugee devinant que DE signifie environnement de bureau, je devrais regarder dans FUSE. Avez-vous un indice, où?
erch
@chirp recherchez FUSE sur Wikipedia: en.wikipedia.org/wiki/FUSE est-ce, IIRC. et slm a déjà répondu. la réponse est que l'environnement de bureau, et non le gestionnaire de fenêtres, effectue le montage automatique.
strugee
2
@chirp - Voir ici: bbs.archlinux.org/viewtopic.php?id=95509 . HAL est obsolète, en.wikipedia.org/wiki/HAL_(software) . UDEV est le remplaçant à l'avenir: en.wikipedia.org/wiki/Udev
slm
8

La réponse simple est qu'ils trichent. Ils n'utilisent pas le fstab. Ils utilisent généralement un udevcrochet pour intercepter les événements d'insertion, montent le disque manuellement en tant que root, qui peut être transmis à dbuspour informer votre gestionnaire de fichiers que vous avez un nouveau disque ou ils peuvent utiliser des suidutilitaires plutôt que dbuspour le démontage. Malheureusement, il n'y a pas d'options de configuration standard pour cela, et puisque le mouvement des ordinateurs de bureau croit en la complexité cachée, ils ne le documentent pas dans la documentation utilisateur, uniquement dans la documentation du développeur, et ils supposent un système mono-utilisateur donc les clés USB ne fonctionnent que pour le premier utilisateur à se connecter à un serveur X.

hildred
la source
OUI! C'est plus ce que je recherche. En tant que newb, je voudrais demander par où commencer, erm: "Où dois-je commencer" pour retracer ce comportement [n'importe quel indice m'aiderait à me détourner; un point de départ aiderait énormément]
erch
2
@chirp pour commencer à explorer regardez udev (7) et /etc/udev/rules.d/*
hildred
5

PolicyKit (ou Polkit) est une boîte à outils au niveau de l'application pour définir et gérer la politique qui permet aux processus non privilégiés de parler aux processus privilégiés .

C'est un cadre pour centraliser le processus de prise de décision en ce qui concerne l'octroi de l'accès à des opérations privilégiées (comme appeler la méthode Mount ()) pour des applications (de bureau) non privilégiées.

Un agent d'authentification est utilisé pour faire en sorte que l'utilisateur d'une session prouve que l'utilisateur de la session est réellement l'utilisateur (en s'authentifiant en tant qu'utilisateur) ou un utilisateur administratif (en s'authentifiant en tant qu'administrateur).

GVFS est un système de fichiers virtuel qui permet de monter des systèmes de fichiers locaux et distants en tant qu'utilisateur avec le support de la corbeille. Il existe également une prise en charge FUSE qui permet aux applications n'utilisant pas GIO d'accéder aux systèmes de fichiers GVFS, mais la plupart des DE font également l'authentification via Policykit pour d'autres choses, comme l'hibernation et l'arrêt de l'ordinateur, et pour le NetworkManager, de sorte qu'ils n'ont pas besoin de utilisez FUSE.

Il se compose de deux parties:

  1. Une bibliothèque partagée qui est chargée par des applications prenant en charge GIO;
  2. GVFS lui-même, qui contient une collection de démons qui communiquent entre eux et avec le module GIO via D-Bus.

Le paquet gvfs doit être installé, ainsi que polkit-gnome pour les règles polkit. Assurez-vous qu'un agent d'authentification graphique est installé et démarre automatiquement.

Les fichiers de configuration pour la gestion des privilèges doivent être différents pour chaque distribution. Le Arch Wiki vous dit de créer un fichier sous /usr/share/polkit-1/rules.d/. Dans Debian, ils se trouvent dans /etc/polkit-1/.

Sources: Policykit sur Debian || Polkit sur Arch Wiki || GVFS sur Arch Wiki || GVFS sur GNOME Wiki!

Teresa e Junior
la source
Êtes-vous sûr que GIO signifie GObject Introspection? J'aurais pensé que ça s'appellerait GOI si c'était le cas. Les Gnomes semblent l'appeler GI . Je n'ai pas trouvé d'autre explication du nom de GIO mais il ne semble pas être le même que GI.
terdon
@terdon C'était en fait un montage de strugee (révision 10 sur unix.stackexchange.com/posts/101951/revisions ). Le retirer ...
Teresa e Junior
4

Un élément commun que vous recherchez est FUSE , les gvfs de GNOME, par exemple, les utilisent sous le capot. 1 Il s'agit de l'interface avec le noyau, et je pense qu'elle est commune à tous les systèmes de montage (auto) non privilégiés sur Linux [mais voir les commentaires]. Les DE individuels ne créeraient pas leur propre version car cela nécessiterait une correction du noyau.

Ce lien vers la page d'accueil est en fait obsolète, car comme indiqué ici , FUSE est devenu une partie du noyau officiel il y a quelques années, mais il décrit les origines et les objectifs du projet (ce n'est pas seulement pour un montage non privilégié).

La raison pour laquelle divers systèmes peuvent différer de style au-delà de cela est la même raison pour laquelle vous avez différents environnements de bureau: ils représentent différentes visions de la façon / de ce que devrait être l'interface graphique. Ils s'occupent de la forme et de la fonction de l'interface utilisateur, mais FUSE s'occupe du montage et du niveau du noyau. Notez que FUSE ne fait pas vraiment la partie « auto », il est plus sur la partie « non privilégiés », mais la partie automatique est assez simple: tout ce que vous avez à faire est sondage, par exemple /dev. J'ai écrit une application de montage qui fonctionne de cette façon; il surveille simplement l'apparition de nouveaux nœuds. 2 Cette partie est peut-être une centaine de lignes de C ++. Easy-peasy - pas vraiment besoin d'une API commune à ce niveau.

1 Ou peut, si elle fait un montage vraiment sans privilège. La réponse de Teresa peut couvrir de nouvelles approches pour permettre l'accès aux montures normales.

2 Comme l'observe hildred, les rappels udev seraient une meilleure méthode, moins de piratage.

boucle d'or
la source
Je suppose que vous vouliez dire "page d'accueil" et je supprimerai ce commentaire après la disparition de la faute de frappe;) Excellente réponse, comme toujours, d'ailleurs!
erch
1
Comme nos réponses semblent se contredire, j'ai fait quelques tests. Au moins dans Debian, sans agent Polkit actif, l'utilisateur ne peut pas monter. De plus, le module fuse.ko n'est pas chargé même après mon montage. (J'utilise Thunar sur Wheezy)
Teresa e Junior
3
@TeresaeJunior: Point (j'ai ajouté une référence ici), bien que je ne pense pas qu'il y ait une contradiction puisque la route polkit est un peu une astuce de l'espace utilisateur - la monture est toujours une monture privilégiée. La page wikipedia de GVFS note "GVFS peut utiliser FUSIBLE" donc je vais faire "peut" au lieu de "fait".
goldilocks
1
Du GNOME Wiki: "Il existe également un support de fusible qui permet aux applications n'utilisant pas gio d'accéder aux systèmes de fichiers gvfs."
Teresa e Junior
1
@TeresaeJunior: Oui, donc ils sont en quelque sorte concurrents, FUSE étant une solution de rechange. Bien sûr, GNOME n'est pas le seul DE autour, mais je suis sûr que la plupart des autres utilisent glib (qui inclut gio) de diverses manières. TBH Je n'ai jamais aimé le montage automatique, donc je n'ai aucune anecdote à ce sujet. Quoi qu'il en soit, FUSE est une possibilité.
goldilocks