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

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

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

xdotool key XF86AudioPlay 

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

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

首先,我尝试使用自定义快捷方式运行别名,但它不起作用。

正如这个问题所解释的:

键盘绑定运行的命令不通过shell解析。 最好的办法是在homedir中创建一个目录bin。

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

 #! /bin/sh xdotool key XF86AudioPlay 

它位于bin文件夹内,它是PATH一部分,工作正常,可以从任何位置运行。

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

 Name: test Command: simplay Shortcut: Ctrl+Alt+R 

在搜索了一下后,我发现了另一种执行快捷方式的方法:

 gnome-terminal -e simplay 

我在一个终端上试了一下,注意到在执行它时会快速打开一个新的终端窗口,执行子进程,暂停音乐并立即关闭窗口。

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

如何根据您的知识解决这个问题?

问题

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

如果你运行一个命令,模拟按键,用另一个按键调用,你将实际模拟第三个按键,这是两者的组合:)

要解决

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

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

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

注意

当然,您可以使用sleep 1的值进行一些操作,将其设置为感觉舒适的最佳值,具体取决于按下组合的“粘性”。 sleep 0.5可能很好,并使快捷方式更迅速。

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

您可以使用--clearmodifiers标志,而不是使用“sleep 1”变通方法,即您的自定义快捷方式如下所示:

 Name: test Command: xdotool key --clearmodifiers XF86AudioPlay Shortcut: Ctrl+Alt+R 

对我来说,这可以在将快捷方式映射到Super+F9时起作用。