从 udev 规则启动 GUI 应用程序

从 udev 规则启动 GUI 应用程序

我试图在插入某个 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(不寒而栗)。

相关内容