8

我过去一直在使用xdotool type只是在快捷方式上使用xdotool type '¯\_(ツ)_/¯'. 这可行,但总是需要相当长的时间,并导致整个桌面冻结(完全,不仅仅是输入)几秒钟。不过并没有打扰到我。

现在我需要一种方法来从文件中读取内容,对其进行操作,然后将其输入。我想使用 xdotool 来完成这样的任务:

while read URL; do
    xdotool type "!play $URL" && sleep 1 && xdotool key Return && sleep 1
done < <(mycommand)

发布了mycommand大约 20 行 URL。一旦我运行了脚本,我的桌面(gnome3.26,archlinux)就完全冻结了。我通过 SSH 连接到机器杀死了 bash 进程(成功),但这对冻结状态没有任何作用。十分钟后它再次运行,命令确实运行了(如,xdotool 按预期正确键入了所有内容)但我不得不重新启动 X 服务器,因为我的鼠标不再工作了。

我需要一种自动键入的方法,xdotool type但没有这种冻结行为。最好的情况是一个工具,它几乎可以立即输入我通过的整个文本。我想到了一个解决方案xclip,然后只模拟粘贴和输入的按键,但我认为必须有一个更好的解决方案。

这个问题xdotool对我来说已经存在了大约两年(一直在 gnome + archlinux 上),但直到现在我才需要它只是耸耸肩。我猜这不仅仅是我使用的版本中的错误。只是为了完整性:

$ xdotool --version xdotool version 3.20160805.1

4

3 回答 3

1

我发现这是来自 xdotool 的错误:

https://github.com/jordansissel/xdotool/issues/281

我建议您去其他地方,这将完全按照您的意愿进行,不会有任何延迟:

https://github.com/autokey/autokey

安装后,您可以定义快捷方式或缩写来键入您的短语。

这里我定义了 alt+z 来触发你想要的 还有“pl + an indentation”会触发它

在此处输入图像描述

于 2021-02-03T11:41:34.727 回答
1

我在 Xubuntu 上遇到了同样的问题,所以这不仅仅是 GNOME 的问题。看起来问题出在 xserver、专有 nvidia 驱动程序和一些合成管理器之间的交互中。

在 Xubuntu 中,我通过禁用合成器(设置管理器 > 窗口管理器调整 > 合成器)解决了这个问题。结果,撕裂开始了,这个命令部分处理了这个命令(在自动启动中添加)nvidia-settings --assign CurrentMetaMode="1920x1080 +0+0 { ForceCompositionPipeline = On }":.

从理论上讲,您可以通过更改视频驱动程序或从 X 切换到 Wayland(以及从 xdotool 到 ydotool)来解决这个问题。

于 2021-02-02T01:36:37.717 回答
0

我对此进行了调查,因为这对我来说也是一个问题,我发现:

当您仅键入 10 char 时:

18:29:25 date +%s%N ; echo -; xdotool type "0123456789" ; echo - ;  date +%s%N
1612286985355706637

0123456789
1612286985498079368

你在黑暗中 0.142372864 秒

但是当你输入 100 char 时:

18:27:12 date +%s%N ; echo -; xdotool type "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" ; echo - ;  date +%s%N
1612286840678952107

0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
1612286841733910300

你在黑暗中 1,054958080 秒

所以我最好的猜测是,当你使用 type 时,每个 char 都会一个一个地输入,从而增加时间。

xdotool type --delay 0 "long_sentence"

似乎有所改善,但在别名中使用时没有改善

于 2021-02-02T17:38:47.540 回答