每当我连接到蓝牙耳机时,我都会尝试自动运行此脚本。
我已经用以下行创建了文件 /etc/udev/rules.d/80-bt-headset.rules
ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="00:22:37:3D:DA:50" RUN+="/home/USER/.local/bin/a2dp.py 00:22:37:3D:DA:50"
Run Code Online (Sandbox Code Playgroud)
但它没有做任何事情。条件很好,当我输入时会触发一个简单的测试命令。手动运行时,脚本本身也能正常工作。
这里出了什么问题?
更新:运行脚本时出错sudo -u USER
(有关详细信息,请参见下文)。这可能是问题吗?对同一用户执行 sudo 操作会如何破坏事情?
更新 2:在替换pacmd
with pactl
in 的所有实例a2dp.py
(并替换list-sinks
withlist sinks
使其成为有效的 pactl 命令)后,sudo -u USER
工作,但是, udev 规则仍然没有。在/var/log/syslog
我只看到这条线
systemd-udevd[32629]: Process '/home/USER/.local/bin/a2dp_2.py 00:22:37:3D:DA:50' failed with exit code 1.
Run Code Online (Sandbox Code Playgroud)
更新 3(解决方案):使用环境变量修改后的 skript(pacmd -> pactl,请参阅更新 2)DISPLAY=:0
并XAUTHORITY=/home/USER/.Xauthority
成功。udev 规则:
ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="00:22:37:3D:DA:50" ENV{DISPLAY}=":0" ENV{XAUTHORITY}="/home/USER/.Xauthority" RUN+="/home/USER/.local/bin/a2dp_2.py 00:22:37:3D:DA:50"
Run Code Online (Sandbox Code Playgroud)
正在按预期工作。
(现在唯一剩下的问题是,脚本本身会触发规则,因为它重新连接耳机,导致无限循环。但是,这是一个单独的问题,应该不难找到解决方法。在事实上,当我开始这个线程时,我期待这种行为。)
条件很好: 该行:
ACTION=="add", SUBSYSTEM=="input" …
Run Code Online (Sandbox Code Playgroud)