在调查我的工作站(Ubuntu 22.04)中的零星蓝牙连接问题时,我发现同一台计算机中由其他用户启动的其他pulseaudio实例以某种方式从pulseaudio捕获蓝牙接收器并从我的pulseaudio实例中窃取设备。设置是我将工作站用作带显示器的桌面,但其他同事也通过SSH使用工作站。
bluetoothctl
发生这种情况时,我可以在 中看到来自我的用户和其他人的设备user
:
user@ws:~$ bluetoothctl
Agent registered
[CHG] Controller <...> Pairable: yes
[CHG] Controller <...> Pairable: yes
[WH-1000XM5]# info <MAC address of device>
Device <MAC address of device> (public)
Name: WH-1000XM5
Alias: WH-1000XM5
Class: 0x00240404
Icon: audio-headset
Paired: yes
Trusted: yes
Blocked: no
Connected: yes
WakeAllowed: yes
[...]
[WH-1000XM5]#
但我看不到pulseaudio中的水槽,无论是来自pavucontrol
还是来自pactl
或pacmd
:
user@ws:~$ pactl list short sinks
0 alsa_output.pci-0000_01_00.1.hdmi-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
1 alsa_output.usb-Generic_USB_Audio-00.iec958-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
并且耳机无法使用。
据报道蓝牙耳机根据 Arch Wiki,当 GDM 启动自己的pulseaudio 守护进程并窃取接收器时,就会发生这种情况。就我而言,pulseaudio 守护进程是由其他用户启动的。
理想情况下,由于蓝牙耳机是个人的,因此只有我的用户应该能够看到该设备,并且当然我的脉冲音频守护程序应该保持接收器的独占所有权。
为了解决这个问题,我最初的想法是从系统范围的配置文件中删除蓝牙配置/etc/pulse/default.pa
,并仅加载我的个人文件中的蓝牙模块~/.config/pulse
。
但是,这可能会阻止其他用户使用他们的我的工作站上有蓝牙耳机。这种情况很少见,我可能永远不需要这样的东西,但我很想听到其他可能避免此问题的解决方案(如果有)。