LINUX.ORG.RU

Вызов dzen2 из udev rules


0

1

Привет, All!

Есть следующее правило, занимающееся автомонтированием флешек:
--------------------
# Import FS infos
IMPORT{program}=«/sbin/blkid -o udev -p %N»

# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}=«%E{ID_FS_LABEL}»
ENV{ID_FS_LABEL}=="", ENV{dir_name}=«usbhd-%k»

ACTION==«add», SUBSYSTEM==«block», KERNEL==«sd[c-z]*», RUN+=«mkdir -p %E{dir_name}» RUN+=«/usr/bin/pmount -c cp866 -u 000 -w -s -A /dev/%k %E{dir_name}» RUN+="(echo Mounted %E{dir_name}; sleep 1) | /usr/bin/dzen2 &"
ACTION==«remove», SUBSYSTEM==«block», KERNEL==«sd[c-z]*», RUN+=«/usr/bin/pumount /dev/%k», RUN+=«rm -rf %E{dir_name}», RUN+="(echo \«Unmounted %E{dir_name}\»; sleep 1) | /usr/bin/dzen2 &"
--------------------

В action'ах add и remove последний RUN+= выглядит так:
RUN+="(echo (Un)Mounted %E{dir_name}; sleep 1) | /usr/bin/dzen2 &"
и не работает.

Команда (echo UnMounted stuff; sleep 1) | /usr/bin/dzen2 &, вызванная в консоли, отрабатывает нормально.

Подскажите пожалуйста, как переписать команду так, чтобы dzen2 срабатывал из udev rules? google ничего путного по запросу dzen2 udev rules не дал.

Заранее спасибо.

WBR,
DiaWorD

Ответ на: комментарий от AITap

Спасибо за ответ, но оно по-прежнему не работает. Может dzen2 еще какие переменные окружения нужны?

И есть ли возможность посмотреть ошибки, выдаваемые правилами udev?

DiaWorD
() автор топика
Ответ на: комментарий от AITap

Еще одна странность - даже это не работает: ACTION==«add», SUBSYSTEM==«block», KERNEL==«sd[c-z]*», RUN+=«mkdir -p %E{dir_name}», RUN+=«/usr/bin/pmount -c cp866 -u 000 -w -s -A /dev/%k %E{dir_name}», RUN+=«/bin/echo test > /var/log/dzen2.log» Не создается dzen2.log

Или udev, или руки...

DiaWorD
() автор топика
Ответ на: комментарий от AITap

udevadm info --query-all --name=sdc
P: /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host35/target35:0:0/35:0:0:0/block/sdc
N: sdc
S: block/8:32
S: disk/by-id/usb-QUMO_USB_FLASH_DRIVE_909110005595-0:0
S: disk/by-path/pci-0000:00:1d.7-usb-0:4:1.0-scsi-0:0:0:0
S: disk/by-uuid/3697-B1B7
S: disk/by-label/FL4GN1
E: UDEV_LOG=0
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host35/target35:0:0/35:0:0:0/block/sdc
E: SUBSYSTEM=block
E: DEVNAME=sdc
E: ID_FS_LABEL=FL4GN1
E: ID_FS_LABEL_ENC=FL4GN1
E: ID_FS_UUID=3697-B1B7
E: ID_FS_UUID_ENC=3697-B1B7
E: ID_FS_VERSION=FAT32
E: ID_FS_TYPE=vfat
E: ID_FS_USAGE=filesystem
E: dir_name=FL4GN1
E: ID_VENDOR=QUMO
E: ID_VENDOR_ENC=QUMO\x20\x20\x20\x20
E: ID_VENDOR_ID=0dd8
E: ID_MODEL=USB_FLASH_DRIVE
E: ID_MODEL_ENC=USB\x20FLASH\x20DRIVE\x20
E: ID_MODEL_ID=1778
E: ID_REVISION=PMAP
E: ID_SERIAL=QUMO_USB_FLASH_DRIVE_909110005595-0:0
E: ID_SERIAL_SHORT=909110005595
E: ID_TYPE=disk
E: ID_INSTANCE=0:0
E: ID_BUS=usb
E: ID_USB_INTERFACES=:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=usb-storage
E: ID_PATH=pci-0000:00:1d.7-usb-0:4:1.0-scsi-0:0:0:0
E: MAJOR=8
E: MINOR=32
E: DEVTYPE=disk
E: DEVLINKS=/dev/block/8:32 /dev/disk/by-id/usb-QUMO_USB_FLASH_DRIVE_909110005595-0:0 /dev/disk/by-path/pci-0000:00:1d.7-usb-0:4:1.0-scsi-0:0:0:0 /dev/disk/by-uuid/3697-B1B7 /dev/disk/by-label/FL4GN1


udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[1289743570.362933] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4 (usb)
KERNEL[1289743570.363025] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0 (usb)
KERNEL[1289743570.365078] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37 (scsi)
KERNEL[1289743570.365136] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/scsi_host/host37 (scsi_host)
UDEV [1289743570.370940] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4 (usb)
UDEV [1289743570.373970] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0 (usb)
UDEV [1289743570.376257] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37 (scsi)
UDEV [1289743570.378454] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/scsi_host/host37 (scsi_host)
KERNEL[1289743571.415168] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0 (scsi)
KERNEL[1289743571.415237] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0/37:0:0:0 (scsi)
KERNEL[1289743571.415282] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0/37:0:0:0/scsi_disk/37:0:0:0 (scsi_disk)
KERNEL[1289743571.416239] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0/37:0:0:0/scsi_device/37:0:0:0 (scsi_device)
KERNEL[1289743571.416322] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0/37:0:0:0/scsi_generic/sg2 (scsi_generic)
UDEV [1289743571.417803] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0 (scsi)
UDEV [1289743571.420175] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0/37:0:0:0 (scsi)
UDEV [1289743571.424242] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0/37:0:0:0/scsi_device/37:0:0:0 (scsi_device)
UDEV [1289743571.424297] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0/37:0:0:0/scsi_disk/37:0:0:0 (scsi_disk)
UDEV [1289743571.427168] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0/37:0:0:0/scsi_generic/sg2 (scsi_generic)
KERNEL[1289743571.664927] change /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0/37:0:0:0 (scsi)
UDEV [1289743571.668165] change /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0/37:0:0:0 (scsi)
KERNEL[1289743571.669317] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0/37:0:0:0/block/sdc (block)
KERNEL[1289743571.670640] add /devices/virtual/bdi/8:32 (bdi)
UDEV [1289743571.672721] add /devices/virtual/bdi/8:32 (bdi)
UDEV [1289743572.110945] add /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/host37/target37:0:0/37:0:0:0/block/sdc (block)

DiaWorD
() автор топика
Ответ на: комментарий от AITap

Фишка в том, что флешка этим правилом отлично монтируется. Не исполняется исключительно вывод в лог.

DiaWorD
() автор топика
Ответ на: комментарий от DiaWorD

А если /bin/sh -c '/bin/echo test > /var/log/test.txt' ?

Кстати, может быть, имеет смысл написать эдакую систему из dbus-«сервера» и «клиента», где «клиента» запускает udev при подключении флешки, а «сервер» слушает в графическом сеансе пользователя и рисует окошки с уведомлениями?

AITap ★★★★★
()
Ответ на: комментарий от AITap

А вот это «если» заработало, спасибо :-)

Сейчас попробую более сложный конструкт.

клиент-сервер на базе udev слишком сложен архитектурно для такой мелочи - неохота из пушки по воробьям.

DiaWorD
() автор топика
Ответ на: комментарий от DiaWorD

Ну, в настоящих DE всё именно так и сделано: через HAL или devkit и dbus.

Кстати, udisks вполне можно приспособить для монтирования от пользователя.

AITap ★★★★★
()
Ответ на: комментарий от AITap

AITap,
Огромное спасибо. Работает. Теме добавляю тег [SOLVED]

Обновленное правило:
# Import FS infos
IMPORT{program}=«/sbin/blkid -o udev -p %N»

# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}=«%E{ID_FS_LABEL}»
ENV{ID_FS_LABEL}=="", ENV{dir_name}=«usbhd-%k»

ACTION==«add», SUBSYSTEM==«block», KERNEL==«sd[c-z]*», RUN+=«mkdir -p %E{dir_name}», RUN+=«/usr/bin/pmount -c cp866 -u 000 -w -s -A /dev/%k %E{dir_name}», RUN+=«/bin/sh -c '(echo Mounted %E{dir_name}; sleep 1) | env DISPLAY=:0.0 XAUTHORITY=/home/diaword/.Xauthority /usr/bin/dzen2 &'»
ACTION==«remove», SUBSYSTEM==«block», KERNEL==«sd[c-z]*», RUN+=«/usr/bin/pumount /dev/%k», RUN+=«rm -rf %E{dir_name}», RUN+=«/bin/sh -c '(echo Unmounted %E{dir_name}; sleep 1) | env DISPLAY=:0.0 XAUTHORITY=/home/diaword/.Xauthority /usr/bin/dzen2 &'»

DiaWorD
() автор топика
Ответ на: комментарий от AITap

Про udisks не слышал, буду посмотреть если pmount устраивать перестанет.

DiaWorD
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.