Как работает монтаж на GUI «под капотом»

12

ОБНОВИТЬ

Пожалуйста, исправьте меня, если я ошибаюсь : для работы на моем компьютере с дистрибутивом GNU / Linux с именем Debian я знаю два способа ввода команды, запуска приложения, открытия файла и т. Д .:

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

Есть что-то, что называется «Диспетчер окон». Поскольку я использую GNU / Linux, я работаю в системе X-Window [насколько я знаю].

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


Исходное сообщение


Ситуация : я отключил автомонтирование /etc/fstabдля USB-флешек [например /dev/sdb1]. Для монтирования требуется rootили, по крайней мере, sudoзапись в командной строке, но не в диспетчере окон (!) . Я не имею в виду automount, я имею в виду «нажатие на символ» в диспетчере окон открывает устройство в графическом интерфейсе без каких-либо вопросов, где в CLI должен быть root.

Вопрос : Как монтируется в графическом интерфейсе "под капотом"? Есть ли configфайл для оконных менеджеров вообще или нужно устанавливать это индивидуально?

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

erch
источник
1
кроме того, оконные менеджеры AFAIK не несут ответственности за это; важная вещь - (часть) окружающая среда рабочего стола, работающая под ним. Например, я использую Awesome GNOME - GNOME, используя Awesome вместо GNOME Shell - и диски автомонтируются. но они бы не стали, если бы я просто использовал Awesome. честно говоря, я не совсем понимаю вашу награду - ответ @ slm кажется довольно ясным.
стружка
2
В первые дни это был автомонтер, выполняющий эти трюки в фоновом режиме (почти с той же самой командой mount, которую вы использовали бы в root-cli). Теперь есть собственные подпроцессы, которые интегрируются с GUI, которые выполняют эту работу. Смотрите ответ от slm.
Нильс
5
«Мне трудно поверить, что каждому из [различных оконных менеджеров] придется искать свой собственный способ решения этой проблемы». -> Это никогда не делает оконный менеджер (WM). Это среда рабочего стола (DE). Что касается того, что им приходится делать это самим, они все делают для себя много других вещей. По выбору . Но они не должны. Например, GNOME имеет лицензию GPL, поэтому любой другой DE GPL'd может просто использовать части GNOME, если они этого захотят.
Златовласка
2
@goldilocks, что, например, Cinnamon и MATE сделали.
стружка
2
@strugee: GNOME имеет тесную историческую связь с GTK (которая изначально была для GIMP) и с библиотеками поддержки более низкого уровня ( glib ), которые также поддерживает GNU, и я считаю, что они распространены из GNOME и GTK. Я предполагаю, что почти все делают из glib, он предоставляет множество вещей, фундаментальных для многозадачного, управляемого событиями GUI «под капотом» (просто: не фактические графические части). Я думаю, что GNOME - это glib + gtk + менеджер windom + некоторые приложения.
Златовласка

Ответы:

5

Это мое понимание ситуации, но я не эксперт, поэтому он менее техничен, чем другие ответы. Это то, что я понимаю после использования этих систем в течение многих лет, я не изучал их в деталях.

Здесь есть три основных игрока, и между ними они управляют скакунами:

  • ПРЕДОХРАНИТЕЛЬ: Это в центре всего, как описано на его странице википедии :

    Файловая система в пользовательском пространстве (FUSE) - это механизм операционной системы для Unix-подобных компьютерных операционных систем, который позволяет непривилегированным пользователям создавать свои собственные файловые системы без редактирования кода ядра. Это достигается путем запуска кода файловой системы в пользовательском пространстве, в то время как модуль FUSE обеспечивает только «мост» с реальными интерфейсами ядра.

    Так что, в основном, это то, что позволяет непривилегированным пользователям монтировать файловые системы.

  • gvfs: В семействе настольных сред Gnome (включая Gnome, Mate, Cinnamon) это (среди прочего) демон, который автоматически монтирует новые подключенные диски. Это делается через FUSE. Я считаю (но вполне может ошибаться) эквивалент для семейства KDE называется KIO

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

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

    udev - менеджер устройств для ядра Linux. Прежде всего, он управляет узлами устройства в / dev. Он является преемником devfs и hotplug, что означает, что он обрабатывает каталог / dev и все действия в пространстве пользователя при добавлении / удалении устройств, включая загрузку прошивки.

    В частности, gvfsпохоже, работает через gvfs-udisks2-volume-monitorкоторый на основе udisks монитор громкости. udisksСам, однако, опирается udev(см. man 7 udisks).

Итак, в основном (читай «ужасное упрощение») происходит следующее: когда вы подключаете диск, udevобнаруживает его и предупреждает gvfsдемона, который затем монтирует его как устройство FUSE.

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

Тердон
источник
1
Поставь D-bus, заполняя промежутки между udev, gvfs и всем остальным.
Брайам
Вы можете обновить информацию о gvfs. Они переезжают в GIO.
Брайам
8

Это зависит от вашей оконной среды (GNOME / KDE / и т.д.), но в GNOME, например, вы увидите, что демоны работают с именем gvfs-*-volume-monitor. Эти демоны отвечают за монтирование устройств при запуске среды рабочего стола, они не имеют ничего общего /etc/fstabи работают совершенно независимо.

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

Это U & L Q & A под названием: Что такое gvfs и почему я должен хотеть его в моей системе? Попытки объяснить, что такое GVFS. Это хорошо справляется с объяснением. Но я думаю, что то, о чем вы на самом деле спрашиваете, в большей степени решается с помощью вопросов и ответов U & L под названием: Автоматическая установка USB-дисков (как это работает) .

