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


10

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

到目前为止,我已经可以使用以下命令实现所需的仿真:

xdotool key XF86AudioPlay

它运行完美,每次运行时都会暂停或启动音乐播放器。

尝试将其作为快捷方式运行时会出现问题。

首先,我尝试使用自定义快捷方式运行别名,但此方法无效。

如关于这个问题的解释:

键盘绑定运行的命令不会通过外壳进行解析。最好的选择是在homedir中创建目录bin。

接下来,我创建了建议的脚本并将其命名为simplay

#!/bin/sh
xdotool key XF86AudioPlay

它位于的bin文件夹中PATH,该文件夹正常工作,可以在任何位置运行。

尝试创建自定义快捷方式时,我无法使其执行,其配置如下:

Name: test
Command: simplay

Shortcut: Ctrl+Alt+R

经过更多搜索后,我发现了另一种执行快捷方式的方法:

gnome-terminal -e simplay

我在终端上尝试了一下,发现执行它会迅速打开一个新的终端窗口,执行子进程,暂停音乐并立即关闭该窗口。

我更改了快捷方式上的命令,点击它时,我注意到打开终端并立即关闭时的行为相同,但是这次子进程没有暂停音乐,这使我认为之前的所有尝试都已调用了脚本但却无法执行。

我如何根据您的知识解决此问题?

Answers:


12

问题

您的快捷方式是在模拟按键的同时执行的

如果您运行一个命令,模拟一个被称为...的按键,另一次按键,您实际上将模拟第三次按键,这是两者的组合:)

解决

您需要防止您的快捷方式与模拟按键同时运行,换句话说,增加延迟:

/bin/bash -c "sleep 1 && xdotool key XF86AudioPlay"

将此命令添加到快捷方式,它应该可以工作。

注意

当然,您可以使用中的值来播放一点sleep 1,以将其设置为感觉舒适的最佳值,这取决于按下组合的“粘性”程度。sleep 0.5可能会做得很好,并使快捷方式更迅速地执行。


8

您也可以直接在快捷方式定义中使用该命令,因此无需为其创建独立脚本。

可以使用--clearmodifiers标志来代替使用“ sleep 1”解决方法,即,您的自定义快捷方式如下所示:

Name: test
Command: xdotool key --clearmodifiers XF86AudioPlay

Shortcut: Ctrl+Alt+R

对我来说,这在将快捷方式映射到时有效Super+F9


上面的代码片段是否意味着是文件?如果是这样,您是否必须将其放在特定位置或运行特定命令以实现快捷方式?
JellicleCat

1
该片段只是我使用的快捷方式的描述。在Ubuntu中,您可以在键盘设置中创建自定义快捷方式。但是,自从我升级了Ubuntu版本以来,现在可以直接将动作“播放(或播放/暂停)”映射到我选择的按键组合,事实证明,这比使用xdotool更可靠。

比--clearmodifiers更好的是为您用来调用脚本的热键发出“ keyup”。轻微的缺点是,如果您更改热键来调用脚本,则需要更新脚本。

1

一种替代方法(用于提高sleep 1 && xdotool ...快照性能)是使用xdotool释放快捷键。有点长,但是您也可以使用

/bin/bash -c "xdotool keyup R Alt_L Ctrl_L && xdotool key XF86AudioPlay"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.