Як працює монтаж на графічному інтерфейсі "під капотом"


12

ОНОВЛЕННЯ

Будь ласка, виправте мене, якщо я помиляюся . Для роботи на моєму комп’ютері, з дистрибутивом GNU / Linux на ім'я Debian, я знаю два способи ввести команду, запустити програму, відкрити файл тощо:

  • інтерфейс командного рядка , де вводити текст
  • графічний інтерфейс користувача [ака GUI ]: інтерфейс , який забезпечує «вікно», символи і т.д.

Щось відбувається під назвою "Менеджер вікон". Коли я використовую GNU / Linux, я працюю над системою X-Window [наскільки я знаю].

введіть тут опис зображення


Оригінальна публікація


Ситуація : я відключив автоматичне ввімкнення /etc/fstabUSB-накопичувачів [наприклад /dev/sdb1]. Монтаж повинен бути rootабо хоча б sudoзаписом у командному рядку, але не у вікні диспетчера (!) . Я не маю на увазі automount, я маю на увазі "натискання на символ" у вікні-менеджері відкриває пристрій на графічному інтерфейсі без будь-яких питань, де в CLI має бути корінь.

Питання : Як працює монтаж в графічному інтерфейсі "під капотом"? Чи є configфайл для менеджерів вікон взагалі чи потрібно встановити це окремо?

Я розумію і використовую mountкоманду, я думаю, щоб зрозуміти, як читати і конфігурувати, /etc/fstabі знаю, де шукати, що /etc/mtabозначають записи і там .


1
також менеджери вікон AFAIK за це не несуть відповідальності; важливим є те, що (частини) робочого середовища робочого столу працює під ним. наприклад, я використовую Awesome GNOME - GNOME, використовуючи Awesome замість оболонки GNOME - і диски автоматично. але вони б не сталися, якби я просто використовував простого Awesome. чесно кажучи, я не дуже розумію вашу нагороду - відповідь @ slm здається досить зрозумілою.
strugee

2
У перші дні саме автомонітор робив ці трюки у фоновому режимі (з майже такою ж командою mount, яку ви використовували б у root-cli). Зараз є власні підпроцеси, які інтегруються з графічним інтерфейсом, які виконують цю роботу. Дивіться відповідь зі слм.
Нілс

5
"Мені важко вірити, що кожному з [різних менеджерів вікон] доведеться шукати власний шлях для вирішення цього питання". -> Це ніколи не керує вікнами (WM). Це середовище робочого столу (DE). Що ж до того, що всі вони повинні робити це самі, то вони теж роблять багато інших справ для себе. За вибором . Але вони не повинні. Наприклад, GNOME має ліцензію GPL, тому будь-який інший GPL'd DE може просто використовувати деталі GNOME, якщо вони хочуть.
goldilocks

2
@goldilocks, які, наприклад, Кориця і МАТЕ.
strugee

2
@strugee: GNOME має тісні історичні стосунки до GTK (що спочатку було для GIMP), і нижчих рівнів підтримки ( glib ), які GNU також підтримує, і я вважаю, що вони розповсюджуються з GNOME та GTK. Я б здогадувався, що майже кожен виготовляє гліб, він надає багато речей, які є основними для багатозадачного, керованого подіями графічного інтерфейсу "під капотом" (просто: не власне графічні частини). Я думаю, що GNOME в основному glib + gtk + вітром-менеджер + деякі програми.
goldilocks

Відповіді:


5

Це моє розуміння ситуації, але я не експерт, тому вона менш технічна, ніж інші відповіді. Це те, що я розумію, використовуючи ці системи протягом багатьох років, я їх детально не вивчав.

Тут є три основні гравці, і між ними вони керують кріпленнями:

  • ФУЗЕ: Це в центрі всього, як описано на його вікіпедійній сторінці :

    Файлова система в просторі користувачів (FUSE) - це механізм операційної системи для операційних систем, схожих на Unix, який дозволяє непривілейованим користувачам створювати власні файлові системи без редагування коду ядра. Це досягається за допомогою запуску коду файлової системи в просторі користувача, тоді як модуль FUSE забезпечує лише "міст" до фактичних інтерфейсів ядра.

    Отже, в основному саме це дозволяє непривілейованим користувачам монтувати файлові системи.

  • gvfs: У сімействі настільних середовищ Gnome (куди входять Gnome, Mate, Cinnamon), це (серед іншого) демон, який автоматично змонтує знову підключені накопичувачі. Це робиться через FUSE. Я вважаю (але, можливо, помиляється), еквівалент для сім'ї KDE називається KIO

    Основні процеси gvfs(взяті з man gvfs):

    • gvfsd - головний демон gvfs
    • gvfs-fuse-daemon - монтує gvfs як файлову систему запобіжників
    • gvfsd-метадані - пише метадані gvfs
  • udev: Це система, яка виявляє нові пристрої та дозволяє запускати сценарії / команди при їх підключенні. Наприклад, саме він udevвиявляє новий екран і може відображати на ньому робочий стіл:

    udev - менеджер пристроїв для ядра Linux. Перш за все, він управляє вузлами пристроїв в / dev. Це наступник devfs та hotplug, що означає, що він обробляє каталог / dev та всі дії з простором користувача при додаванні / видаленні пристроїв, включаючи завантаження програмного забезпечення.

    Зокрема, gvfsздається, працює, завдяки gvfs-udisks2-volume-monitorякому використовується монітор гучності на основі удиски. udisksсама, однак, покладається на udev(див. man 7 udisks)

