Jak działa montowanie na GUI „pod maską”

12

AKTUALIZACJA

Popraw mnie, jeśli się mylę : do pracy na moim komputerze, z dystrybucją GNU / Linux o nazwie Debian, znam dwa sposoby wprowadzania poleceń, uruchamiania aplikacji, otwierania pliku itp .:

  • Interfejs wiersza poleceń , gdzie wprowadzić tekst
  • Graphical User Interface [aka GUI ]: interfejs, który zapewnia "okienka", symbole itd.

Coś się dzieje pod nazwą „Menedżer okien”. Kiedy używam GNU / Linux, pracuję na systemie X-Window [o ile wiem].

wprowadź opis zdjęcia tutaj


Oryginalny post


Sytuacja : wyłączyłem automatyczne /etc/fstabpodłączanie pamięci USB [np /dev/sdb1.]. Montowanie wymaga root, a przynajmniej sudowpisu w wierszu poleceń, ale nie w menedżerze okien (!) . Nie mam na myśli automount, mam na myśli „kliknięcie symbolu” w menedżerze okien otwiera urządzenie w GUI bez żadnych pytań, gdzie w CLI trzeba być rootem.

Pytanie : Jak działa montowanie w GUI „pod maską”? Czy istnieje configplik dla menedżerów okien ogólnie, czy trzeba to ustawić indywidualnie?

Rozumiem i używam mountpolecenia, myślę, że rozumiem, jak czytać i konfigurować, /etc/fstabi wiem, gdzie szukać, co /etc/mtaboznaczają tam wpisy .

erch
źródło
1
menedżerowie okien AFAIK również nie są za to odpowiedzialni; ważną rzeczą jest (części) środowiska pulpitu działające pod spodem. np. używam Awesome GNOME - GNOME używa Awesome zamiast GNOME Shell - i dyski automount. ale nie zrobiliby tego, gdybym użył zwykłego Awesome. szczerze mówiąc, tak naprawdę nie rozumiem twojej nagrody - odpowiedź @ slm wydaje się dość jasna.
strugee
2
Już w pierwszych dniach automounter robił te sztuczki w tle (z prawie tym samym poleceniem montowania, którego używałbyś na root-cli). Teraz istnieją własne podprocesy integrujące się z GUI, które wykonują zadanie. Zobacz odpowiedź od slm.
Nils,
5
„Trudno mi uwierzyć, że każdy z [różnych menedżerów okien] musiałby szukać własnego sposobu na rozwiązanie tego problemu”. -> Nigdy nie robi tego menedżer okien (WM). To środowisko pulpitu (DE). Co do wszystkich, którzy sami muszą to robić, wszyscy robią dla siebie wiele innych rzeczy. Z wyboru . Ale nie muszą. Na przykład GNOME ma licencję GPL, więc każdy inny DE GPL może po prostu użyć części GNOME, jeśli chce.
goldilocks,
2
@goldilocks, co zrobili np. Cinnamon i MATE.
strugee,
2
@strugee: GNOME ma ścisły historyczny związek z GTK (który pierwotnie był dla GIMP), a niższe biblioteki obsługują lib ( glib ), które GNU również utrzymuje i wierzę, że rozprzestrzeniło się z GNOME i GTK. Sądzę, że prawie wszyscy robią glib, zapewnia on wiele rzeczy o podstawowym znaczeniu dla wielozadaniowego, sterowanego zdarzeniami GUI „pod maską” (tylko: nie rzeczywiste części graficzne). Myślę, że GNOME jest zasadniczo glib + gtk + menadżer windom + niektóre aplikacje.
goldilocks,

Odpowiedzi:

5

Takie jest moje rozumienie sytuacji, ale nie jestem ekspertem, więc jest mniej techniczne niż inne odpowiedzi. Rozumiem to po wielu latach używania tych systemów, nie badałem ich szczegółowo.

