Udisks
Менеджер дисков udisks (пакет udisks2) предоставляет интерфейсы для операций с дисками и устройствами хранения данных.
udisks состоит из двух основных элементов:
- демон udisksd, который предоставляет интерфейсы D-Bus для управления устройствами хранения.
- утилита командной строки udisksctl, с помощью которой пользователь взаимодействует с демоном..
Действия, которые пользователь может выполнять с помощью udisks, ограничены использованием polkit.
Использование
По умолчанию udisks2 монтирует съёмные устройства в каталог /run//media/<имя_пользователя>/.
Команда монтирования udisksctl в отличие от команды mount может быть доступна непривилегированным пользователям.
Из командной строки монтирование может выполняться командой:
$ udisksctl mount -b /dev/<имя_носителя>
Размонтирование:
$ udisksctl unmount -b /dev/<имя_носителя>
Для более подробной информации см. udisksctl help.
Интерфейс работы с устройствами (Udisks и Udev)
1—3
Обнаружением и управлением устройствами в Linux занимается подсистема Udev.
Udev — это служба обнаружения, которая сообщает ядру, какие устройства подключены и где. Служба udev получает события (uevents) от устройств непосредственно от ядра всякий раз, когда устройство добавляется, удаляется из системы, или меняет своё состояние. Информация об устройствах хранится в базе данных менеджера. Udev управляет файлами устройств в каталоге /dev, добавляя их, переименовывая и создавая символические ссылки.
4
Демон udisksd предоставляет имя org.freedesktop.UDisks2 на системной шине сообщений. Этот демон автоматически запускается через dbus-daemon или systemd всякий раз, когда приложение пытается получить доступ к его интерфейсам D-Bus.
При подключении устройства, ядро отправляет сообщение Udev. Udisks использует библиотеку udev и связывается с демоном D-Bus. Приложение обращается к шине D-Bus и получает информацию о подключенном устройстве.
Уведомление о подключенном устройстве (например, флеш-накопителе USB) система может получить тремя способами:
- Напрямую от ядра через сообщения сокета Netlink (также как их получает udev).
- Через библиотеку udev, как это делает udisks. В pythone для этого существует библиотека pyudev.
- Через систему межпроцессного взаимодействия D-Bus, обращаясь через него к udisks.
5-6: Взаимодействие Udisks2 и Polkit
Ряд операций и методов менеджера дисков Udisks2 требует проверки привилегий пользователя через вызов демона Polkit. Udisks2 через шину DBus может запросить у Polkit сведения и узнать — есть ли привилегии у пользователя, в сессии которого предполагается выполнить определенную операцию. Монтирование файловой системы является одной из таких операций, требующих проверки привилегий клиента.