Come funziona il montaggio sulla GUI "sotto il cofano"


12

AGGIORNARE

Per favore, correggimi se sbaglio : per lavorare sul mio computer, con una distribuzione GNU / Linux di nome Debian, conosco due modi per inserire un comando, avviare un'applicazione, aprire un file, ecc .:

  • un'interfaccia a riga di comando in cui inserisco il testo
  • un'interfaccia utente grafica [aka GUI ]: un'interfaccia che fornisce "finestre", simboli ecc.

C'è qualcosa che si chiama "Window Manager". Mentre uso GNU / Linux, lavoro sul sistema X-Window [per quanto ne so].

inserisci qui la descrizione dell'immagine


Pubblicazione originale


Situazione : ho disabilitato l'automount in /etc/fstabper le chiavette USB [ad es /dev/sdb1.]. Il montaggio richiede di essere root, o almeno una sudovoce nella riga di comando ma non in un gestore di finestre (!) . Non intendo automount, intendo "fare clic sul simbolo" in un gestore di finestre che apre il dispositivo sulla GUI senza alcuna domanda, dove sulla CLI si deve essere root.

Domanda : come funziona il montaggio in una GUI "sotto il cofano"? Esiste un configfile per i gestori di finestre in generale o è necessario impostarlo singolarmente?

Capisco e uso il mountcomando, penso di capire come leggere e configurare /etc/fstabe sapere dove cercare cosa significano le voci lì e in /etc/mtab.


