【问题标题】:xdotool type takes ages and causes entire desktop to freezexdotool 类型需要很长时间并导致整个桌面冻结
【发布时间】:2018-06-10 19:20:02
【问题描述】:

我过去一直使用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

【问题讨论】:

  • 这个问题与 StackOverflow 定义的编程无关。它可能更适合superuser.com 或其他 StackExchange 站点。使用 Q 底部的flag 链接并要求版主移动它。请不要在 2 个不同的网站上发布相同的 Q。 阅读stackoverflow.com/help/on-topicstackoverflow.com/help/how-to-askstackoverflow.com/help/dont-askstackoverflow.com/help/mcve,然后在此处发布更多问题。祝你好运
  • 我认为它在 StackOverflow 上是合适的,因为我需要一种以编程方式完成它的方法。我需要使用 bash 来控制这种自动化。
  • 这是 GNOME 的问题。我在开发自己的输入法时已经受够了(不使用任何英语,如 ibus/fcitx/gcim/scim...)。 xdotool typexdotool key 可以为我杀死 GNOME,但它仍然没有修复,我认为它永远不会修复。我只是放弃并继续操作剪贴板并发送低级 ctrl+v 来输入文本。

标签: linux bash keyboard gnome xdotool


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    当您只输入 10 个字符时:

    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"
    

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

    【讨论】:

      【解决方案3】:

      我发现这是 xdotool 的一个错误:

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

      我建议你去其他地方,这将完全按照你的意愿行事:

      https://github.com/autokey/autokey

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-15
        • 1970-01-01
        相关资源
        最近更新 更多