如何在X11下隐藏鼠标指针?我想使用内置库来执行此操作,而不是像SDL(SDL_ShowCursor(0))或过剩(glutSetCursor(GLUT_CURSOR_NONE)).此外,无论指针位置如何,鼠标指针都应隐藏,而不仅仅是在自己的窗口中.
这是一个实用程序如何做的描述unclutter
.
Unclutter是一个在X11会话后台永久运行的程序.它每隔几秒检查一次X11指针(光标)位置,当它发现它没有移动时(鼠标上没有按下任何按钮,光标不在根窗口中),它会创建一个小的子窗口.光标所在窗口的子窗口.新窗口安装一个大小为1x1但是全部为0的掩码的游标,即一个不可见的游标.例如,这允许您查看xterm或xedit中的所有文本.人为因素人群会同意它应该减少分散注意力.
一旦创建,程序等待指针离开窗口然后销毁它,恢复原始状态.按钮事件透明地传递到父窗口.它们通常会导致光标重新出现,因为当按钮按下时程序将执行主动抓取,因此指针显然会离开窗口,即使其xy位置没有改变.
我宁愿使用更简单的方法:
unclutter -idle 0
你几乎看不到光标,它仍然可用.要禁用鼠标:
rmmod psmouse
或者在/ etc /中的某处永久禁用鼠标模块.请参阅您的分发手册.
Unclutter对我来说不起作用,因为它不能很好地处理硬件加速表面(例如在解码视频时由intels的VA-API生成的表面).所以我找到了一个程序,用一种不那么迂回的方式隐藏鼠标指针,hhp,并在C中用最小的依赖关系重写它,结果是hhpc.我这样做是为了避免让haskell编译它的必要性,因为hhp有时会停止隐藏鼠标指针.
HHPC,仅依赖于glibc
和xlib
,所以很容易建立,只是做make release
.您可以从我的存储库中获取代码和说明.它的内存和CPU效率非常高(因为它几乎没有任何功能).
-no-cursor
Xorg 1.7及更高版本有一个选项.https://www.x.org/wiki/AdvancedTopicsFAQ/
xinit -- -nocursor
或者startx -- -nocursor
可以工作.
您可以创建和设置不可见的光标主题.maemo使用了这个技巧,因为在触摸屏设备上使用光标是没有意义的.
遗憾的是,在运行时更改全局游标主题的能力在X11应用程序和工具包中并不一致.您可以更改服务器资源Xcursor.theme
,没有人会注意到(通常只在启动时查询); 你可以通知xsettings似乎只影响Gtk +程序; KDE通过根窗口上的属性进行某种通信; 等等
至少更改您自己的应用程序的光标就像XDefineCursor一样简单,如果您在根窗口上执行此操作,某些应用程序可能会跟随.
我最后使用了像ephemient提到的XDefineCursor.控制应用程序更改了默认的根窗口光标,其他应用程序(由我控制)继承了它.
代码细节如下:
// Hide the cursor if (NULL==(display=XOpenDisplay(NULL))) { printf("Unable to open NULL display\n"); exit(1); } window = DefaultRootWindow(display); Cursor invisibleCursor; Pixmap bitmapNoData; XColor black; static char noData[] = { 0,0,0,0,0,0,0,0 }; black.red = black.green = black.blue = 0; bitmapNoData = XCreateBitmapFromData(display, window, noData, 8, 8); invisibleCursor = XCreatePixmapCursor(display, bitmapNoData, bitmapNoData, &black, &black, 0, 0); XDefineCursor(display,window, invisibleCursor); XFreeCursor(display, invisibleCursor); XFreePixmap(display, bitmapNoData);
为了隐藏光标然后在我完成之后
// Restore the X left facing cursor Cursor cursor; cursor=XCreateFontCursor(display,XC_left_ptr); XDefineCursor(display, window, cursor); XFreeCursor(display, cursor);
恢复X的左手光标(因为它是根窗口,我不希望它保持不可见.我不确定,但我也可以使用
XUndefineCursor(display, window);
使用xbanish!它"在打字时消除鼠标光标"!启动它
xbanish&
享受!