我正在尝试通过一些教程为我的 HP 耳机 (usb) 设置 udev 规则。
在 /etc/udev/rules.d 中创建了一个文件 ( 90-local.rules ),并添加了以下内容:
ACTION="add",SUBSYSTEM="usb", ATTR{vendor}=="Hewlett-Packard", RUN+="sh /home/alex/Scripts/usb.sh"
问题是当我连接耳机时什么都没发生!我做错了什么?
注意:我重启了 udev,脚本也运行正常,所以不是这个原因
答案1
你的 udev 规则没有问题。问题是你的脚本以及 udev 本身都运行
- 作为根– 不是您自己的用户帐户;
- 作为一个服务– 在您的登录会话之外;
因此无法访问您的 X11 显示器或 DBus 会话总线。
请记住,Linux 与 Unix 一样,从第一天起就支持多个并发登录会话,因此不存在“这用户”;可以有多个用户拥有多个 X11 显示器和多个 DBus 总线(甚至可能没有连接 X11 服务器)。
一种常见的解决方法是让脚本始终选择第一个 X11 显示器(通过DISPLAY=":0"
在脚本内部设置)。然而,这是不是保证正常工作——即使是单用户 PC 也可以运行两个或更多 X11 显示器(例如,您自己的桌面可能位于:1
,而:0
可能是登录屏幕或者根本没有运行)。
答案2
首先通过按 Alt-F2 尝试一下,然后在框中执行以下操作:/bin/sh -c“DISPLAY=:0.0 /usr/bin/notify-send foobar”请注意所有完整路径,并注意 shell 命令周围的双引号。