Wie funktioniert das Mounten auf der GUI "unter der Haube"?

12

AKTUALISIEREN

Bitte korrigieren Sie mich, wenn ich falsch liege : Um auf meinem Computer mit einer GNU / Linux-Distribution namens Debian zu arbeiten, habe ich zwei Möglichkeiten, einen Befehl einzugeben, eine Anwendung zu starten, eine Datei zu öffnen, etc .:

  • eine Befehlszeilenschnittstelle, in die ich Text eingebe
  • Eine grafische Benutzeroberfläche ( GUI ): Eine Oberfläche, die "Fenster", Symbole usw. bereitstellt.

Da ist etwas los mit dem Namen "Window Manager". Da ich GNU / Linux verwende, arbeite ich auf dem X-Window-System [soweit ich weiß].

Bildbeschreibung hier eingeben


Ursprüngliche Buchung


Situation : Ich habe die automatische Anmeldung /etc/fstabfür USB-Sticks deaktiviert [zB /dev/sdb1]. Das Mounten muss sein root, oder zumindest ein sudoEintrag in der Kommandozeile aber nicht in einem Fenstermanager (!) . Ich meine nicht automount, ich meine "Klicken auf das Symbol" in einem Fenstermanager öffnet das Gerät auf der GUI ohne Fragen, wobei auf der CLI man root sein muss.

Frage : Wie funktioniert das Mounten in einer GUI "unter der Haube"? Gibt es eine configDatei für Fenstermanager im Allgemeinen oder muss man diese individuell einstellen?

Ich verstehe und benutze mountBefehl, ich denke zu verstehen, wie man liest und konfiguriert /etc/fstabund wo man sieht, was die Einträge dort und in /etc/mtabbedeuten.

erch
quelle
1
Auch die AFAIK-Fenstermanager sind nicht dafür verantwortlich. Das Wichtigste ist, dass die (Teile der) Desktop-Umgebung darunter ausgeführt werden. zB benutze ich Awesome GNOME - GNOME benutze Awesome anstelle der GNOME Shell - und Disketten automount. aber sie würden nicht, wenn ich einfach nur Awesome verwenden würde. ehrlich gesagt, ich verstehe dein Kopfgeld nicht wirklich - die Antwort von @ slm scheint ziemlich klar zu sein.
Strugee
2
In den frühen Tagen war es der Automounter, der diese Tricks im Hintergrund ausführte (mit so ziemlich dem gleichen Mount-Befehl, den Sie auf der Root-CLI verwenden würden). Jetzt gibt es eigene Unterprozesse, die in die GUI integriert sind und die die Arbeit erledigen. Siehe die Antwort von slm.
Nils
5
"Es fällt mir schwer zu glauben, dass jeder einzelne [der verschiedenen Fenstermanager] nach einem eigenen Weg suchen muss, um dieses Problem zu lösen." -> Es ist niemals der Fenstermanager (WM), der dies tut. Es ist die Desktop-Umgebung (DE). Alle müssen es selbst tun, und alle machen eine Menge anderer Dinge auch für sich. Nach Wahl . Aber das müssen sie nicht. GNOME hat zum Beispiel eine GPL-Lizenz, so dass jede andere GPL-DE GNOME-Teile verwenden kann, wenn sie möchte.
Goldlöckchen
2
@goldilocks die zB Cinnamon und MATE gemacht haben.
Strugee
2
@strugee: GNOME hat eine enge historische Beziehung zu GTK (ursprünglich für GIMP) und den Support- Bibliotheken ( glib ) auf niedrigerer Ebene , die GNU ebenfalls unterhält. Ich vermute, dass fast jeder Glib-Hersteller eine Menge grundlegender Dinge für eine ereignisgesteuerte Multitasking-GUI bietet (nur: nicht die eigentlichen grafischen Teile). Ich denke, GNOME ist im Grunde genommen glib + gtk + ein Windom-Manager + einige Anwendungen.
Goldlöckchen

Antworten:

5

Dies ist mein Verständnis der Situation, aber ich bin kein Experte, daher ist es weniger technisch als die anderen Antworten. Dies ist, was ich verstehe, nachdem ich diese Systeme viele Jahre lang verwendet habe, ich habe sie nicht im Detail untersucht.

