我试图在插入某个 USB 设备时启动 GUI 应用程序。 udev 规则被触发,但该应用程序确实出现在我的屏幕上。从另一个 TTY 运行脚本使应用程序在我的图形环境中打开。我还可以通过将规则中的日期附加到文件来确认规则是否被触发。
/etc/udev/rules.d/99-betaflight.rules:
SUBSYSTEMS=="usb", ATTR{serial}=="314839673237", RUN+="/usr/bin/su daniel -c '/home/daniel/bin/betaflight-configurator'"
/home/daniel/bin/betaflight-configurator:
#!/bin/bash
export DISPLAY=:1
/opt/betaflight/betaflight-configurator/betaflight-configurator
我的理解是 GUI 应用程序启动有困难,因为它不是在 X 服务器的上下文中启动的。不过,从另一个 tty 运行代码可以完美地打开应用程序。
我需要做哪些改进才能使应用程序在插入 USB 设备时运行?
答案1
您不应该从 udev 规则启动任何长时间运行的程序——udevd 会在短时间内杀死它们,即使您尝试在后台运行它们(通过&
脚本)。它还会给他们的道路设置其他障碍。
不推荐的方法是安装atd
守护进程并使用 启动它们echo some_command | at now
。您会在网上找到很多这样的例子。
你实际上应该做什么取决于你拥有什么样的系统——对于“现代”系统,你将别无选择,只能学习如何使用 systemd(不寒而栗)。