Таким чином, в основному (читайте "жахливе спрощення"), що трапляється, це те, що коли ви підключаєте свій привід, udevвиявляє його і попереджає gvfsдемон, який потім змонтує його як пристрій FUSE.

FUSE і udevбуде однаковим для всіх середовищ робочого столу, що змінюється, демон DE, який відстежує udevта монтує диск як файлова система FUSE.


1
Поставте D-bus заповнення прогалин між udev, gvfs та всім іншим.
Брайам

Ви можете оновити інформацію про gvfs. Вони рухаються до GIO.
Брайям

8

Це залежить від вашої Windowing середовища (GNOME / KDE / і т.д.) , Але в GNOME, наприклад, ви побачите демони працюють під назву, gvfs-*-volume-monitor. Ці демони відповідають за монтаж пристроїв під час роботи робочого середовища, вони не мають нічого спільного /etc/fstabі працюють повністю незалежно.

Наскільки конфігураційний файл, є деякі файли, пов'язані з цим , які живуть в домашньому каталозі користувача, який працює на DE, $HOME/.local/share/gvfs-metadata.

Це запитання та відповіді U&L під назвою: Що таке gvfs та чому я повинен його мати у своїй системі? , спроби пояснити, що таке GVFS. Це добре працює, пояснюючи це. Але я думаю, що ви справді запитуєте, більше розглядається цей U&L Q&A під назвою: Автоматичне встановлення USB-дисків (Як це працює) .


Відповідь, здається, у HAL… я знайшов деякі рішення для thunar[, які я використовую] і т. Д. Стаття вказувала напрямок - дякую за це! - але я все ще шукаю спільний знаменник…
erch

IIRC DE не потребує кореня, оскільки він використовує FUSE (Filesystem in User Space).
strugee

@strugee здогадуючись, що DE означає середовище робочого столу, я повинен шукати FUSE. У вас є підказка, куди?
erch

@chirp шукайте FUSE у Вікіпедії: en.wikipedia.org/wiki/FUSE це, IIRC. і slm вже відповів. відповідь полягає в тому, що середовище робочого столу, а не менеджер вікон, робить автоматичне управління.
strugee

2
@chirp - Дивіться тут: bbs.archlinux.org/viewtopic.php?id=95509 . HAL застарілий, en.wikipedia.org/wiki/HAL_(software) . UDEV - це заміна вперед: en.wikipedia.org/wiki/Udev
slm

8

Проста відповідь - вони обманюють. Вони не використовують fstab. Зазвичай вони використовують udevгачок для зйомки подій вставки, монтують диск вручну, як rootце може бути передано dbusдля повідомлення вашого менеджера файлів про те, що у вас новий диск, або вони можуть використовувати suidутиліти замість dbusвідключення. На жаль, для цього немає стандартних параметрів конфігурації, і оскільки рух робочого столу вірить у приховування складності, вони не документують це в документації користувача, лише в документації для розробника, і вони передбачають єдину систему користувача, тому USB-накопичувачі працюють лише для перший користувач, який повинен увійти на X-сервер.


ТАК! Це більше, що я шукаю. Як новачок, я хотів би запитати, з чого почати шукати, erm: "З чого я починаю", щоб простежити за такою поведінкою [будь-який натяк допоможе мені перейти в бік; початкова точка або так допоможе дуже]
erch