Jest tu trzech głównych graczy, a między nimi zarządzają wierzchowcami:

  • BEZPIECZNIK: Jest w centrum wszystkiego, jak opisano na stronie wikipedii :

    System plików w przestrzeni użytkownika (FUSE) to mechanizm systemu operacyjnego dla uniksowych komputerowych systemów operacyjnych, który pozwala nieuprzywilejowanym użytkownikom tworzyć własne systemy plików bez edytowania kodu jądra. Osiąga się to poprzez uruchomienie kodu systemu plików w przestrzeni użytkownika, podczas gdy moduł FUSE zapewnia jedynie „pomost” do rzeczywistych interfejsów jądra.

    Zasadniczo dzięki temu nieuprzywilejowani użytkownicy mogą montować systemy plików.

  • gvfs: W rodzinie środowisk graficznych Gnome (w tym Gnome, Mate, Cinnamon) jest to (między innymi) demon, który automatycznie montuje nowo podłączone dyski. Czyni to przez BEZPIECZNIK. Uważam (ale może się mylić) odpowiednik rodziny KDE nazywa się KIO

    Główne procesy gvfsto (wzięte z man gvfs):

    • gvfsd - główny demon gvfs
    • gvfs-fuse-daemon - montuje gvfs jako system plików bezpieczników
    • gvfsd-metadata - zapisuje metadane gvfs
  • udev: Jest to system, który wykrywa nowe urządzenia i umożliwia uruchamianie skryptów / poleceń, gdy są one połączone. Na przykład udevwykrywa nowy ekran i może wyświetlać na nim pulpit:

    udev to menedżer urządzeń dla jądra Linux. Przede wszystkim zarządza węzłami urządzeń w / dev. Jest następcą devfs i hotplug, co oznacza, że ​​obsługuje katalog / dev i wszystkie działania w przestrzeni użytkownika podczas dodawania / usuwania urządzeń, w tym ładowania oprogramowania.

    W szczególności gvfswydaje się , że działa przez gvfs-udisks2-volume-monitorto monitor głośności oparty na udiskach. udiskssam jednak polega na udev(patrz man 7 udisks).

Tak więc w zasadzie (czytaj „okropne uproszczenie”) dzieje się tak, że po podłączeniu dysku udevwykrywa go i ostrzega gvfsdemon, który następnie zamontuje go jako urządzenie BEZPIECZNIK.

FUSE i udevbędzie taki sam dla wszystkich środowisk pulpitu, zmiany dotyczą demona DE, który monitoruje udevi montuje dysk jako system plików FUSE.

terdon
źródło
1
Umieść D-bus wypełniając luki między udev, gvfs i wszystkim innym.
Braiam
Możesz zaktualizować informacje o gvfs. Przeprowadzają się do GIO.
Braiam
8

To zależy od graficzną środowiska (GNOME / KDE / itp.), Ale w GNOME, na przykład, zobaczysz demony uruchomiony zawołał gvfs-*-volume-monitor. Te demony są odpowiedzialne za montowanie urządzeń podczas uruchamiania środowiska pulpitu, nie mają z tym nic wspólnego /etc/fstabi działają całkowicie niezależnie.

O ile w pliku konfiguracyjnym, istnieją pewne pliki, które są związane z tym, że żyją w katalogu domowym użytkownika, który jest uruchomiony DE $HOME/.local/share/gvfs-metadata.

To pytanie i odpowiedzi U&L zatytułowane: Co to jest gvfs i dlaczego powinienem go mieć w swoim systemie? , próbuje wyjaśnić, czym jest GVFS. Wyjaśnia to dobrze. Ale myślę, że to, o co naprawdę pytasz, jest bardziej poruszone w tym pytaniu U&L zatytułowanym: Automatyczne montowanie dysków USB (jak to działa) .

