Пара слов о polkit

Если кто не знает, в Арче самая страшная команда вовсе не rm -rf /, а pacman -Syu --force. Но сейчас не совсем об этом. Мы тут некоторое время назад переехали с теплых ламповых initscripts на как бы богомерзкий systemd, а заодно с ним прилетела новая версия polkit и сломала монтирование в Thunar.

Монтирование, кстати, на моей памяти отваливается уже второй раз. Сначала главные красноглазики порешили, что встроенный .pkla Thunar-у не нужен и выпили его из пакета. Мы долго соображали, что же делать, но ничего лучше, кроме как вернуть его обратно, не придумали. А вот теперь уже сам polkit файлы .pkla отказывается понимать.

Что делать? Будем писать то, что polkit поддерживает, а именно .rules файлы. Лежать они должны в /etc/polkit-1/rules.d/, а называть их лучше как-то так: 99-my-cool.rules.

Чтобы разобраться с ними, нужно найти в себе силы прочитать man polkit (это и есть те самые «два слова» из названия сего полуночного бреда). Тем, кто маны в терминале не переваривает, могу предложить онлайновый вариант.

Я, признаюсь, сам этот ман раньше закрывал сразу, как только видел схему из раздела SYSTEM ARCHITECTURE. Но на самом деле там ничего страшного нет, разберётесь. Ну а ещё есть такой крутой редактор с подсказками и автоподстановкой — гугль называется :)

Чтобы не забыть самому, как же заставить этот бестолковый Thunar монтировать локальные диски по крайней мере до следующего обновления, приведу здесь соответствующее правило. Я его сделал в двух вариантах.

Первый проверяет имя пользователя %username%:

polkit.addRule(
    function(action, subject) {
        if (action.id == 'org.freedesktop.udisks2.filesystem-mount-system' && subject.user == '%username%') {
            return polkit.Result.YES;
        }
    }
);

второй — наличие пользователя в группе %groupname%:

polkit.addRule(
    function(action, subject) {
        if (action.id == 'org.freedesktop.udisks2.filesystem-mount-system' && subject.isInGroup('%groupname%')) {
            return polkit.Result.YES;
        }
    }
);

Выбирайте, что вам удобнее.

Кстати, после всех этих операций диски можно будет монтировать от пользователя не только из Thunar, но и из консоли:

udisksctl mount --block-device /dev/sdb1

Дополнительные материалы:

https://wiki.archlinux.org/index.php/Polkit
https://wiki.archlinux.org/index.php/Udisks

Комментарии (RSS)

Спасибо за статью, хотел добавить один момент. Можно добавлять правила не только для конкретного действия (как в статье), но и для всего udisks2:

polkit.addRule(function(action, subject) {
  if (action.id.match("org.freedesktop.udisks2.") && subject.isInGroup("storage")) {
    return polkit.Result.YES;
  }
});

Что прекрасно подойдет для домашних пользователей, которые хотят чтобы "просто работало". Только нужно чтобы пользователь был в группе "storage":

sudo gpasswd -a $USER storage
Ответить Отменить ответ

Спасибо, если мне память не изменяет, когда-то обошел эту проблему добавлением виндового раздела в fstab, но так, конечно, красивее и удобнее.

Ответить Отменить ответ

Спасибо, мучался через udev, постоянно задваивались съемные диски и отмонтировалось только от рута. Debian 8 XFCE

Ответить Отменить ответ