запуск GUI программ по событиям UDEV

народ подскажите пожайлуйста способ, и есть ли вообще такой, чтобы запускать большие программы по событию UDEV
само событие прекрасно отрабатывает, но кроме простых программ создания/удаления файлов и т.д. ничего не запускается
nohup и & не помагает, после них удаву все же как то удается резать более навороченные проги.
Только один выход в голове - делать и отслеживать симлинки но это же костыль костыльный.
Обработка события UDEV должна завершиться за короткое время, поэтому он убивает дочерние процессы, превысившие таймаут выполнения, считая их "зависшими".

Отвязать обработчик от UDEV можно, использовав в качестве посредника systemd: команда /usr/bin/systemctl --no-block start юнит посылает systemd сообщение о том, что надо запустить, и правило UDEV благополучно завершается.
Разумеется, сам обработчик для этого нужно вписать в юнит.

Пример использования.

P.S.
Если событие это появление устройства, привязать к нему юнит можно и другим способом, без помощи UDEV.
Для этого можно создать каталог вида /etc/systemd/system/юнит-устройства.device.wants , и в нём – симлинк на юнит обработчика.
Юниты устройств systemd создаёт автоматически, точное имя можно посмотреть в писке юнитов по команде systemctl.
не получается запустить тот же gedit через предложенную схему, но хоть создать файл через sudo от др пользователя заработало. С командной строки скрипт работает, exec не помогает. ЧЯДН?
aspiring
не получается запустить тот же gedit
:)

Кто ж знал, что вы пытаетесь запускать из UDEV не простые программы, а иксовые(!) гуи от пользователя!
Предложенная схема вполне годится для демонов, а для запуска иксовых программ потребуется дополнительно воссоздавать всё пользовательское окружение, включая привязку к активному в данный момент сеансу иксов, который, для начала, надо ещё определить...

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

По-моему, было бы проще запустить какую-то следилку изначально внутри иксового окружения, чтобы она мониторила события и запускала что требуется.
у меня задача такая, после включении БТ гарнитуры (тумблер на самой гарнитуре) переподключать ее как БТ устройство, так как с первого раза она определяется не правильно (как именно еще не знаю). После этого запускать ekiga. Спасибо за наводку, буду рыть.
aspiring
export DISPLAY=:0.0
shift 2
user=`ps -C dwm -o user=`
su $user -c "/bin/program"
можно так попробовать. только ваше окружение укажите что корректно определить пользователя.

Natrio
.device.wants, а какая разница всё равно же сигнал udev даёт.
Ошибки в тексте-неповторимый стиль автора©
indeviral
правила в удаве прописывать не надо
indeviral спасибо!
export DISPLAY=:0.0
su user -c "/bin/program"
работает!

не пойму почему не работает
su - user
export DISPLAY=:0.0
/bin/program
 
Зарегистрироваться или войдите чтобы оставить сообщение.