2
@chirp почне вивчати погляд на udev (7) та
/etc/udev/rules.d/*

5

PolicyKit (або Polkit) - це інструментарій на рівні додатків для визначення та обробки політики, яка дозволяє непривілейованим процесам спілкуватися з привілейованими процесами .

Це основа для централізації процесу прийняття рішень щодо надання доступу до пільгових операцій (наприклад, виклику методу Mount ()) для непривілейованих (настільних) програм.

Агент автентифікації використовується для того, щоб користувач сеансу довів, що користувач сеансу дійсно є користувачем (шляхом автентифікації як користувач) або адміністративним користувачем (шляхом автентифікації як адміністратора).

GVFS - це віртуальна файлова система, яка дозволяє встановлювати локальні та віддалені файлові системи як користувача разом із підтримкою сміття. Існує також підтримка FUSE, яка дозволяє програмам, які не використовують GIO, отримувати доступ до файлових систем GVFS, але більшість ДЕ роблять аутентифікацію через Policykit і для інших речей, як, наприклад, сплячки та вимкнення комп'ютера та для NetworkManager, тому їм не потрібно використовувати FUSE.

Він складається з двох частин:

  1. Спільна бібліотека, завантажена програмами, що підтримують GIO;
  2. Сам GVFS, який містить колекцію демонів, які спілкуються між собою та модуль GIO через D-Bus.

Пакет gvfs потрібно встановити разом з polkit-gnome для правил polkit. Переконайтеся, що встановлений та автозапущений агент графічної аутентифікації встановлений та автозапущений.

Файли конфігурації для управління привілеями повинні бути різними для кожного розподілу. Arch Wiki пропонує вам створити файл під /usr/share/polkit-1/rules.d/. У Debian вони розташовані в /etc/polkit-1/.

Джерела: Політика щодо Debian || Polkit на Arch Wiki || GVFS на Arch Wiki || GVFS на GNOME Wiki!


Ви впевнені, що GIO означає GObject Introspection? Я би подумав, що це буде називатися ГО, якщо так. Люди Гнома, схоже, називають це ГІ . Я не знайшов іншого пояснення назви GIO, але , схоже, це не те саме, що GI.
terdon

@terdon Це фактично була редакція strugee (редакція 10 на unix.stackexchange.com/posts/101951/reitions ). Видалення ...
Teresa e Junior

4

Одним із поширених елементів, який ви шукаєте, є FUSE , gnfs GNOME, наприклад, використовує його під кришкою. 1 Це інтерфейс з ядром, і я вважаю, що він спільний для всіх непривілейованих (автоматичних) систем монтажу на Linux [але дивіться коментарі]. Окремі DE не створювали б свою власну версію, оскільки це вимагало б виправлення ядра.

Це посилання на домашню сторінку насправді застаріло, оскільки, як зазначалося тут , FUSE став частиною офіційного ядра кілька років тому, але він описує походження та цілі проекту (це стосується не лише непривілейованого монтажу).

Причина, за якою різні системи можуть відхилятися в стилі поза цим, є тією ж причиною, що у вас є різні середовища на робочому столі: вони представляють різні уявлення про те, яким / яким повинен бути графічний інтерфейс. Вони піклуються про форму та функції користувальницького інтерфейсу, але FUSE робить фактичні елементи монтажу та рівня ядра. Зверніть увагу , що FUSE на насправді не робити «авто» частини, це більше про «непривілейованих» частинах, але авто частина досить проста: все , що вам потрібно зробити , це опитування, наприклад, /dev. Я написав монтажну програму, яка працює таким чином; він просто стежить за появою нових вузлів. 2 Ця частина, можливо, сто рядків C ++. Легкий горох - немає реальної потреби в загальному API на цьому рівні.

1 Або, якщо це робиться справді непривілейоване кріплення. Відповідь Терези може охоплювати новіші підходи до дозволу доступу до звичайного кріплення.

2 Як зазначає hildred, зворотний виклик udev був би кращим, менш хакерським методом.


Напевно, ви мали на увазі "домашню сторінку", і я видалю цей коментар після того, як помилка друку зникла;) Чудова відповідь, як завжди, до речі!
erch

1
Оскільки наші відповіді, здається, суперечать одна одній, я зробив кілька тестів. Принаймні, в Debian без активного агента Polkit користувач не може встановити. Також модуль fuse.ko не завантажується навіть після монтажу. (Я використовую Thunar on Wheezy)
Teresa e Junior

3
@TeresaeJunior: Точка (я тут додав посилання), хоча я не думаю, що тут є суперечність, оскільки маршрут polkit - це трохи хитрість простору користувача - гора все ще є прихованою версією. Сторінка вікіпедії GVFS зазначає "GVFS може використовувати FUSE", тому я зроблю це "may" замість "does".
золотинок

1
З вікна GNOME: "Також є підтримка запобіжників, яка дозволяє програмам, які не використовують gio, отримати доступ до файлових систем gvfs."
Teresa e Junior

1
@TeresaeJunior: Так, вони подібні до одночасного, FUSE є резервним. Звичайно, GNOME - це не єдиний, де є DE, але я впевнений, що більшість інших використовують glib (до якого входить gio) різними способами. TBH Я ніколи не любив автоматичне управління, тому в мене немає анекдотів. У всякому разі, FUSE - це можливість.
золотинки
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.