运行 pactl 的 udev 规则

运行 pactl 的 udev 规则

尝试在每次蓝牙设备连接/断开连接时检查 a2dp 配置文件是否存在。我创建了两个 udev 规则:

# ACTION=="add", SUBSYSTEM=="bluetooth", RUN+="/bin/sh -c '/home/myuser/on-connect-bluetooth.sh > /tmp/on-connect-bluetooth.log 2>&1'"
# ACTION=="remove", SUBSYSTEM=="bluetooth", RUN+="/bin/sh -c '/home/myuser/on-connect-bluetooth.sh > /tmp/on-connect-bluetooth.log 2>&1'"

该脚本用于pactl list short检查 a2dp.sink 是否存在。从命令行执行时,该脚本可以正常工作,但通过 udev 执行时,我得到:

Connection failure: Connection refused
pa_context_connect() failed: Connection refused

我尝试过sudo -u myuser pactl list short但没有效果,我得到了相同的结果。

如何pactl从 udev 规则执行的脚本执行?

答案1

这里有多个问题:

(1)Pulseaudio 默认是针对每个用户的,而不是系统范围的,因此您只能以启动它的用户身份访问它。请参阅这里更多细节。

(2)udev 规则在非常受限制的环境中运行。

一种可能的解决方案是使用蓝牙工具(我知道,它们也很乱)来查明 a2dp 配置文件是否存在。

当前一代蓝牙工具与系统其余部分的集成度非常糟糕,您不太可能在其中找到任何东西/sys/device。上次我查看时,所有有趣的东西都隐藏在一些记录不全的 DBUS API 后面。

相关内容