udisks (Русский)
udisks состоит из двух основых элементов: демона udisksd с реализоваными в нём интерфейсами D-Bus для запросов к устройствам хранения данных и управления ими, а также утилиты командной строки udisksctl, с помощью которой пользователь взаимодействует с демоном.
Contents
Установка
Существует две версии udisks, udisksAUR и udisks2. Разработка udisks была прекращения с целью сосредоточиться на udisks2 [1].
Демоны udisksd(8) (для udisks2) и udisks-daemon
(для udisks) запускаются D-Bus по требованию, поэтому включать их вручную не нужно. Управление данными демонами происходит с помощью утилит командной строки udisksctl(1) и udisks(1) соответственно.
Настройка
Набор действий, которые пользователь может выполнять с udisks, определяется разрешениями Polkit. Если пользовательский сеанс неактивен или не существует вовсе (например, при управлении udisks из службы systemd/Пользователь), необходимо соответствующим образом настроить Polkit.
В [2] описаны стандартные настройки прав для группы storage
, в [3] приведён пример с более жёсткими ограничениями. Если вы используете Dolphin, то стоит также изучить [4].
Использование
Следующая команда выполнит монтирование съёмного устройства, например, /dev/sdc
:
$ udisksctl mount -b /dev/sdc1
Размонтирование:
$ udisksctl unmount -b /dev/sdc1
Подробнее см. вывод команды udisksctl --help
.
Советы и рекомендации
Программы для монтирования
Существует ряд программ-обёрток для udisks, которые позволяют настроить автоматическое монтирование устройств. См. также Список приложений/Утилиты#Монтирование.
- bashmount — Сценарий Bash для монтирования и управления съёмных устройств обычным пользователем с помощью udisks2.
- udiskie — Программа автоматического монтирования для udisks2 с уведомлениями, иконкой в системном трее и поддержкой защищённых паролем LUKS-устройств. Подробнее см. udiskie wiki
- udisksvm — Обёртка для udisks2 с графическим интерфейсом, написанная на Python3 с использованием фреймворка Qt5. Монтирование/размонтирование съёмных устройств и извлчение CD/DVD кликами мыши. Подробнее см. README.
- udevil — Включает в себя devmon, который совместим с udisks и udisks2.
udevadm monitor
Команду udevadm monitor
можно использовать для отслеживания событий с блочными устрайсвами, а также для монтирования их при создании. Неактуальные точки монтирования удаляются демоном udiskd в автоматическом режиме, поэтому специальных действий по их удалению предпринимать не нужно.
#!/bin/sh pathtoname() { udevadm info -p /sys/"$1" | awk -v FS== '/DEVNAME/ {print $2}' } stdbuf -oL -- udevadm monitor --udev -s block | while read -r -- _ _ event devpath _; do if [ "$event" = add ]; then devname=$(pathtoname "$devpath") udisksctl mount --block-device "$devname" --no-user-interaction fi done
Монтирование в /media (udisks2)
По умолчанию udisks2 монтирует съёмные устройства каталог /run/media/$USER/
, находящийся под управлением ACL. Если вы желаете изменить каталог монтирования на /media
, создайте следующее правило udev:
/etc/udev/rules.d/99-udisks2.rules
# UDISKS_FILESYSTEM_SHARED # ==1: mount filesystem to a shared directory (/media/VolumeName) # ==0: mount filesystem to a private directory (/run/media/$USER/VolumeName) # See udisks(8) ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"
Поскольку каталог /media
в отличие от /run
не монтируется по умолчанию с файловой системой tmpfs, возможно, вы также захотите создать сниппет в каталоге tmpfiles.d, который будет удалять устаревшие точки монтирования при каждой загрузке:
/etc/tmpfiles.d/media.conf
D /media 0755 root root 0 -
Монтирование петлевых устройств
Для монтирования ISO-образов воспользуйтесь следующей командой:
$ udisksctl loop-setup -r -f image.iso
Это создаст петлевое устройство и сделает образ готовым к монтированию. После размонтирования udev удалит петлевое устройство.
Сокрытие отдельных разделов
Если вы не хотите, чтобы определённые разделы или носители отображались на рабочем столе, можно создать правило udev, например, /etc/udev/rules.d/10-local.rules
:
KERNEL=="sda1", ENV{UDISKS_PRESENTATION_HIDE}="1" KERNEL=="sda2", ENV{UDISKS_PRESENTATION_HIDE}="1"
В результате на рабочем столе будут отображаться все разделы, кроме sda1
и sda2
. Имейте в виду, что если вы используете udisks2, то это не сработает, потому что переменная UDISKS_PRESENTATION_HIDE
больше не поддерживается. Вместо неё используйте UDISKS_IGNORE
:
KERNEL=="sda1", ENV{UDISKS_IGNORE}="1" KERNEL=="sda2", ENV{UDISKS_IGNORE}="1"
Поскольку названия блочных устройств могут изменяться от загрузки к загрузке, то имеет смысл использовать UUID раздела или устройства, который можно узнать командой blkid /dev/sdX
:
# blkid /dev/sdX
/dev/sdX: LABEL="Filesystem Label" UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX" UUID_SUB="YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY" TYPE="btrfs"
После этого можно создать следующее правило:
SUBSYSTEM=="block", ENV{ID_FS_UUID}=="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX", ENV{UDISKS_IGNORE}="1"
Помимо обыного применения, этим правилом можно также скрыть целую файловую систему btrfs с несколькими устройствами, поскольку в этой системе UUID всех устройств совпадает, а различия определяются на основании SUB_UUID.
Применение настроек ATA (udisks2)
При запуске системы и при подключении устройства демон udiskd применяет настройки из файла /etc/udisks2/ИДЕНТИФИКАТОР.conf
, где ИДЕНТИФИКАТОР
— значение параметра Drive:Id для данного устройства. В настоящее время в udisks существует поддержка настроек ATA. Список доступных опций можно посмотреть в руководстве udisks(8). Данные настройки по сути не отличаются от настроек hdparm, за тем исключением, что настройки ATA сохранятся при последующих автозапусках демона udisks.
Например, следующие настройки зададут для устройства время ожидания 240 (20 минут):
/etc/udisks2/DriveId.conf
[ATA] StandbyTimeout=240
Значение DriveId можно узнать командой udevadm info --query=all --name=sdx | grep ID_SERIAL | sed "s/_/-/g"
В качестве альтернативы для работы с файлом настроек можно использовать графическую утилиту gnome-disk-utility.
udisks2 + polkit: монтирование без аутентификации
Иногда во время монтирования блочного устройства udisks2 может запросить аутентификацию.
Чтобы пользователи из определённой группы (например, группы wheel
в примере ниже) могли монтировать устройства без аутентификации, создайте следующее правило:
/etc/polkit-1/rules.d/99-udisks2.rules
polkit.addRule(function(action, subject) { if ((action.id == "org.freedesktop.udisks2.filesystem-mount-system" || action.id == "org.freedesktop.udisks2.filesystem-mount") && subject.isInGroup("wheel")) { return polkit.Result.YES; } });
Чтобы изменить целевую группу пользователей, отредактируйте следующую строку:
subject.isInGroup("имя_группы"))
См. также polkit(8).
Решение проблем
Скрытые устройства (udisks2)
udisks2 по умолчанию скрывает от пользователя некоторые устройства. Если такое поведение нежелательно, скопируйте файл /usr/lib/udev/rules.d/80-udisks2.rules
в /etc/udev/rules.d/80-udisks2.rules
и удалите в файле-копии следующий раздел:
# ------------------------------------------------------------------------ # ------------------------------------------------------------------------ # ------------------------------------------------------------------------ # Devices which should not be display in the user interface [...]
Устройства не остаются размонтированными (udisks)
udisks либо заново монтирует устройства по истечении некоторого периода, либо опрашивает такие устройства. Это может вызвать нежелательные эффекты, например, при форматировании дисков, совместной работе с ними в виртуальной машине, при работе в режиме энергосбережения или при удалении устройства, которое не было ранее отключено с параметром --detach
.
Следующая команда отключит опрашивание выбранного CD/DVD устройства:
# udisks --inhibit-polling /dev/sr0
То же самое, но для всех устройств одновременно.
# udisks --inhibit-all-polling
Подробнее см. udisks(8).
Неправильно работает таймер ожидания (udisks2)
Демон udisks регулярно опрашивает устройства с целью сбора S.M.A.R.T.-данных. Жесткие диски, временя ожидания которых больше интервала опрашивания, могут не успевать войти в режим standby. Устройства, которые уже вошли в этот режим, данной проблеме не подвержены. Судя по всему, в настоящий момент в udisks2 не предусмотрено способа отключить опрашивание устройств или изменить интервал. См. [5] и [6].
Тем не менее, время ожидания в udisks2 изменить можно. Подробнее см. #Применение настроек ATA (udisks2).
Другие возможные обходные решения заключаются в задании отдельной задержки перед интервалом опрашивания (10 минут) или в ручном переводе диска в замедленный режим командой hdparm -y /dev/sdx
.
Не удаётся смонтировать NTFS-раздел
Если монтирование NTFS-раздела завершается неудачно с ошибкой
Error mounting /dev/sdXY at [...]: wrong fs type, bad option, bad superblock on /dev/sdXY, missing codepage or helper program
или какой-то другой, а команды journalctl
/dmesg
находят в логах ядра сообщение
ntfs: (device sdXY): parse_options(): Unrecognized mount option windows_names.
то проблема скорее всего в том, что udisks пытается использовать драйвер NTFS, который не понимает текущие опции монтирования.
Для решения проблемы установите NTFS-3G в качестве опциональной зависимости.
Смотрите также
- Gentoo:udisks (англ.)
- Введение в udisks (англ.)