SLM
источник
Ответ, кажется, в HAL... Я нашел несколько решений для thunar[которые я использую] и т. Д. В статье указывалось направление - спасибо за это! - но я все еще ищу общий знаменатель ...
erch
IIRC для DE не нужен root, потому что он использует FUSE (файловая система в пространстве пользователя).
стружка
@strugee догадываясь, что DE означает среду рабочего стола, я должен посмотреть в FUSE. У вас есть подсказка, где?
erch
@chirp поиск FUSE в Википедии: en.wikipedia.org/wiki/FUSE, IIRC. и slm уже ответил. Ответ заключается в том, что среда рабочего стола, а не менеджер окон, выполняет автоматическое монтирование.
стружка
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-сервер.

hildred
источник
ДА! Это больше того, что я ищу. Как новичок, я хотел бы спросить, с чего начать искать, эм: «С чего начать», чтобы проследить это поведение [любой намек поможет мне отвлечься; отправная точка или около того очень бы помогла]
erch
2
@chirp, чтобы начать изучать взгляды на udev (7) и /etc/udev/rules.d/*
hildred
5

PolicyKit (или Polkit) - это набор инструментов уровня приложения для определения и обработки политики, который позволяет непривилегированным процессам взаимодействовать с привилегированными процессами .

Это основа для централизации процесса принятия решений относительно предоставления доступа к привилегированным операциям (таким как вызов метода Mount ()) для непривилегированных (настольных) приложений.

Агент аутентификации используется, чтобы заставить пользователя сеанса доказать, что пользователь сеанса действительно является пользователем (путем аутентификации в качестве пользователя) или административным пользователем (посредством аутентификации в качестве администратора).

GVFS - это виртуальная файловая система, которая позволяет монтировать локальные и удаленные файловые системы как пользователь вместе с поддержкой корзины. Также имеется поддержка FUSE, которая позволяет приложениям, не использующим GIO, получать доступ к файловым системам GVFS, но большинство DE выполняют аутентификацию через 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/.

Источники: Policykit на Debian || Polkit на Arch Wiki || GVFS на Arch Wiki || GVFS в GNOME Wiki!

Тереза ​​и Джуниор
источник
Вы уверены, что GIO означает GObject Introspection? Я бы подумал, что это будет называться ГОИ, если так. Люди гномов, кажется, называют это GI . Я не нашел другого объяснения имени GIO, но оно не похоже на GI.
Terdon
@terdon Это было на самом деле редактирование Strugee (редакция 10 на unix.stackexchange.com/posts/101951/revisions ). Удаление это ...
Тереза ​​и младший
4

Один общий элемент , который вы ищете FUSE , GVFS гнома, например, использует , что под капотом. 1 Это интерфейс с ядром, и я считаю, что он является общим для всех непривилегированных (автоматических) систем монтирования в Linux [но см. Комментарии]. Отдельные DE не будут создавать свою собственную версию этого, так как это потребует исправления ядра.

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

Причина, по которой разные системы могут отличаться по стилю от этого, является той же самой причиной, по которой у вас разные среды рабочего стола: они представляют разные взгляды на то, каким / каким должен быть графический интерфейс. Они заботятся о форме и функциях пользовательского интерфейса, но FUSE выполняет фактическое монтирование и работу на уровне ядра. Обратите внимание , что FUSE на самом деле не делать «авто» части, это больше о «непривилегированных» частях, но авто часть довольно проста: все , что вам нужно сделать , это опрос, например, /dev. Я написал монтируемое приложение, которое работает таким образом; он просто следит за появлением новых узлов. 2 Эта часть может быть сто строк или около того C ++. Easy-peasy - нет реальной необходимости в общем API на этом уровне.

+1 Или может, если он делает действительно непривилегированное монтирование. Ответ Терезы может охватывать более новые подходы к разрешению доступа к обычным креплениям.

2 Как заметил Хилдред, обратные вызовы udev были бы лучшим, менее взломанным методом.

лютик золотистый
источник
Я думаю, вы имели в виду "домашнюю страницу", и я удалю этот комментарий после того, как опечатка исчезла;) Отличный ответ, как всегда, кстати!
erch
1
Поскольку наши ответы противоречат друг другу, я провел несколько тестов. По крайней мере, в Debian без активного агента Polkit пользователь не может подключиться. Также модуль fuse.ko не загружается даже после монтирования. (Я использую Thunar на Wheezy)
Teresa e Junior
3
@TeresaeJunior: Точка (я добавил сюда ссылку), хотя я не думаю, что здесь есть противоречие, поскольку маршрут polkit - это своего рода хитрость пользовательского пространства - монтирование все еще является привилегированным монтированием. На странице википедии GVFS указано "GVFS может использовать FUSE", поэтому я сделаю это "может" вместо "делает".
Златовласка
1
Из GNOME Wiki: «Существует также поддержка предохранителей, которая позволяет приложениям, не использующим gio, обращаться к файловым системам gvfs».
Teresa e Junior
1
@TeresaeJunior: Да, они вроде как параллельные, FUSE - запасной вариант. Конечно, GNOME - не единственный DE, но я уверен, что большинство других используют glib (включая gio) по-разному. TBH Мне никогда не нравилось автонастройка, поэтому у меня нет анекдотов об этом. В любом случае, FUSE - это возможность.
Златовласка