我正在尝试使用自定义快捷方式模拟媒体按键。
到目前为止,我已经能够使用以下命令实现我需要的模拟:
xdotool key XF86AudioPlay
它运行完美,每次运行时都会暂停或启动音乐播放器。
当尝试将其作为快捷方式运行时,问题就出现了。
首先,我尝试使用自定义快捷方式运行别名,但没有效果。
正如所解释的那样这个问题:
键盘绑定运行的命令不会通过 shell 进行解析。最好的办法是在您的主目录中创建一个目录 bin。
接下来我创建了建议的脚本并将其命名为simplay
:
#!/bin/sh
xdotool key XF86AudioPlay
它位于 bin 文件夹内,PATH
该文件夹是其中的一部分,可以正常工作并可从任何位置运行。
当尝试创建自定义快捷方式时,我无法执行它,配置如下:
Name: test
Command: simplay
Shortcut: Ctrl+Alt+R
经过进一步搜索后,我找到了执行快捷方式的另一种方法:
gnome-terminal -e simplay
我在终端上尝试了一下,发现执行时它会快速打开一个新的终端窗口,执行子进程,暂停音乐并立即关闭窗口。
我更改了快捷方式上的命令,当点击它时,我注意到相同的行为打开了一个终端并立即关闭,但这次子进程没有暂停音乐,这让我认为该脚本在我之前的所有尝试中都被调用过,但不知何故无法执行。
根据您的知识我该如何解决这个问题?
答案1
问题
您的快捷键将与模拟按键同时执行
如果你运行一个命令,模拟一个按键,调用...另一个按键,你实际上会模拟一个第三按键,这是两者的组合:)
解决
您需要防止快捷方式与模拟按键同时运行,换句话说,添加延迟:
/bin/bash -c "sleep 1 && xdotool key XF86AudioPlay"
将此命令添加到快捷方式,它就可以工作了。
笔记
当然,您可以稍微调整一下 中的值sleep 1
,将其设置为感觉最舒服的值,具体取决于按下组合键的“粘性”。sleep 0.5
可能会做得很好,并使快捷方式更快地起作用。
答案2
您还可以在快捷方式定义中直接使用该命令,因此无需为其创建独立脚本。
您可以使用该--clearmodifiers
标志,而不是使用“sleep 1”解决方法,即您的自定义快捷方式将如下所示:
Name: test
Command: xdotool key --clearmodifiers XF86AudioPlay
Shortcut: Ctrl+Alt+R
对我来说,当将快捷方式映射到时,这有效Super+F9
。
答案3
另一种选择(为了提高性能)sleep 1 && xdotool ...
是使用 xdotool 来释放快捷键。有点冗长,但你也可以使用
/bin/bash -c "xdotool keyup R Alt_L Ctrl_L && xdotool key XF86AudioPlay"