slm
źródło
Odpowiedź wydaje się brzmieć HAL… znalazłem rozwiązania dla thunar[których używam] itd. Artykuł wskazał kierunek - dzięki za to! - ale wciąż szukam wspólnego mianownika…
erch
IIRC DE nie potrzebuje roota, ponieważ wykorzystuje FUSE (system plików w przestrzeni użytkownika).
strugee
@strugee zgadując, że DE oznacza środowisko Desktop, powinienem zajrzeć do FUSE. Czy masz podpowiedź, gdzie?
erch
@chirp wyszukaj FUSE na Wikipedii: en.wikipedia.org/wiki/FUSE is it, IIRC. a slm już odpowiedział. odpowiedź jest taka, że ​​środowisko pulpitu, a nie menedżer okien, wykonuje automatyczne montowanie.
strugee,
2
@chirp - Zobacz tutaj: bbs.archlinux.org/viewtopic.php?id=95509 . HAL został wycofany, en.wikipedia.org/wiki/HAL_(software) . UDEV będzie zamiennikiem w przyszłości: en.wikipedia.org/wiki/Udev
slm
8

Prosta odpowiedź brzmi: oszukują. Nie używają fstab. Zazwyczaj używają udevhaka do wychwytywania zdarzeń wstawiania, montują dysk ręcznie jako root, co może zostać przekazane, dbusaby powiadomić menedżera plików, że masz nowy dysk lub mogą użyć suidnarzędzi zamiast dbusdo odmontowywania. Niestety nie ma standardowych opcji konfiguracji, a ponieważ ruch pulpitu wierzy w ukrywanie złożoności, nie dokumentują tego w dokumentacji użytkownika, tylko w dokumentacji dla programistów i zakładają system jednego użytkownika, więc dyski USB działają tylko dla pierwszy użytkownik zaloguje się na serwerze X.

