Я пытаюсь запустить сценарий, расположенный usr/local/bin/
при подключении внешнего монитора к ноутбуку. Я пытался добавить новое udev
правило, но это не сработало. Я создал новый файл в /etc/udev/rules.d
Android vga-monitor-connect.rules
. Содержимое файла было
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/panel-fix"
Я взял строку из этого ответа
После поиска в Интернете я также попробовал следующее правило
KERNEL=="card0", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/rumesh/.Xauthority", RUN+="/usr/local/bin/panel-fix"
Однако это тоже не сработало.
Я запустил скрипт вручную, и я могу подтвердить, что он работает, так что это не проблема с моим скриптом.
Я также хочу прояснить, что я не знаю много о том, udev
поэтому правило, которое я использовал, может быть неправильным. Если кто-то знает правильное правило для моей проблемы, пожалуйста, оставьте ответ.
Моя видеокарта представляет собой интегрированный чипсет Intel GM965
Ответы:
Альтернативный способ выполнить команду, если экран подключен или отключен
Альтернативным решением было бы запустить крошечный фоновый скрипт. Запустив приведенный ниже сценарий в фоновом режиме, я не смог измерить какое-либо увеличение загрузки процессора.
Это простой и удобный способ запуска скрипта или любой другой команды, когда второй экран подключен или отключен.
Пример сценария
xrandr
(обратите внимание на пробел после «подключен», чтобы избежать ложных совпадений с «отключен»). Каждое вхождение представляет собой подключенный экран.Сценарий
Как пользоваться
connect_screen.py
В разделе заголовка установите команду для запуска по соединению (в качестве примера я привел «gedit», обратите внимание на кавычки). Также можно установить команду на отключение, аналогично. Остальное оставь
disconnect_command = ""
как есть.Если вы используете команду рассоединения, также раскомментируйте строку:
и закомментируйте строку:
Как указано в сценарии
Если все работает нормально, добавьте его в автозагрузку приложений: Dash> Startup Applications> Add the command:
sleep 15
, Чтобы сделать рабочий стол запустить полностью до того , как скрипт начинает работать. Просто чтобы убедиться.РЕДАКТИРОВАТЬ
Как запустить скрипт при запуске «умным» способом.
Прерывание
sleep 15
должно работать в целом, но поскольку время запуска отличается в зависимости от системы, может потребоваться некоторое экспериментирование, чтобы найти правильное время перерыва. С небольшим дополнением сценарий становится «умным» и ожидаетxrandr
успешного выполнения команды, прежде чем он запустит реальный сценарий. Если вы используете версию ниже, вам нужно только добавить команду:в ваши приложения запуска. Дальнейшее использование точно так же, как версия выше.
Сценарий
источник
$PATH
с расширением файла и с предыдущим языком - не слишком элегантное решение. Вопрос в том, хотите ли вы запустить его для одного пользователя или для всех пользователей. В последнем случае нужна другая настройка, чем предложенная, но желательно не та, которую вы предлагаете :).sleep 15
Не может быть достаточно, но более элегантное решение могло бы сделать перерыв «умный», пусть попробовать скрипт / за исключением того, чтобы запустить до тех пор , пока процедура запуска «готова» для сценария для запуска. Было бы незначительным дополнением. Дай мне знать.$PATH
не должны иметь языкового расширения и быть исполняемыми, поэтому запускайте безpython3
просмотра lintian.debian.org/tags/script-with-language-extension.htmlconnect_screen
Это может быть достигнуто с помощью следующего скрипта bash.
источник