1
inoltre, i gestori di finestre AFAIK non sono responsabili di ciò; l'importante è l'ambiente desktop (parti dell'ambiente) in esecuzione sotto. ad es. uso Awesome GNOME - GNOME usando Awesome invece della GNOME Shell - e disco automount. ma non lo farebbero se usassi semplicemente Awesome. onestamente, non capisco davvero la tua generosità - la risposta di @ slm sembra abbastanza chiara.
strugee,

2
All'inizio era l'automounter a eseguire questi trucchi in background (con praticamente lo stesso comando mount che useresti sul root-cli). Ora ci sono propri processi secondari che si integrano con la GUI che svolgono il lavoro. Vedi la risposta da slm.
Nils,

5
"Trovo difficile credere che ognuno dei [vari gestori di finestre] dovrebbe cercare il proprio modo di risolverlo." -> Non è mai il gestore delle finestre (WM) a farlo. È l' ambiente desktop (DE). Quanto a tutti loro che devono farlo da soli, beh, fanno tutti un sacco di altre cose anche per se stessi. Per scelta . Ma non devono. GNOME, ad esempio, ha una licenza GPL, quindi qualsiasi altra DE GPL potrebbe usare solo parti GNOME, se lo desidera.
Riccioli d'oro,

2
@goldilocks come ad esempio Cinnamon e MATE.
Strugee,

2
@strugee: GNOME ha una stretta relazione storica con GTK (che originariamente era per GIMP), e le librerie di supporto di livello inferiore ( glib ) che GNU mantiene anche e credo proliferate da GNOME e GTK. Immagino che quasi tutti facciano di glib, che fornisce un sacco di cose fondamentali per una GUI multi-tasking, guidata dagli eventi "under the hood" (solo: non le parti grafiche effettive). Penso che GNOME sia fondamentalmente glib + gtk + un gestore windom + alcune applicazioni.
Riccioli d'oro,

Risposte:


5

Questa è la mia comprensione della situazione, ma non sono un esperto, quindi è meno tecnico delle altre risposte. Questo è quello che capisco dopo aver usato questi sistemi per molti anni, non li ho studiati in dettaglio.

Ci sono tre giocatori principali qui e tra loro gestiscono i supporti:

  • FUSIBILE: Questo è al centro di tutto, come descritto nella sua pagina di Wikipedia :

    Filesystem in Userspace (FUSE) è un meccanismo del sistema operativo per sistemi operativi simili a Unix che consente agli utenti non privilegiati di creare i propri file system senza modificare il codice del kernel. Ciò si ottiene eseguendo il codice del file system nello spazio utente mentre il modulo FUSE fornisce solo un "ponte" alle interfacce del kernel effettive.

    Quindi, in sostanza, questo è ciò che consente agli utenti senza privilegi di montare filesystem.

  • gvfs: Nella famiglia di ambienti desktop Gnome (che include Gnome, Mate, Cinnamon), questo è (tra le altre cose) un demone che monterà automaticamente le unità appena connesse. Lo fa tramite FUSE. Credo (ma potrebbe essere sbagliato) l'equivalente per la famiglia KDE si chiama KIO

    I principali processi di gvfssono (presi da man gvfs):

    • gvfsd - il demone gvfs principale
    • gvfs-fuse-daemon - monta gvfs come filesystem di miccia
    • gvfsd-metadata - scrive i metadati di gvfs
  • udev: Si tratta di un sistema che rileva nuovi dispositivi e consente di eseguire script / comandi quando sono connessi. Ad esempio, è udevche rileva un nuovo schermo e può rispecchiare il desktop su di esso:

    udev è un gestore di dispositivi per il kernel Linux. In primo luogo, gestisce i nodi del dispositivo in / dev. È il successore di devfs e hotplug, il che significa che gestisce la directory / dev e tutte le azioni dello spazio utente durante l'aggiunta / rimozione di dispositivi, incluso il caricamento del firmware.

    In particolare, gvfssembra funzionare attraverso il gvfs-udisks2-volume-monitorquale è un monitor del volume basato su udisks. udisksstesso, tuttavia, si basa su udev(vedi man 7 udisks).

Quindi, sostanzialmente (leggi "orribile semplificazione") ciò che accade è che quando colleghi il tuo disco, lo udevrileva e avvisa il gvfsdemone che lo monterà come dispositivo FUSE.

FUSE e udevsarà lo stesso per tutti gli ambienti desktop, ciò che cambia è il demone DE che monitora udeve monta l'unità come file system FUSE.


1
Inserisci D-bus riempiendo gli spazi tra udev, gvfs e tutto il resto.
Braiam,

Potresti voler aggiornare le informazioni su gvfs. Si stanno trasferendo a GIO.
Braiam,

8

Dipende dal vostro ambiente a finestre (GNOME / KDE / etc.), Ma in GNOME, per esempio, vedrete demoni in esecuzione chiamati, gvfs-*-volume-monitor. Questi daemon sono responsabili del montaggio dei dispositivi durante l'esecuzione dell'ambiente desktop, non hanno nulla a che fare con /etc/fstabe funzionano in modo completamente indipendente.

Per quanto riguarda un file di configurazione, ci sono alcuni file che sono legati a questo che vivono nella directory home dell'utente che esegue il DE, $HOME/.local/share/gvfs-metadata.

Queste domande e risposte sono intitolate: Cos'è gvfs e perché dovrei volerlo sul mio sistema? , tenta di spiegare cos'è GVFS. Fa un buon lavoro nel spiegarlo. Ma penso che ciò di cui ti stai veramente chiedendo sia affrontato di più da questo U&L Q&A intitolato: Montaggio automatico dei dischi USB (come funziona) .


La risposta sembra essere nel HAL... Ho trovato alcune soluzioni per thunar[che uso] ecc. L'articolo puntava in una direzione - grazie per quello! - ma sto ancora cercando un denominatore comune ...
Erch

IIRC il DE non ha bisogno di root perché usa FUSE (Filesystem in User Space).
Strugee,

@strugee indovina che DE significa ambiente desktop, dovrei cercare in FUSE. Hai un suggerimento, dove?
erch

@chirp cerca FUSE su Wikipedia: en.wikipedia.org/wiki/FUSE è, IIRC. e slm ha già risposto. la risposta è che l'ambiente desktop, non il gestore delle finestre, esegue il montaggio automatico.
Strugee,

2
@chirp - Vedi qui: bbs.archlinux.org/viewtopic.php?id=95509 . HAL è stato deprecato, en.wikipedia.org/wiki/HAL_(software) . UDEV è il sostituto in futuro: en.wikipedia.org/wiki/Udev
slm

8

La semplice risposta è che imbrogliano. Non usano il fstab. In genere usano un udevhook per catturare eventi di inserimento, montare manualmente il disco come root, che può essere passato dbusper notificare al file manager che si dispone di un nuovo disco o che potrebbero utilizzare suidutility anziché dbusper smontare. Sfortunatamente non ci sono opzioni di configurazione standard per questo, e poiché il movimento del desktop crede nel nascondere la complessità, non documentano questo nella documentazione dell'utente, solo nella documentazione per gli sviluppatori e assumono un sistema a singolo utente, quindi le unità USB funzionano solo per primo utente ad accedere a un server X.


SÌ! Questo è più quello che sto cercando. Come newb, vorrei chiedere da dove iniziare a cercare, erm: "Da dove comincio" per tracciare questo comportamento [qualsiasi suggerimento mi aiuterebbe a rimanere distratto; un punto di partenza sarebbe di grande aiuto]
erch

2
@chirp per iniziare a esplorare guardare udev (7) e /etc/udev/rules.d/*
hildred

5

PolicyKit (o Polkit) è un toolkit a livello di applicazione per la definizione e la gestione della politica che consente ai processi non privilegiati di parlare con processi privilegiati .

È un framework per centralizzare il processo decisionale rispetto alla concessione dell'accesso ad operazioni privilegiate (come la chiamata del metodo Mount ()) per applicazioni non desktop (desktop).

Un agente di autenticazione viene utilizzato per dimostrare all'utente di una sessione che l'utente della sessione è realmente l'utente (eseguendo l'autenticazione come utente) o un utente amministrativo (eseguendo l'autenticazione come amministratore).

GVFS è un filesystem virtuale che consente il montaggio di filesystem locali e remoti come utente insieme al supporto cestino. Esiste anche il supporto FUSE che consente alle applicazioni che non utilizzano GIO di accedere ai filesystem GVFS, ma la maggior parte dei DE esegue l'autenticazione tramite Policykit anche per altre cose, come l'ibernazione e lo spegnimento del computer, e per NetworkManager, quindi non è necessario usa FUSE.

Si compone di due parti:

  1. Una libreria condivisa che viene caricata da applicazioni che supportano GIO;
  2. GVFS stesso, che contiene una raccolta di demoni che comunicano tra loro e il modulo GIO su D-Bus.

Il pacchetto gvfs deve essere installato, insieme a polkit-gnome per le regole di polkit. Assicurarsi che un agente di autenticazione grafico sia installato e avviato automaticamente.

I file di configurazione per la gestione dei privilegi devono essere diversi per ogni distribuzione. Arch Wiki ti dice di creare un file sotto /usr/share/polkit-1/rules.d/. In Debian, si trovano in /etc/polkit-1/.

Fonti: Policykit su Debian || Polkit su Arch Wiki || GVFS su Arch Wiki || GVFS su GNOME Wiki!


Sei sicuro che GIO sia l'acronimo di GObject Introspection? Avrei pensato che sarebbe stato chiamato GOI se fosse così. La gente di Gnome sembra chiamarla GI . Non ho trovato un'altra spiegazione del nome GIO ma non sembra essere la stessa di IG.
terdon

@terdon Questa era in realtà una modifica di strugee (revisione 10 su unix.stackexchange.com/posts/101951/revisions ). Rimuovendolo ...
Teresa e Junior,

4

Un elemento comune che stai cercando è FUSE , il gvfs di GNOME, ad esempio, lo usa sotto il cofano. 1 Questa è l'interfaccia con il kernel, e credo che sia comune a tutti i sistemi di montaggio (auto) non privilegiati su Linux [ma vedi commenti]. I singoli DE non creerebbero la propria versione di ciò poiché ciò richiederebbe patch del kernel.

Questo link alla homepage è in realtà obsoleto, perché come notato qui , FUSE è diventato parte del kernel ufficiale alcuni anni fa, ma descrive le origini e gli scopi del progetto (non è solo per il montaggio senza privilegi).

Il motivo per cui vari sistemi possono deviare con stile oltre questo è lo stesso motivo per cui si hanno vari ambienti desktop: rappresentano visioni diverse di come / cosa dovrebbe essere la GUI. Si stanno prendendo cura della forma e della funzione dell'interfaccia utente, ma FUSE esegue il montaggio effettivo e roba a livello di kernel. Si noti che FUSE non esegue realmente la parte "auto", riguarda più la parte "non privilegiata", ma la parte auto è piuttosto semplice: tutto ciò che devi fare è il sondaggio, ad es /dev. Ho scritto un'applicazione di montaggio che funziona in questo modo; osserva solo la comparsa di nuovi nodi. 2 Quella parte è forse un centinaio di righe di C ++. Facile - non c'è davvero bisogno di un'API comune a quel livello.

1 Oppure puoi, se sta facendo un montaggio davvero senza privilegi. La risposta di Teresa può riguardare approcci più recenti per consentire l'accesso a supporti normali.

2 Come osserva hildred, i callback udev sarebbero un metodo migliore, meno hack.


Immagino volessi dire "homepage" e cancellerò questo commento dopo che l'errore è scomparso;) Ottima risposta, come sempre, a proposito!
dal

1
Dato che le nostre risposte sembrano contraddirsi a vicenda, ho fatto alcuni test. Almeno in Debian, senza un agente Polkit attivo, l'utente non può montare. Inoltre, il modulo fuse.ko non viene caricato anche dopo il montaggio. (Sto usando Thunar su Wheezy)
Teresa e Junior,

3
@TeresaeJunior: Point (ho aggiunto un riferimento a qui), anche se non credo che ci sia contraddizione poiché il percorso del polkit è un po 'un trucco per lo spazio utente - il mount è ancora un mount con privilegi. La pagina wikipedia di GVFS riporta "GVFS può usare FUSE", quindi farò "may" invece di "does".
Riccioli d'oro

1
Dal Wiki GNOME: "Esiste anche il supporto dei fusibili che consente alle applicazioni che non utilizzano gio di accedere ai filesystem gvfs".
Teresa e Junior,

1
@TeresaeJunior: Sì, quindi sono un po 'concorrenti, essendo FUSE un fallback. Naturalmente, GNOME non è l'unico DE in circolazione, ma sono sicuro che la maggior parte degli altri usa glib (che include gio) in vari modi. TBH Non mi è mai piaciuto il montaggio automatico, quindi non ho aneddoti al riguardo. Ad ogni modo, FUSE è una possibilità.
Riccioli d'oro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.