Я пытаюсь заставить скрипт запускаться каждый раз, когда мой монитор HDMI подключен, и после некоторого чтения я нашел этот и в нем просит меня создать 99-monitor-hotplug.rules и поместить это /etc/udev/rules.d и укажите, какой скрипт я хочу запустить. Правило выглядит так:
ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/root/hotplug.sh"
Ну, я сделал это, но скрипт не запускается. Я знаю это, потому что в сценарии все, что у меня есть, это:
#!/bin/bash
opera
Я специально сделал сценарий настолько простым, чтобы я мог видеть, что что-то происходит. Когда я вызываю скрипт из командной строки, Opera действительно запускается.
Вот что происходит, когда я подключаю и отключаю свой монитор HDMI, когда запущено « udevadm monitor --property »:
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
KERNEL[730.834194] change /devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 (drm)
ACTION=change
DEVNAME=/dev/dri/card1
DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1
DEVTYPE=drm_minor
HOTPLUG=1
MAJOR=226
MINOR=1
SEQNUM=3245
SUBSYSTEM=drm
UDEV [730.835499] change /devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 (drm)
ACTION=change
DEVNAME=/dev/dri/card1
DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_01_00_0
ID_PATH=pci-0000:01:00.0
ID_PATH_TAG=pci-0000_01_00_0
MAJOR=226
MINOR=1
SEQNUM=3245
SUBSYSTEM=drm
TAGS=:seat:uaccess:master-of-seat:
USEC_INITIALIZED=3217504
KERNEL[738.204082] change /devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 (drm)
ACTION=change
DEVNAME=/dev/dri/card1
DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1
DEVTYPE=drm_minor
HOTPLUG=1
MAJOR=226
MINOR=1
SEQNUM=3246
SUBSYSTEM=drm
UDEV [738.206107] change /devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 (drm)
ACTION=change
DEVNAME=/dev/dri/card1
DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_01_00_0
ID_PATH=pci-0000:01:00.0
ID_PATH_TAG=pci-0000_01_00_0
MAJOR=226
MINOR=1
SEQNUM=3246
SUBSYSTEM=drm
TAGS=:seat:uaccess:master-of-seat:
USEC_INITIALIZED=3217504
После добавления правила я сделал run: sudo udevadm control --reload-rules
Может кто-нибудь помочь, пожалуйста? У меня такое чувство, что правило может быть неправильным, и я новичок в создании правил udev. Я использую Ubuntu 16.04.
опера? О нет! RUN
только для коротких выполняющихся задач, udev выполняют команду в ограниченной среде.
Никакой поддерживаемый GUI, демон будет уничтожен сразу после окончания обработки событий.
, Если Вы хотите только протестировать, если правило инициировано, попробуйте это:
#!/bin/bash
date >> /root/myrule.log
Ссылка: man udev
ВЫПОЛНЕННЫЙ {тип}
Это может только использоваться для очень коротко рабочих приоритетных задач. Выполнение обработки события в течение длительного промежутка времени может заблокировать все дальнейшие события для этого или зависимого устройства.
Начинающие демоны или другие продолжительные процессы не подходит для udev; разветвленные процессы, отсоединенные или нет, будут безусловно уничтожены после того, как обработка событий закончилась.
user.dz' ответ работы для меня только в первый раз. Этот подход работы для меня каждый раз:
KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/marco/.Xauthority", RUN+="/bin/bash /root/hdmi_hotplug.sh"