Правила Udev CDROM не в состоянии запускать сценарии

Ниже приведен мой файл правил в /etc/udev/rules.d/10-autodvd.rules.

SUBSYSTEM=="block", KERNEL=="sr0", ENV{ID_CDROM_MEDIA_DVD}=="1", ACTION=="change", RUN+="/usr/local/bin/makemkv.sh sr0"
SUBSYSTEM=="block", KERNEL=="sr1", ENV{ID_CDROM_MEDIA_DVD}=="1", ACTION=="change", RUN+="/usr/local/bin/makemkv.sh sr1"
SUBSYSTEM=="block", KERNEL=="sr2", ENV{ID_CDROM_MEDIA_DVD}=="1", ACTION=="change", RUN+="/usr/local/bin/makemkv.sh sr2"
SUBSYSTEM=="block", KERNEL=="sr3", ENV{ID_CDROM_MEDIA_DVD}=="1", ACTION=="change", RUN+="/usr/local/bin/makemkv.sh sr3"
SUBSYSTEM=="block", KERNEL=="sr4", ENV{ID_CDROM_MEDIA_DVD}=="1", ACTION=="change", RUN+="/usr/local/bin/makemkv.sh sr4"

Кажется, это действительно ударил или пропустил на самом деле запуск сценариев, есть ли лучший способ сделать это?

1 ответ

Udev сортирует файлы правил лексически, и во время применения ваших правил ID_CDROM_MEDIA_DVD переменная, вероятно, еще не установлена. Это случай установки по умолчанию systemd udev. ID_CDROM* переменные установлены в 60-cdrom_id.rules, поэтому вы должны переименовать файл правил, чтобы отсортировать после этого.

Обратите внимание, что вы не должны запускать долго работающую программу с помощью клавиши RUN+=.

   RUN{type}
   [...]
       This can only be used for very short-running
       foreground tasks. Running an event process for
       a long period of time may block all further
       events for this or a dependent device.

       Starting daemons or other long-running
       processes is not appropriate for udev; the
       forked processes, detached or not, will be
       unconditionally killed after the event handling
       has finished.

Ваши правила могут быть записаны как одно правило:

SUBSYSTEM=="block", KERNEL=="sr[0-4]", ENV{ID_CDROM_MEDIA_DVD}=="1", ACTION=="change", RUN+="/usr/local/bin/makemkv.sh %k"
Другие вопросы по тегам