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 сведения и узнать — есть ли привилегии у пользователя, в сессии которого предполагается выполнить определенную операцию. Монтирование файловой системы является одной из таких операций, требующих проверки привилегий клиента.
Ссылки
Полезные советы
Чтобы не потерять информацию при записи на USB устройство, необходимо либо выполнить команду sync, либо отмонтировать устройство в файловом менеджере.
Можно также добавить в файл /etc/udisks2/mount_options.conf:
[defaults]
vfat_defaults=sync,uid=$UID,gid=$GID,shortname=mixed,utf8=1,showexec,flush
exfat_defaults=sync,uid=$UID,gid=$GID,iocharset=utf8,errors=remount-ro
iso9660_defaults=sync,uid=$UID,gid=$GID,iocharset=utf8,mode=0400,dmode=0500
iso9660_allow=sync,uid=$UID,gid=$GID,norock,nojoliet,iocharset,mode,dmode