我刚买了一款 Sennheiser GSP 670 游戏耳机,但在 PulseAudio 正确检测该设备时遇到了一些问题。
该耳机是无线的,并配有加密狗。
这款耳机有一个主立体声输出,用于游戏和音乐。除此之外,还有一个专用于通信的单声道输入和输出。
本质上,ALSA 注册了两个音频设备(Windows 上也是如此),一个可用于立体声播放,另一个可同时用于单声道播放和捕获。
加密狗注册如下
hw:S60,0
hw:S60,1
当耳机通过 USB 插入时,其注册方式如下
hw:G670,0
hw:G670,1
我可以毫无困难地使用带有 ALSA 的设备,但是 PulseAudio 仅检测到第一个用于通信的设备,而无法检测到另一个设备。
我现在解决这个问题的方法是告诉 PulseAudio 忽略该设备并手动创建接收器。
以下是我如何使用 udev 规则让 PulseAudio 忽略设备:
ATTRS{idVendor}=="1395", ATTRS{idProduct}=="0089", ENV{PULSE_IGNORE}="1"
这是我用来创建接收器和源的脚本:
#!/usr/bin/sh
pacmd load-module module-alsa-sink device=hw:S70,0 name=gsa70_comm_output
pacmd 'update-sink-proplist alsa_output.gsa70_comm_output device.description="GSA70 Communication" '
pacmd load-module module-alsa-sink device=hw:S70,1 name=gsa70_main
pacmd 'update-sink-proplist alsa_output.gsa70_main device.description="GSA70 Main" '
pacmd load-module module-alsa-source device=hw:S70,0 name=gsa70_comm_input
pacmd 'update-source-proplist alsa_input.gsa70_comm_input device.description="GSA70 Communication" '
到目前为止,这种方法是可行的,但效果并不理想。这种方法不是即插即用的,也就是说,即使断开了加密狗,接收器仍然还在。
我可以使用 udev 在加密狗连接时运行该脚本,然后在加密狗断开连接时运行清理脚本,但我想知道是否有更好的方法来做到这一点。