Приложение, запущенное по правилу Udev, закрывается через 4 секунды

Файл /etc/udev/rules.d/90-test.rules:

ACTION=="add", SUBSYSTEM=="usb", ENV{DISPLAY}=":0", ENV{HOME}="/home/user", RUN+="/etc/udev/rules.d/test.sh"

Файл /etc/udev/rules.d/test.sh:

#!/usr/bin/env bash
/usr/bin/kcalc &

Когда я подключаю USB-устройство, kcalc запускается, как и ожидалось (2 раза, потому что правило остается простым). Но через 4-5 секунд kcalc снова закрывается. Я также пробовал это с помощью nohup, но безуспешно. То же самое происходит и с другими приложениями, такими как konsoleи kate.

Когда я не запускаю kcalc в фоновом режиме (без &), он не закрывается, но кажется, что дальнейшая обработка заблокирована. Device Notifier уведомляет меня только после того, как я закрыл kcalc. Мне не нравится это решение, потому что оно влияет на другие части системы.

Так почему приложения закрываются и как это предотвратить?

0
15.06.2020, 16:38
1 ответ

Из справочной страницы udev

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.

Таким образом, лучше всего использовать udevдля запуска службы systemd, которая в конечном итоге запускает ваш скрипт, как в

RUN{program}="/bin/systemctl start my_service.service"

, где вы должны написать соответствующий файл .service.

1
18.03.2021, 23:27

Теги

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