如何(从代码中)查询鼠标的当前图标/状态?
鼠标可能悬停在浏览器中的链接上,或者显示来自终端的 I 形光标。
我不关心鼠标的实际位置,也不关心它在哪个应用程序上——我只关心它的视觉状态。
我怎样才能向 ubuntu 查询我的鼠标当前是什么样子的?
我使用的是以下版本的 Ubuntu:
lsb_release --all
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
使用 gnome flashback:
$echo $XDG_CURRENT_DESKTOP
GNOME-Flashback:Unity
$echo $GDMSESSION
gnome-flashback-metacity
(不确定这些是否相关)。
我本来打算从鼠标位置开始截取 32x32 的屏幕截图,然后进行基本的图像识别以查看状态,但这也行不通!截取屏幕截图时(例如,使用 gnome-screenshot 或 shutter),它会自动显示鼠标的正常图标状态,而不管截取屏幕截图时鼠标的图标状态如何。
答案1
已知错误
这似乎是一个已知的错误:
https://bugs.launchpad.net/ubuntu/+source/gnome-screenshot/+bug/659399
https://bugzilla.gnome.org/show_bug.cgi?id=571602
根据线程,我们需要安装gnome-utils
实际上没有帮助的包。
解决方案
使用命令shutter
行xdotool
,我已经能够得到一个可行的解决方案:
- 剧本:
#!/bin/bash
# Get current cursor position using xdotool and eval them as variables
eval $(xdotool getmouselocation --shell)
# We need the X and Y coordinates. Minus 10 pixels to create some padding around the cursor
xc=$(($X-10))
yc=$(($Y-10))
# Use shutter to capture a screenshot of the area around the cursor 32px by 32px and save it in the current directory
shutter -s=$xc,$yc,32,32 -c -e -o './%y-%m-%d_$w_$h_$RRRR.png'
这截取了屏幕截图,但使用了默认光标指针。但它给了我一个错误消息:
WARNING: XFIXES extension not found - using a default cursor image
有了这个错误,我找到了方向。我很快做了一个
apt-cache search xfixes
,结果如下:subroot@subroot:~$ apt-cache search xfixes libxcb-xfixes0 - X C Binding, xfixes extension libxcb-xfixes0-dbg - X C Binding, xfixes extension, debugging symbols libxcb-xfixes0-dev - X C Binding, xfixes extension, development files libxfixes-dev - X11 miscellaneous 'fixes' extension library (development headers) libxfixes3 - X11 miscellaneous 'fixes' extension library libxfixes3-dbg - X11 miscellaneous 'fixes' extension library (debug package) libx11-protocol-other-perl - miscellaneous X11::Protocol helpers subroot@subroot:~$
我刚刚安装了所有内容:
subroot@subroot:~$ sudo apt install libxcb-xfixes0 libxfixes3 libxcb-xfixes0-dbg libxfixes-dev libxfixes3-dbg libxcb-xfixes0-dev libx11-protocol-other-perl . . . subroot@subroot:~$
然后我再次尝试并且成功了::)
subroot@subroot:~$ sh cursor.sh
结果:
只需调整尺寸和屏幕截图大小即可获得完美的光标指针图像。干杯。