Правило udev не запускает приложение с графическим интерфейсом - PullRequest
0 голосов
/ 23 ноября 2018

Я могу получить это правило udev в 99-monitor-hotplug.rules для запуска:

ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", 
RUN+="/usr/local/bin/monitor-hotplug.sh"

Но я не могу заставить его запускать приложение OpenCV GUI в monitor-hotplug.Скрипт sh.

Я в принципе понимаю, что правило udev запускается от имени пользователя root, но независимо от того, какой синтаксис я пытаюсь использовать, я не могу заставить его работать должным образом на уровне пользователя для запуска приложения (сам скрипт для запуска приложения работает нормально).

Я пробовал в RUN этот формат:

su - your_X_user_here -c 'export DISPLAY=:0; bash -c "/path/to/script.sh"'

со скриптом:

#!/bin/bash
#sleep 5
date >> /var/log/opencvlog.log
cd ~/Downloads
./displayimage /home/<username>/Pictures/picture.png 
>/var/log/application.log 
2>&1

Другая попытка:

Добавление в 99-monitor-hotplug.ru ссылается на текущий синтаксис:

ACTION=="change", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", 
ENV{XAUTHORITY}="/home/<username>/.Xauthority" ENV{HOTPLUG}=="1", 
RUN+="/usr/local/bin/monitor-hotplug.sh"

, затем в фактическом сценарии:

export DISPLAY=:0
export XAUTHORITY=/home/<username>/.Xauthority
cd ~/Downloads
date 
./displayimage /home/<username>/Pictures/picture.png

Ничего из этого не работает, есть мысли о том, как заставить это работать?

Спасибо

1 Ответ

0 голосов
/ 26 ноября 2018

При использовании диспетчера отображения, такого как gdm, текущий файл полномочий X может быть не в домашнем каталоге пользователя, а в каталогах времени выполнения, таких как /run или /var/run.

. Вы можете попробовать что-то вроде:

USER=<username>
export XAUTHORITY=$(find /var/run/gdm3/ -type f -path "*${USER}*" 2> /dev/null)

Более новые версии gdm помещают файл в более общее место:

export XAUTHORITY=$(find /run/user/$(id -u "$USER")/ -name Xauthority 2> /dev/null)

Я использовал эту технику для вызова xrandr, чтобы отрегулировать разрешение экрана из правила udev:https://git.ao2.it/libam7xxx.git/blob/HEAD:/contrib/am7xxx-autodisplay.sh

...