пятница, 19 февраля 2010 г.

Udev, Hal Автомонтирование

Задача: Иметь одинаковые названия устройств, в /dev и /media, и монтировать/отмонтировать устройства в pcmanfm.

0. Смотрим файл
nano /etc/PolicyKit/PolicyKit.conf
и ищем там правило
<match action="org.freedesktop.hal.storage.mount-removable">
<return result="yes" />
</match>
Если нет, то нужно его добавить
Смотрим файл
nano /etc/hal/fdi/policy/preferences.fdi

Он должен содержать следующее:


<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
<match key="storage.hotpluggable" bool="false">
<match key="storage.removable" bool="false">
<merge key="storage.automount_enabled_hint" type="bool">true</merge>
</match>
</match>
</device>
</deviceinfo>

1. Узнаем путь устройства, для этого в терминале нужно выполнить:
udevinfo -q path -n /dev/sdb1/
У меня вывод следующий
/block/sdb/sdb1
2. Смотрим характеристики устройства и ищем серийный номер устройства
udevinfo -a -p /block/sdb/sdb1
Вывод данной команды следующий, в нем нужно найти запись однозначно определяющую устройство, например serial
****
looking at parent device '/devices/pci0000:00/0000:00:04.1/usb2/2-2':
KERNELS=="2-2"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{dev}=="189:138"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="80"
ATTRS{bMaxPower}==" 80mA"
ATTRS{urbnum}=="15126"
ATTRS{idVendor}=="1307"
ATTRS{idProduct}=="0163"
ATTRS{bcdDevice}=="0100"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="480"
ATTRS{busnum}=="2"
ATTRS{devnum}=="11"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="0"
ATTRS{quirks}=="0x0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="USB 2.0"
ATTRS{product}=="Flash Disk"
ATTRS{serial}=="47115d84a03594"
****
т.е. искомая строка
ATTRS{serial}=="47115d84a03594"

3. Для изменения имен устройств в /dev нужно создать файл:
nano /etc/udev/rules.d/10-local.rules
и прописать там правила для устройств
ATTRS{serial}=="47115d84a03594", NAME="myflash"
4. Узнаем uuid устройства, для этого выполняем
ls -l /dev/disk/by-uuid/
Вывод команды в моем случае
***
lrwxrwxrwx 1 root root 13 2010-02-26 20:07 B8B9-29BC -> ../../myflash
***
Заметте имя устройства уже myflash, копируем uuid, у меня он B8B9-29BC

5. Создаем файл
sudo nano /etc/hal/fdi/policy/20-flash.fdi
Прописываем правило для устройства
<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
<match key="volume.uuid" string="B8B9-29BC">
<merge key="volume.label" type="string">myflash</merge>
</match>
</device>
</deviceinfo>
Все, теперь при подсоединении флешки, она определяетя в /dev и в /media и в pcmnfm одно имя устройства

з.ы. в файлах /etc/udev/rules.d/10-local.rules и /etc/hal/fdi/policy/20-flash.fdi можно создавать правила для нескольких устройств
з.ы.ы. у меня для фотика не оказалось uuid'a, пустая строчка, поэтому вместо него я взял block.device, ведь он тоже уникальныйб и известный мне (в данном случае /dev/myflash)
всю информацию о устройствах можно посмотреть запустив hal-device-manager, или консольный вариант hal-device

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