суббота, 28 февраля 2015 г.

udev и права подключаемых устройств

Репост интересной заметки:

Очень странно, что форумные линуксятники в ответ на просьбу о помощи, очень редко отсылают к неотъемлемым частям линукса - udev/udisks/consolekit. Первое находит устройство, второе помогает удобно примонтировать их, третье - раздает примонтированным устройствам права и соединяет их с графическим десктопом. Как юзать это все вместе ? Очень просто. Задача: заставить систему монтировать съемные диски в определенное место, дать этой точки права для монтирования, чтобы пользователю не пришлось вводить пароль администратора...

Получается так:

Поставил пакет python2-udiskie
И прописал в .xprofile (или .xinitrc если он используется для старта сеанса) такой запуск дм:

exec ck-launch-session dbus-launch bash -c "udiskie & xfce4-session"

разрешил в /etc/udev/rules.d/80-cdrom.rules (можно и другое имя, но с расширением .rules) чтение-запись-запуск для всех:

KERNEL=="sr[0-9], MODE=="0777", GROUP=="optical", RUN+="/bin/mkdir -p /media/%E{dir_name}, RUN+=/bin/mount -t auto -o rw,relatime,noexec,nodev,utf8 /dev/%k /media/%E{dir_name}"
KERNEL=="sr[0-9], MODE=="0777", GROUP=="optical", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"   


Вообще-то одно из самых главных полей в rules - поле ACTION, но здесь, я умышленно опустил условие действия, чтобы не мешать Thunar-volman (менеджер томов) решать когда подключать том (диск) когда отмонтировать - это должно быть действием пользователя. Но можете и вставить ACTION="add" - в первую и ACTION="remove" во вторую, тогда cd/dvd будет примонтироваться сразу, как вставите.

Чтобы правила udev загрузились и начали работать, надо загрузить их (в root) командой:

udevadm control --reload

На этой стадии XFCE уже может видеть сменяемые накопители, и их можно уже опробовать примонтировать: в тунаре должны появиться закладки подключенных устройств. Но очень велика вероятность, что Thunar запросит пароль администрирования, чтобы примонтировать диск, вот для этого и нужен polkit, именно для того, чтобы присвоить нужные права нужному события, для сменяемого CD/DVD...

В том запросе пароля на примонтирование диска будет размещена ссылка типа "org.freedesktop..." - это то самое событие, которое и запросило root-привилегии, и чтобы не запрашивало, надо создать файл здесь /etc/polkit-1/localauthority/50-local.d/ , например 55-myconf.pkla хотя можно назвать и по-другому, главное с расширение. pkla. Мой файл /etc/polkit-1/localauthority/50-local.d/55-myconf.pkla выглядит так:

 [Storage Permissions]
 Identity=unix-group:storage;unix-group:optical
 Action=org.freedesktop.udisks.filesystem-mount;org.freedesktop.udisks.drive-eject;org.freedesktop.udisks.drive-detach;org.freedesktop.udisks.luks-unlock;org.freedesktop.udisks.inhibit-polling;org.freedesktop.udisks.drive-set-spindown;org.freedesktop.udisks.filesystem-mount-system-internal;org.freedesktop.udisks2.filesystem-unmount-others
 ResultAny=yes
 ResultActive=yes
 ResultInactive=yes   
Здесь: в поле Identify=unix-group - какой группе пользователей дозволено работать с этим событием без пароля, в данном примере - это группы storage или optical - ваш домашний пользователь должен быть в одной из этих групп, поле identify может приобретать и такой вид: identify=unix-user:* - здесь символ "звездочка" значит все пользователи могут вставлять диски в привод. В поле Action те самые ссылки, на те самые события, которые требуют не будь их в этом правиле, требуют административных привилегий. В моем случае именно эта: org.freedesktop.udisks2.filesystem-unmount-others - потребовала root-пароля

Кстати, с некоторых пор, если не прописать правила, папки для монтирования cd/dvd/usr создаются в папке /run/media/mylogin/{dir_name}

Поля Result - имеют отношение к активному включению этого правила. Если хотите, чтобы это правило работало - везде "yes", в противном случае - "no"

Ну вот и все: снова sudo udevadm control --reload - и вы будете наслаждаться фильмами с DVD или смотреть фотографии с фото-cd.

;-------------------------------------------------------------------------------------------------------------;
Теперь про кнопки управления питания, в xfce они могут оказаться заблокированными по тем-же самым причинам, недостаточности у пользователя прав, тоже репост:
;-------------------------------------------------------------------------------------------------------------;

Это один из самых часто встречающихся вопросов пользователей XFCE, про "неактивные" кнопки управления питанием: "Выключение", "Перезагрузка", "Ждущий", "Спящий", как я уже говорил тут, матерые линуксятники начинают сыпать советами, что-то поставить, что-то убрать, самый часто встречающийся совет, это прописать в ~/.xinitrc запуск ck-launch-session, который собственно редко кому помогает.

Помимо того, что сейчас все чаще вместо ~/.xinitrc начинает использоваться ~./.xprofile (и надо иметь копию .xinitrc в .xprofile) люди забывают, что управление питанием определяют правилами ConsoleKit-а, я уже упомянал об этой системе администрирования событийвыше...

Достаточно определить в /etc/polkit-1/localauthority/50-local.d/enable-shutdown.pkla такие правила, чтобы кнопки стали активными, а пользователи снова смогли от своего имени управлять питанием компьютера.
[enable shutdown]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.stop;org.freedesktop.consolekit.system.restart;org.freedesktop.upower.suspend;org.freedesktop.upower.hibernate
ResultAny=yes
ResultInactive=yes
ResultActive=yes   
Естественно, правило заработает после команды sudo udevadm control --reload

Ярлыки: , ,

Комментарии: 0:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.

Подпишитесь на каналы Комментарии к сообщению [Atom]

<< Главная страница