Hildred
źródło
TAK! Tego bardziej szukam. Jako nowość chciałbym zapytać, od czego zacząć, erm: „Od czego zacząć”, aby prześledzić to zachowanie [każda wskazówka pomogłaby mi zostać odsuniętym na bok; mniej więcej punkt początkowy pomógłby ogromnie]
erch
2
@chirp, aby rozpocząć eksplorację, spójrz na udev (7) i /etc/udev/rules.d/*
hildred
5

PolicyKit (lub Polkit) to zestaw narzędzi na poziomie aplikacji do definiowania i obsługi zasad, który pozwala nieuprzywilejowanym procesom mówić do procesów uprzywilejowanych .

Jest to struktura centralizująca proces decyzyjny w zakresie przyznawania dostępu do operacji uprzywilejowanych (takich jak wywoływanie metody Mount ()) dla nieuprzywilejowanych aplikacji (stacjonarnych).

Agent uwierzytelnienia służy do tego, aby użytkownik sesji udowodnił, że użytkownik sesji jest naprawdę użytkownikiem (uwierzytelniając się jako użytkownik) lub administracyjnym (uwierzytelniając się jako administrator).

GVFS to wirtualny system plików, który umożliwia montowanie lokalnych i zdalnych systemów plików jako użytkownik wraz z obsługą kosza. Dostępna jest również obsługa FUSE, która pozwala aplikacjom nieużywającym GIO na dostęp do systemów plików GVFS, ale większość DE dokonuje uwierzytelnienia za pomocą Policykit również w innych celach, takich jak hibernacja i wyłączanie komputera, a także dla NetworkManagera, więc nie muszą użyj BEZPIECZNIKA.

Składa się z dwóch części:

  1. Biblioteka współdzielona ładowana przez aplikacje obsługujące GIO;
  2. Sam GVFS, który zawiera zbiór demonów komunikujących się ze sobą oraz moduł GIO przez D-Bus.

Pakiet gvfs musi zostać zainstalowany wraz z polkit-gnome dla reguł polkit. Upewnij się, że graficzny agent uwierzytelniający został zainstalowany i automatycznie uruchomiony.

Pliki konfiguracyjne do zarządzania uprawnieniami muszą być różne dla każdej dystrybucji. Arch Wiki nakazuje utworzenie pliku pod /usr/share/polkit-1/rules.d/. W Debianie znajdują się w /etc/polkit-1/.

Źródła: Policykit na Debianie || Polkit na Arch Wiki || GVFS na Arch Wiki || GVFS na GNOME Wiki!

Teresa e Junior
źródło
Czy na pewno GIO oznacza GObject Introspection? Gdybym tak, pomyślałbym, że to się nazywa GOI. Wydaje się, że ludzie Gnome nazywają to GI . Nie znalazłem innego wyjaśnienia nazwy GIO, ale wydaje się, że nie jest takie samo jak GI.
terdon
@terdon To była edycja autorstwa strugee (wersja 10 na unix.stackexchange.com/posts/101951/revisions ). Usuwanie go ...
Teresa e Junior
4

Jednym z powszechnych elementów, których szukasz, jest FUSE , gvfs GNOME, np. Używa tego pod maską. 1 To jest interfejs z jądrem i uważam, że jest wspólny dla wszystkich nieuprzywilejowanych (automatycznych) systemów montowania na Linuksie [ale patrz komentarze]. Poszczególne DE nie stworzyłyby własnej wersji tego, ponieważ wymagałoby to łatania jądra.

Ten link do strony głównej jest w rzeczywistości nieaktualny, ponieważ jak wspomniano tutaj , FUSE stał się częścią oficjalnego jądra kilka lat temu, ale opisuje on pochodzenie i cele projektu (nie służy tylko do nieuprzywilejowanego montażu).

Powodem, dla którego różne systemy mogą różnić się stylem, jest ten sam powód, dla którego masz różne środowiska pulpitu: reprezentują one różne wizje tego, jak / jaki powinien być GUI. Dbają o formę i funkcję interfejsu użytkownika, ale FUSE zajmuje się montażem i poziomem jądra. Zauważ, że FUSE tak naprawdę nie wykonuje części „auto”, chodzi raczej o część „nieuprzywilejowaną”, ale część auto jest dość prosta: wystarczy sondować, np /dev. Napisałem aplikację do montażu, która działa w ten sposób; po prostu obserwuje pojawienie się nowych węzłów. 2 Ta część to może około stu wierszy C ++. Łatwy w obsłudze - nie ma potrzeby posiadania wspólnego API na tym poziomie.

1 Lub może, jeśli robi naprawdę nieuprzywilejowane mocowanie. Odpowiedź Teresy może dotyczyć nowszych podejść do umożliwiania dostępu do normalnych wierzchowców.

2 Jak zauważa Hildred, wywołania zwrotne udev byłyby lepszą, mniej hackującą metodą.

Złotowłosa
źródło
Myślę, że miałeś na myśli „stronę główną” i usunę ten komentarz po zniknięciu literówki;) Nawiasem mówiąc, jak zawsze świetna odpowiedź!
erch
1
Ponieważ nasze odpowiedzi wydają się ze sobą sprzeczne, przeprowadziłem kilka testów. Przynajmniej w Debianie, bez aktywnego agenta Polkit, użytkownik nie może montować. Ponadto moduł fuse.ko nie jest ładowany nawet po zamontowaniu. (Używam Thunar na Wheezy)
Teresa e Junior
3
@TeresaeJunior: Punkt (dodałem tutaj odniesienie), chociaż nie sądzę, że istnieje sprzeczność, ponieważ trasa polkit jest trochę sztuczką w przestrzeni użytkownika - mount jest nadal uprzywilejowanym mountem. Strona wikipedii GVFS zauważa: „GVFS może używać FUSE”, więc zrobię to „może” zamiast „robi”.
goldilocks,
1
Z GNOME Wiki: „Istnieje również obsługa bezpieczników, która pozwala aplikacjom nieużywającym gio na dostęp do systemów plików gvfs”.
Teresa e Junior,
1
@TeresaeJunior: Tak, więc są w pewnym sensie zbieżne, FUSE jest awarią. Oczywiście GNOME nie jest jedynym DE, ale jestem pewien, że większość innych używa glib (w tym gio) na różne sposoby. TBH Nigdy nie lubiłem automountingu, więc nie mam na ten temat żadnych anegdot. W każdym razie FUSE to możliwość.
goldilocks,