如何创建执行 xdotool 命令来模拟按键的快捷方式?

如何创建执行 xdotool 命令来模拟按键的快捷方式?

我正在尝试使用自定义快捷方式模拟媒体按键。

到目前为止,我已经能够使用以下命令实现我需要的模拟:

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"

相关内容