О блоге

Все новые материалы размещаются на Блогосайте alv.me. Старые - в процессе переноса.

06.11.2008

Наброски к книге. 2. Настраиваем HAL

Кроме описанного ранее, есть и более радикальный метод настройки монтирования сменных носителей от лица пользователя -- использование механизма HAL (Hardware Abstraction Level). Правда, работает он только в Иксах, насколько мне известно, точно -- в интегрированных средах KDE, GNOME и Xfce, за менеджеры окон не скажу по незнанию; хотя, судя по тому, что порт hal идёт в качестве зависимости X-сервера, вероятно, и в некоторых из них этот механизм также поддерживается.

Итак, для начала необходимо установить соответствующий порт -- /usr/ports/sysutils/hal. Правда, как только что было сказано, при установке Иксов и какой-либо из интегрированных сред он уже будет инсталлирован как зависимость, причём вместе с графическим фронт-эндом к нему (в случае с GNOME и Xfce это будет порт /usr/ports/sysutils/gnome-mount).

Теперь -- собственно настройка. Она проста как грабли: отправляемся в каталог /usr/local/etc/PolicyKit и обнаруживаем там файл PolicyKit.conf. По умолчанию содержимое его следующее:
<config version="0.1">
<match user="root">
<return result="yes"/>
</match>
<define_admin_auth group="wheel"/>
</config>
Что предваряется следующей фразой:
<!-- See the manual page PolicyKit.conf(5) for file format -->
Руководствуясь man (5) PolicyKit.conf, между
    <define_admin_auth group="wheel"/>
и
</config>
дописываем следующие строки:
    <match action="org.freedesktop.hal.storage.mount-removable">
<return result="yes"/>
</match>
<match action="org.freedesktop.hal.storage.mount-fixed">
<return result="yes"/>
</match>
разрешающие членам группы wheel монтирование сменных и внутренних носителей, соответственно.

И после реинициализации системы (например, посредством временного перехода в однопользовательский режим или полного рестарта) получаем возможность автоматического монтирования сменных устройств сразу вслед за их помещением в привод или подсоединением к USB-порту.

Наброски к книге. 1. Монтирование сменных устройств

Начинающих пользователей FreeBSD, имеющих опыт работы в современных дистрибутивах Linux'а, часто раздражает необходимость получать права администратора для монтирования сменных накопителей (компакт-диски, флэшки, носители цифровых камер). И по умолчанию это действительно так, и попытки решить эту задачу простым редактированием файла /etc/fstab по образу и подобию Linux'ового успеха иметь не будут -- опция user, обеспечивающая эту функцию в последней ОС, командой mount из FreeBSD не поддерживается.

И тем не менее необходимость административных прав для монтирования сменных устройств во FreeBSD -- кажущаяся. Вот только для реализации права юзера на монтирование потребуются несколько иные действия.

Для начала, получив привилегии root'а, устанавливаем права доступа к файлам сменных устройств в файле /etc/devfs.conf, отвечающем за поведение файловой системы devfs:
perm    /dev/cd0     0666
perm /dev/xpt0 0666
perm /dev/pass0 0666
perm /dev/da0 0666
perm /dev/da0s1 0666
Заодно тут же снимаем символ комментария со строки
#link    acd0    cdrom
Благодаря этому при создании devfs (а она, как известно, пересоздаётся при каждом рестарте машины) будет устанавливаться символическая ссылка для файла /dev/cdrom (такое имя привода компакт-диска желают видеть некоторые программы, например, mplayer) на файл реального устройства acd0.

Затем в файле /ect/sysctl.conf разрешаем монтирование VFS от имени обычного пользователя:
vfs.usermount=1
Теперь возвращаем себе права обычного пользователя и от его имени создаём в домашнем каталоге точки монтирования для сменных устройств:
% mkdir ~/cdrom ~/usb
Проверяем правильность настроек командами:
% /sbin/mount -t vfat /dev/da0s1 ~/usb
% /sbin/mount -t cd9660 -o ro /dev/da0s1 ~/cdrom
Если монтирование проходит нормально, то вносим в файл /etc/fstab соответствующие строки:
/dev/acd0 /home/username/cdrom cd9660 ro,noauto 0 0
/dev/da0s1 /home/username/usb vfat rw,noauto 0 0
Однако возможно, что после всех предпринятых шагов флэшка или компакт откужутся монтироваться от лица пользователя, выдав предупреждение, что
Operation not permitted


Почему -- тайна сия велика есть, но такой результат не исключён. Однако и тут есть решение, даже два, правда, оба -- на уровне шаманских рецептов.

Первое решение -- это (от лица суперпользователя) присвоить командам /sbin/mount и /sbin/umount так называемый бит суидности:
# chmod a+s /sbin/mount /sbin/umount
Не очень изящно, но, говорят, работает.

Второе же решение -- вообще попахивает колдовством: произвести монтирование и размонтирование устройства от имени администратора в процессе инициализации системы. Проще всего это сделать посредством скрипта следующего содержания:
#!/bin/sh
mount /cdrom; umount /cdrom
mount /mnt; umount /mnt
который поместить в каталог /usr/local/etc/rc.d/ под именем, например, mount_umount.sh. Наличие компакта в приводе или флэшки, подсоединённой к USB-порту, не обязательно.

Мне с такой ситуацией сталкиваться не пришлось, поэтому не опробовал ни первый, ни второй способы. Но, по сведениям, работают оба.