udev rules.d - монитор HDMI с горячей заменой - скрипт не работает

Я пытаюсь заставить скрипт запускаться каждый раз, когда мой монитор 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.

4
задан 24 May 2017 в 01:39

2 ответа

опера? О нет! RUN только для коротких выполняющихся задач, udev выполняют команду в ограниченной среде.

Никакой поддерживаемый GUI, демон будет уничтожен сразу после окончания обработки событий.

, Если Вы хотите только протестировать, если правило инициировано, попробуйте это:

#!/bin/bash
date >> /root/myrule.log

Ссылка: man udev

ВЫПОЛНЕННЫЙ {тип}

Это может только использоваться для очень коротко рабочих приоритетных задач. Выполнение обработки события в течение длительного промежутка времени может заблокировать все дальнейшие события для этого или зависимого устройства.

Начинающие демоны или другие продолжительные процессы не подходит для udev; разветвленные процессы, отсоединенные или нет, будут безусловно уничтожены после того, как обработка событий закончилась.

0
ответ дан 24 May 2017 в 01:39
  • 1
    @dessert, вероятно, зависит, на каких словарях я установил – muru 11 November 2017 в 09:52

user.dz' ответ работы для меня только в первый раз. Этот подход работы для меня каждый раз:

KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/marco/.Xauthority", RUN+="/bin/bash /root/hdmi_hotplug.sh"
0
ответ дан 17 April 2019 в 02:54

Другие вопросы по тегам:

Похожие вопросы: