Файл /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. Мне не нравится это решение, потому что оно влияет на другие части системы.
Так почему приложения закрываются и как это предотвратить?
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
.