Правило горячего подключения монитора udev не работает

Улучшение ответа Полса :

Следующий код:

find /mnt/test -name '*.dav' -exec sh -c 'for filename do 
    if [[ $(basename "$filename") != C*.dav ]];then
        find "$filename" -type f -execdir ~/bin/rnm -y "$filename" -ns '/pd05/_/pd03/_/n/.dav' \;
    fi
done' find-sh {} \;

Можно оптимизировать вот так (без find или для цикла ):

rnm -y -ns '/pd5/_/pd3/_/n/.dav' -ss '^[^C].*\.dav$' -fo -dp -1 /mnt/test

Объяснение:

-ss : строка поиска (регулярное выражение). Используемое выше регулярное выражение ищет файлы, которые заканчиваются на .dav и не начинаются на C .

-fo : Режим только файлов.

-dp : Глубина. -1 означает неограниченную глубину, т.е. переход во все подкаталоги.

-ns : строка имени (новое имя)

/ pd / : правило строки имени, которое подразумевает разные уровни имен родительских каталогов: 0 - непосредственный родитель, 1 - выше это и так далее.

/ n / : Другое правило строки имени, которое подразумевает имя файла без расширения. /n/.dav можно заменить на / fn / (полное имя).

-y : подтвердить ( - да ) для всех.

1
09.05.2016, 07:37
1 ответ

Правило udev применяется к действию add по умолчанию. Правило udev действует на видеокарту, а не на монитор; поэтому оно запускается при добавлении видеокарты в систему, что на практике означает во время загрузки.

Подключение монитора приводит к действию change, а не add. Вы можете наблюдать это, выполнив udevadm monitor и подключив монитор. Поэтому в правиле udev должно быть указано действие change.

KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", \
    ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/var/run/gdm/auth-for-vazquez-OlbTje/database", RUN+="/usr/bin/arandr"

Примеры, найденные в Интернете, подтверждают мое понимание, например, codingtony, чей monitor-hotplug.sh скрипт может быть вам интересен.

Имя файла в /var/run меняется при каждой перезагрузке, поэтому вы должны определить его автоматически внутри вашего скрипта. Этот ответ должен помочь.

3
27.01.2020, 23:35

Теги

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