Hier gibt es drei Hauptakteure, zwischen denen sie die Reittiere verwalten:

  • FUSE: Dies ist das Zentrum von allem, wie auf der Wikipedia-Seite beschrieben :

    Filesystem in Userspace (FUSE) ist ein Betriebssystemmechanismus für Unix-ähnliche Computer-Betriebssysteme, mit dem nicht privilegierte Benutzer ihre eigenen Dateisysteme erstellen können, ohne den Kernel-Code zu bearbeiten. Dies wird erreicht, indem der Dateisystemcode im Benutzerbereich ausgeführt wird, während das FUSE-Modul nur eine "Brücke" zu den eigentlichen Kernel-Schnittstellen bietet.

    Im Grunde genommen ermöglicht dies nichtprivilegierten Benutzern das Mounten von Dateisystemen.

  • gvfs: In der Gnome-Familie von Desktop-Umgebungen (einschließlich Gnome, Mate, Cinnamon) ist dies (unter anderem) ein Daemon, der automatisch neu verbundene Laufwerke bereitstellt. Dies geschieht über FUSE. Ich glaube (kann aber auch falsch sein), dass das Äquivalent für die KDE-Familie KIO heißt

    Die Hauptprozesse von gvfssind (entnommen aus man gvfs):

    • gvfsd - der Haupt-gvfs-Daemon
    • gvfs-fuse-daemon - Hängt gvfs als Sicherungsdateisystem ein
    • gvfsd-metadata - Schreibt gvfs-Metadaten
  • udev: Dies ist ein System, das neue Geräte erkennt und es Ihnen ermöglicht, Skripte / Befehle auszuführen, wenn diese verbunden sind. Beispielsweise udeverkennt es einen neuen Bildschirm und kann Ihren Desktop darauf spiegeln:

    udev ist ein Geräte-Manager für den Linux-Kernel. In erster Linie werden Geräteknoten in / dev verwaltet. Es ist der Nachfolger von devfs und hotplug. Dies bedeutet, dass es das Verzeichnis / dev und alle Benutzerbereichsaktionen beim Hinzufügen / Entfernen von Geräten, einschließlich des Ladens der Firmware, verarbeitet.

    Insbesondere gvfsscheint das zu funktionieren, gvfs-udisks2-volume-monitorwas ein udisks-basierter Lautstärkemonitor ist. udisksselbst stützt sich jedoch auf udev(siehe man 7 udisks).

Im Grunde (lesen Sie "schreckliche Vereinfachung") ist das, was passiert, wenn Sie Ihr Laufwerk anschließen, udeves erkennen und den gvfsDämon warnen, der es dann als FUSE-Gerät mounten wird.

FUSE und udevwird für alle Desktop-Umgebungen gleich sein. Was sich ändert, ist der DE-Dämon, der udevdas Laufwerk als FUSE-Dateisystem überwacht und einbindet.

terdon
quelle
1
Setzen Sie D-Bus, um die Lücken zwischen udev, gvfs und allem anderen zu füllen.
Braiam
Möglicherweise möchten Sie die Informationen zu gvfs aktualisieren. Sie ziehen zu GIO um.
Braiam
8

Dies hängt von Ihrer Windows-Umgebung ab (GNOME / KDE / etc.). In GNOME werden beispielsweise Daemons mit dem Namen "," ausgeführt gvfs-*-volume-monitor. Diese Daemons sind für das Mounten von Geräten verantwortlich, wenn sie in der Desktop-Umgebung ausgeführt werden. Sie haben nichts damit zu tun /etc/fstabund arbeiten völlig unabhängig voneinander.

In Bezug auf eine Konfigurationsdatei gibt es einige damit zusammenhängende Dateien, die sich im Basisverzeichnis des Benutzers befinden, in dem die DE ausgeführt wird $HOME/.local/share/gvfs-metadata.

Diese U & L- Fragen und Antworten mit dem Titel: Was ist gvfs und warum sollte ich es auf meinem System haben wollen? , versucht zu erklären, was GVFS ist. Es ist in Ordnung, es zu erklären. Aber ich denke, was Sie wirklich fragen, wird in dieser U & L-Frage und Antwort mit dem Titel: Automatisches Mounten von USB-Datenträgern (wie es funktioniert) mehr angesprochen .

slm
quelle
Die Antwort scheint in HAL… zu sein. Ich habe einige Lösungen für thunar[die ich verwende] usw. gefunden. Der Artikel wies in eine Richtung - danke dafür! - aber ich bin immer noch auf der Suche nach einem gemeinsamen Nenner…
14.
IIRC Das DE benötigt kein Root-Verzeichnis, da es FUSE (Filesystem in User Space) verwendet.
Strugee
@strugee Vermutung, dass DE Desktop-Umgebung bedeutet, sollte ich in FUSE suchen. Hast du einen Tipp, wo?
Erch
@chirp FUSE auf Wikipedia nachschlagen: en.wikipedia.org/wiki/FUSE is it, IIRC. und slm hat schon geantwortet. Die Antwort ist, dass die Desktop-Umgebung und nicht der Fenstermanager die automatische Bereitstellung durchführt.
Strugee
2
@ chirp - Siehe hier: bbs.archlinux.org/viewtopic.php?id=95509 . HAL ist veraltet ( en.wikipedia.org/wiki/HAL_(software) . UDEV ist der Ersatz für die
Zukunft
8

Die einfache Antwort ist, dass sie betrügen. Sie benutzen das nicht fstab. Sie verwenden in der Regel einen udevHaken zum Einsetzen Ereignisse fangen, montieren Sie die Platte manuell root, was zu übergeben werden kann dbusDateimanager zu informieren , dass Sie eine neue Festplatte haben oder sie könnten verwenden suidDienstprogramme statt dbusfür Aushängen. Leider gibt es keine Standardkonfigurationsoptionen dafür, und da die Desktop-Bewegung davon ausgeht, dass die Komplexität verborgen bleibt, dokumentieren sie dies nicht in der Benutzerdokumentation, sondern nur in der Entwicklerdokumentation, und sie gehen von einem einzelnen Benutzersystem aus, sodass USB-Laufwerke nur für das funktionieren Erster Benutzer, der sich bei einem X-Server anmeldet.

hildred
quelle
JA! Das ist mehr was ich suche. Als Neuling möchte ich fragen, wo ich anfangen soll, ähm: "Wo fange ich an?", Um dieses Verhalten zu verfolgen. ein Startpunkt oder so würde enorm helfen]
19.
2
@chirp, um udev (7) und /etc/udev/rules.d/*
hildred
5

PolicyKit (oder Polkit) ist ein Toolkit auf Anwendungsebene zum Definieren und Behandeln der Richtlinie, mit der nicht privilegierte Prozesse mit privilegierten Prozessen kommunizieren können .

Es ist ein Framework für die Zentralisierung des Entscheidungsprozesses in Bezug auf das Gewähren des Zugriffs auf privilegierte Vorgänge (wie das Aufrufen der Mount () - Methode) für nichtprivilegierte (Desktop-) Anwendungen.

Ein Authentifizierungsagent wird verwendet, um den Benutzer einer Sitzung nachweisen zu lassen, dass der Benutzer der Sitzung tatsächlich der Benutzer ist (durch Authentifizierung als Benutzer) oder ein administrativer Benutzer (durch Authentifizierung als Administrator).

GVFS ist ein virtuelles Dateisystem, mit dem lokale und ferne Dateisysteme als Benutzer zusammen mit der Papierkorbunterstützung bereitgestellt werden können. Es gibt auch FUSE-Unterstützung, mit der Anwendungen, die kein GIO verwenden, auf die GVFS-Dateisysteme zugreifen können. Die meisten DEs führen jedoch die Authentifizierung über Policykit auch für andere Dinge durch, z. B. für den Ruhezustand und das Herunterfahren des Computers sowie für NetworkManager benutze FUSE.

Es besteht aus zwei Teilen:

  1. Eine gemeinsam genutzte Bibliothek, die von Anwendungen geladen wird, die GIO unterstützen.
  2. GVFS selbst, das eine Sammlung von Daemons enthält, die über D-Bus miteinander und mit dem GIO-Modul kommunizieren.

Das gvfs-Paket muss zusammen mit polkit-gnome für die polkit-Regeln installiert werden. Stellen Sie sicher, dass ein grafischer Authentifizierungsagent installiert und automatisch gestartet wurde.

Konfigurationsdateien für die Verwaltung von Berechtigungen müssen für jede Distribution unterschiedlich sein. Das Arch Wiki fordert Sie auf, eine Datei unter zu erstellen /usr/share/polkit-1/rules.d/. In Debian befinden sie sich in /etc/polkit-1/.

Quellen: Policykit auf Debian || Polkit im Arch Wiki || GVFS im Arch Wiki || GVFS auf GNOME Wiki!

Teresa und Junior
quelle
Sind Sie sicher, dass GIO für GObject Introspection steht? Ich hätte gedacht, es würde GOI heißen, wenn ja. Die Gnomen scheinen es GI zu nennen . Ich habe keine andere Erklärung für den Namen von GIO gefunden, aber es scheint nicht dasselbe zu sein wie GI.
Terdon
@terdon Das war eigentlich eine Bearbeitung von strugee (Revision 10 auf unix.stackexchange.com/posts/101951/revisions ). Es wird entfernt ...
Teresa e Junior
4

Ein häufiges Element, nach dem Sie suchen, ist FUSE . GNOMEs gvfs verwendet dies beispielsweise unter der Haube. 1 Dies ist die Schnittstelle zum Kernel, und ich glaube, sie ist allen nichtprivilegierten (automatischen) Mount-Systemen unter Linux gemeinsam [siehe jedoch Kommentare]. Einzelne DEs würden keine eigene Version davon erstellen, da dies ein Kernel-Patching erfordern würde.

Dieser Homepage-Link ist in der Tat veraltet, da FUSE , wie hier erwähnt , vor ein paar Jahren Teil des offiziellen Kernels wurde, aber die Ursprünge und Ziele des Projekts beschreibt (nicht nur für nichtprivilegiertes Mounten).

Der Grund, warum verschiedene Systeme darüber hinaus in ihrem Stil abweichen können, ist derselbe, warum Sie verschiedene Desktop-Umgebungen haben: Sie repräsentieren unterschiedliche Vorstellungen davon, wie / was die GUI sein sollte. Sie kümmern sich um die Form und Funktion der Benutzeroberfläche, aber FUSE erledigt die eigentlichen Aufgaben für das Mounten und den Kernel. Beachten Sie, dass FUSE den Teil "auto" nicht wirklich ausführt, sondern eher den Teil "unprivilegiert", aber der Teil "auto" ist ziemlich einfach: Sie müssen nur abfragen, z /dev. Ich habe eine Montageanwendung geschrieben, die auf diese Weise funktioniert. es wird nur auf das Erscheinen neuer Knoten gewartet. 2 Dieser Teil besteht aus ungefähr hundert Zeilen in C ++. Easy-peasy - keine wirkliche Notwendigkeit für eine gemeinsame API auf dieser Ebene.

1 Oder kann, wenn es sich um ein wirklich nicht privilegiertes Reittier handelt. Teresas Antwort könnte sich auf neuere Ansätze beziehen, um den Zugang zu normalen Reittieren zu ermöglichen.

2 Wie hildred feststellt, wären udev-Rückrufe eine bessere, weniger hackende Methode.

Goldlöckchen
quelle
Ich denke du meintest "Homepage" und ich werde diesen Kommentar löschen, nachdem der Tippfehler verschwunden ist;) Tolle Antwort, wie immer, übrigens!
Erch
1
Da sich unsere Antworten zu widersprechen scheinen, habe ich einige Tests durchgeführt. Zumindest in Debian kann der Benutzer ohne einen aktiven Polkit-Agenten nicht mounten. Das Modul fuse.ko wird auch nach dem Einhängen nicht geladen. (Ich benutze Thunar bei Wheezy)
Teresa und Junior
3
@TeresaeJunior: Point (Ich habe hier einen Verweis hinzugefügt), obwohl ich nicht glaube, dass es einen Widerspruch gibt, da die Polkit-Route ein bisschen ein User-Space-Trick ist - der Mount ist immer noch ein privilegierter Mount. Auf der GVFS-Wikipedia-Seite steht "GVFS kann FUSE verwenden", also mache ich "darf" anstelle von "tut".
Goldlöckchen
1
Aus dem GNOME-Wiki: "Es gibt auch Sicherungsunterstützung, mit der Anwendungen, die gio nicht verwenden, auf die gvfs-Dateisysteme zugreifen können."
Teresa e Junior
1
@TeresaeJunior: Ja, also sind sie irgendwie gleichzeitig, FUSE ist ein Fallback. Natürlich ist GNOME nicht das einzige DE, aber ich bin sicher, dass die meisten anderen glib (einschließlich gio) auf verschiedene Arten verwenden. TBH Ich habe Automounting noch nie gemocht, daher habe ich keine Anekdoten darüber. Wie auch immer, FUSE ist eine Möglichkeit.
Goldlöckchen