我有一些蓝牙耳机 (Edifier TWS1 Pro) 连接到运行 Debian 的笔记本电脑。 (编辑:加肉桂)
当我点击左耳塞或右耳塞时,播放会暂停/恢复。这非常烦人,因为我几乎没有故意使用该功能,但是当我调整耳朵中的耳塞时,我每天会意外触发它很多次。
我想禁用蓝牙控制或指示 VLC 和 mplayer 忽略来自耳塞的播放/暂停信号。
对于 VLC,有一种解决方法可以确保 VLC 窗口没有焦点。
我已经搜索并找到了https://superuser.com/questions/1761350/how-to-disable-inline-headphone-controls-on-windows-10-11对于 Windows(并且没有可用的答案),https://answers.microsoft.com/en-us/msteams/forum/all/any-way-to-disable-headset-control/ffef7d41-d72c-482b-898b-ed1858c03562(相似的),https://askubuntu.com/questions/1236049/how-do-i-disable-headphone-controls(未答复)以及数十个有关各种 BT 连接问题的线程。
我考虑过尝试打开耳塞并永久断开按钮的连接,但这些东西不容易在不损坏的情况下打开,而且按钮在配对时很有用。我还考虑过制作某种盖子,这样我就不会意外触摸按钮,但它可能看起来不太好。
我知道有些耳塞有物理按钮而不是触摸按钮。我更喜欢这些,但不幸的是,尽管物理按钮的成本不到 0.01 美元,但绝大多数(包括我拥有的)都使用触摸。我还知道实际的按钮配置取决于品牌。 IIRC、QCY 使用双击来播放/恢复,并且没有与单击绑定任何内容,但它们的耳机都没有达到 10 小时的播放时间。此外,这是一个软件问题,因此软件解决方案比购买新硬件更好。
编辑:在点击 JoSSte 评论中的链接后,我运行xmodmap -pke
并找到了keycode 172 = XF86AudioPlay XF86AudioPause XF86AudioPlay XF86AudioPause
.进入后,xmodmap -e 'keycode 172 = '
点击我的耳塞不再导致暂停/恢复!此更改不会在重新启动后持续存在,但我可能可以弄清楚。我已经很高兴能够对此进行任何控制。
编辑 2:虽然这在技术上可行,但遗憾的是我发现密钥代码 172 会定期重新注册。我不确定是什么触发了它,但至少将耳塞放入充电器中然后再次取出会触发它。但它似乎也是随机发生的。显而易见的解决方案是xmodmap -e 'keycode 172 = '
每 15 秒左右运行一次,但这不会成功,因为该命令会导致屏幕冻结几秒钟。所以这个问题仍然悬而未决。
编辑 3:我创建了一个小 shell 脚本来自动执行此操作:
#!/bin/bash
while [[ 1 ]]
do
badkey=$(xmodmap -pke | grep -c "keycode 172 = XF86AudioPlay XF86AudioPause")
if [[ $badkey == 1 ]]
then
xmodmap -e 'keycode 172 = '
fi
sleep 5
done
这需要一直运行。在实际脚本中,当发现键码 172 已再次填充时,我还会播放声音。通过这个,我发现每当我的蓝牙鼠标因不活动而进入待机状态后我触摸它重新连接时,键码 172 就会重新激活。即使耳机未连接。尽管我的鼠标没有多媒体键。
编辑 4(2023 年 10 月 3 日):
我不认为这就是答案,但 YMMV 也许吧。
dconf-editor
在终端窗口中输入。- 导航
/org/cinnamon/desktop/keybindings/media-keys
。 XF86AudioPlay
找到包含和/或XF86AudioPause
在其值中的任何条目。- 完成所有这些,禁用“使用默认值”并输入
[]
其自定义值。 - 重新启动计算机?
这是专门针对 Cinnamon 桌面环境的。我还注意到/org/gnome/settings-daemon/plugins/media-keys/
具有相似价值观的存在。
我不确定它现在是否有效:当我点击耳塞时,VLC 不再暂停/恢复,但 mplayer 仍然如此。我还搞乱了 VLC 中的设置(工具>首选项>显示全部>界面>热键设置),我现在不确定什么对 VLC 有效,但我认为它只有在重新启动后才有效。
答案1
对于VLC,dconf-editor步骤(在我的问题的“编辑4”中描述)或调整VLC中的工具>首选项>显示全部>界面>热键设置中的热键都可以解决问题。
~/.mplayer/input.conf
对于 mplayer,我创建了一个包含内容的文件PLAY osd_show_text "Ignored multimedia key"
。 PLAY 对我来说是正确的键,但运行mplayer -input keylist
所有可用的键名称。 (http://www.mplayerhq.hu/DOCS/HTML/en/control.html)我使用的命令在播放视频时在屏幕上覆盖文本“忽略多媒体键”,或者在没有视频窗口时不执行任何操作。运行mplayer -input cmdlist
所有可用命令。看http://www.mplayerhq.hu/DOCS/tech/slave.txt有关这些命令的作用的详细信息。
答案2
这对我有用。
# cat /etc/udev/rules.d/logi-g935.rules
KERNEL=="controlC[0-9]*", SUBSYSTEM=="sound", ACTION=="add", ATTRS{id}=="Headset", RUN+="/usr/bin/su tim -c /opt/udev_scripts/g935_hook.sh"
# cat /opt/udev_scripts/g935_hook.sh
/opt/udev_scripts/disable-g935-buttons.sh &
# cat /opt/udev_scripts/disable-g935-buttons.sh
cd /home/tim
export DISPLAY=:0
export XAUTHORITY=/home/tim/.Xauthority
export XDG_RUNTIME_DIR=/run/user/1000
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
sleep 0.3
xinput disable "Logitech G935 Gaming Headset"
可能不需要更改目录和某些导出。不久前我需要它们来处理 pactl。
我不确定 hook.sh 如何与 udev 交互。如果第二个脚本耗时太长,它仍然会被杀死。它应该确保 xinput 在执行时能够识别耳机。我不确定当您像我一样使用声音子系统触发规则时是否真的需要它。可能是也可能不是竞争条件,我现在不会测试它。无论如何,这些事情通常不会永远持续下去,但我会阅读有关这方面的报告。