小编hif*_*ife的帖子

运行 Python 脚本的 udev 规则

每当我连接到蓝牙耳机时,我都会尝试自动运行脚本。

我已经用以下行创建了文件 /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:在替换pacmdwith pactlin 的所有实例a2dp.py(并替换list-sinkswithlist 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=:0XAUTHORITY=/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)

正在按预期工作。

(现在唯一剩下的问题是,脚本本身会触发规则,因为它重新连接耳机,导致无限循环。但是,这是一个单独的问题,应该不难找到解决方法。在事实上,当我开始这个线程时,我期待这种行为。)

什么工作:

  1. 条件很好: 该行:

    ACTION=="add", SUBSYSTEM=="input" …
    Run Code Online (Sandbox Code Playgroud)

python pulseaudio udev

5
推荐指数
1
解决办法
4098
查看次数

标签 统计

pulseaudio ×1

python ×1

udev ×1