如何在 bash 中获取当前鼠标坐标?
我需要在 bash 中获取当前的鼠标坐标,而 xdotool 似乎对我不起作用。我该怎么做?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我需要在 bash 中获取当前的鼠标坐标,而 xdotool 似乎对我不起作用。我该怎么做?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
为了避免所有 sed/awk/cut 的东西,您可以使用
特别是,
将位置放入 shell 变量
X
、Y
和SCREEN
。之后,将提供一个片段,供以后使用
xdotool mousemove
或任何其他用途。我的额外的顺序点击几个位置是一个文件positions.txt(由一些eval/echo运行给出):
并且使用它的代码是:
如果不需要缩放像素(与我的情况不同),它可以做一个简单的
To avoid all the sed/awk/cut stuff, you can use
In particular,
will put the position into shell variables
X
,Y
andSCREEN
. After that,will give a snippet ready for a later
xdotool mousemove
or any other use.My extra for sequential clicking into a few positions is a file positions.txt (given by a few eval/echo runs):
And the code that uses it is:
If there is no need to scale pixels (unlike my case), it could be a simple
尝试一下:
当您移动鼠标时,这将实时显示您的鼠标位置在“x”和“y”处。您可以将坐标保存到文件中以供以后参考或在脚本中使用,以通过以下方式自动执行这些鼠标移动:
此^将仅将鼠标坐标记录到坐标.txt中。如果您想重复录制时执行的操作,可以使用脚本中的每一行。简单的 ctrl+c 即可结束录制会话。
这只是
xdotool
对于 AFK 自动化和其他事物的强大和实用性的一小部分示例。甚至自定义机器人:D(编辑)
如果您需要从
sed
命令中删除x:
和y:
,您可以添加逻辑或|
,同时使用扩展正则表达式的-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 版本之间的工作方式可能不同。
Try this out:
This will show your mouse location at "x" and "y" in real time as you move it. You can save your coordinates into a file for later referencing or to use in a script to automate those mouse movements in the following way:
This^ will record only mouse coordinates into coordinates.txt. You can use each line in a script if you want to repeat the actions taken while recording. A simple
ctrl+c
will do for ending the recording session.This is just a small sample of how awesome and practical
xdotool
can be for AFK automation and other things. Even custom bots :D(Edit)
If you need to strip away the
x:
andy:
from thesed
command, you can add the logical OR|
, while using the-E
option for extended regex, operator as follows:xdotool getmouselocation | sed -E "s/ screen:0 window:[^ ]*|x:|y://g"
And if you want to use redirection and command substitution for a more compact command, you can use the following rather than a pipe:
sed -E 's/ screen:0 window:[^ ]*|x:|y://g' <<< $(xdotool getmouselocation)
As a disclaimer, the sed regex is written for GNU sed and may not work the same across different platforms or sed versions.
xdotool
不起作用是什么意思?它的输出是什么
不管怎样,如果你可以编译一个
C
程序, :http://dzen.geekmode.org/dwiki/doku.php?id=misc:xget-mouse-position关于您在下面的评论,您写道您得到:
我假设(在窗户前XP),您可以通过两行得到它,例如:
如果是这样,您应该像这样重定向
STDERR
:这将跳过警告。
如果您唯一的输入是 cursos 位置行,那么通过管道将其传输到 sed 将为您提供如下坐标:
如果您想使用坐标(使用 bash):
HTH
What you meant by
xdotool
not working?What's the output of
Anyway, if you can compile a
C
program: http://dzen.geekmode.org/dwiki/doku.php?id=misc:xget-mouse-positionRegarding your comment below, you wrote you get:
I assume (in front of Windows XP) that you get it on two lines like:
If that's the case, you should redirect
STDERR
like:That would skip the warning.
If your only input is the cursos positon line then piping that to
sed
will give you the coordinates like this:If you want to use the coordinates (with
bash
):HTH
如果您使用 xterm,则可以发出转义序列
ESC [ ? 9 h
这将使 xterm 在您单击鼠标时向控制程序(即 bash)发送转义序列。不知道其他终端模拟器是否有类似的功能。有关 xterm 中鼠标跟踪的信息位于 http://www.xfree86.org/current/ctlseqs .html#Mouse 跟踪
If you're using xterm, you can issue an escape sequence
ESC [ ? 9 h
which will make xterm send an escape sequence to the controlling program (i.e., bash) when you click with the mouse. I don't know if other terminal emulators have similar functionality.Info on mouse tracking in xterm is at http://www.xfree86.org/current/ctlseqs.html#Mouse Tracking
我收到警告:XTEST 扩展在“(null)”上不可用。某些功能可能会被禁用;有关更多信息,请参阅“man xdotool”。 x:654 y:453 screen:0 window:1665
所以它对你有用。您只需要解析命令的输出。您可以使用上面发布的 sed 脚本 zsolt,或各种其他选项:
或
或
很多方法来给这只猫剥皮。
I get Warning: XTEST extension unavailable on '(null)'. Some functionality may be disabled; See 'man xdotool' for more info. x:654 y:453 screen:0 window:1665
So it IS working for you. You just need to parse the ouput of the command. You can use the sed script zsolt posted above, or a variety of other options:
or
or
Plenty of ways to skin this cat.