如何在bash中获取当前鼠标坐标?

t3h*_*man 19 unix bash shell mouse

我需要在bash中获取当前鼠标坐标,而xdotool对我来说不起作用.我该怎么做?

小智 38

为了避免所有sed/awk/cut东西,你可以使用

xdotool getmouselocation --shell
Run Code Online (Sandbox Code Playgroud)

特别是,

eval $(xdotool getmouselocation --shell)
Run Code Online (Sandbox Code Playgroud)

将位置放入shell变量X,YSCREEN.之后,

echo $X $Y
Run Code Online (Sandbox Code Playgroud)

将为以后xdotool mousemove或任何其他用途准备一个片段.


连续点击几个位置的额外信息是文件positions.txt(由几个eval/echo运行给出):

123 13
423 243
232 989
Run Code Online (Sandbox Code Playgroud)

使用它的代码是:

while read line; do
     X=`echo $line| cut -c1-3`; 
     Y=`echo $line| cut -c4-7`;
     xdotool mousemove --sync $((  0.5 + $X )) $(( 0.5 + $Y ));
     xdotool click 1
done < positions.txt
Run Code Online (Sandbox Code Playgroud)

如果不需要缩放像素(不像我的情况),它可能很简单

while read line; do
     xdotool mousemove --sync $line;
     xdotool click 1
done < positions.txt
Run Code Online (Sandbox Code Playgroud)


Yok*_*kai 20

试试这个:

# Real time mouse position.
watch -t -n 0.0001 xdotool getmouselocation 
Run Code Online (Sandbox Code Playgroud)

这将在您移动时实时显示鼠标在"x"和"y"的位置.您可以将坐标保存到文件中以供以后引用,或者在脚本中使用以下列方式自动执行这些鼠标移动:

# Save real time mouse coordinates to file.
while true; do xdotool getmouselocation | sed -e 's/ screen:0 window:[^ ]*//g' >> coordinates.txt; done
Run Code Online (Sandbox Code Playgroud)

这^将将鼠标坐标记录到coordinates.txt中.如果要重复录制时执行的操作,可以使用脚本中的每一行.一个简单的方法ctrl+c可以用于结束录制会话.

这只是xdotoolAFK自动化和其他东西的一个很好的实例.即使是定制机器人:D

(编辑)

如果您需要从命令中删除x:和,您可以添加逻辑OR ,同时使用扩展正则表达式选项,运算符如下:y:sed|-E

xdotool getmouselocation | sed -E "s/ screen:0 window:[^ ]*|x:|y://g"

如果您想使用重定向和命令替换更紧凑的命令,您可以使用以下而不是管道:

sed -E 's/ screen:0 window:[^ ]*|x:|y://g' <<< $(xdotool getmouselocation)

作为免责声明,sed正则表达式是为GNU sed编写的,在不同平台或sed版本中可能无法正常工作.