linux xdotool类型需要很长时间,并导致整个桌面冻结

wj8zmpe1  于 2023-04-29  发布在  Linux
关注(0)|答案(4)|浏览(166)

我过去一直在使用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)完全冻结。我SSHD到机器杀死bash进程(成功),但这并没有做任何冻结状态。10分钟后,它再次工作,命令确实运行了(如在,xdotool键入的所有内容都符合预期),但我不得不重新启动X服务器,因为我的鼠标不再工作了。
我需要一种像xdotool type一样自动输入的方法,但没有这种冻结行为。最好的情况是一个工具,它可以立即输入我传递的整个文本。我想到了一个实现xclip的解决方案,然后只是模拟粘贴和回车的按键,但我认为必须有一个更好的解决方案。
xdotool的这个问题已经存在了大约两年了(一直在gnome + archlinux上),直到现在我从来没有需要它超过耸耸肩虽然。我猜这不仅仅是我使用的版本中的一个bug。只是为了完整:
$ xdotool --version xdotool version 3.20160805.1

6qftjkof

6qftjkof1#

我在Xubuntu上遇到了同样的问题,所以这不仅仅是GNOME的问题。看起来问题出在xserver、专有的nvidia驱动程序和一些合成管理器之间的交互中。
在Xubuntu中,我通过禁用合成器(设置管理器〉窗口管理器调整〉合成器)解决了这个问题。因此,开始撕裂,这部分由以下命令处理(在autostart中添加):nvidia-settings --assign CurrentMetaMode="1920x1080 +0+0 { ForceCompositionPipeline = On }" .
理论上,您可以通过更改视频驱动程序或从X切换到Wayland(以及从xdotool切换到ydotool)来解决此问题。

q5iwbnjs

q5iwbnjs2#

我发现这是一个来自xdotool的bug:
https://github.com/jordansissel/xdotool/issues/281
我建议你去别的地方,这将完全做你想做的,没有任何延迟:
https://github.com/autokey/autokey
安装后,您可以定义一个快捷方式或缩写键入您的短语。
这里我定义了alt+z来触发你想要的,还有“pl +一个缩进”来触发它

tgabmvqs

tgabmvqs3#

我调查这一点,因为这对我来说也是一个问题,我发现:
当您只输入10个字符时:

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

0123456789
1612286985498079368

你在黑暗中为0。142372864秒
当你输入100个字符时:

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

0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
1612286841733910300

您处于黑暗中1,054958080秒
所以我最好的猜测是,当你使用类型时,每个字符都是一个接一个地输入的,增加了时间。

xdotool type --delay 0 "long_sentence"

似乎改善了一点,但不是在别名中使用时

vbopmzt1

vbopmzt14#

作为解决方法,您可以将文本复制到剪贴板并粘贴它,而不是键入:

# Hangs with long text and text with special characters:
xdotool type "$1"

# Does not hang:
echo "$1" | xclip -sel primary    # for use with some shared clipboards (e.g. Remmina) 
echo "$1" | xclip -sel clipboard  # for use with local OS clipboard
xdotool key Shift+Insert

相关问题