如何在X11下隐藏鼠标指针?我想使用内置库来执行此操作,而不是像SDL(SDL_ShowCursor(0))或过剩(glutSetCursor(GLUT_CURSOR_NONE))。此外,无论指针位置如何,都应隐藏鼠标指针,而不仅仅是在自己的窗口中。
答案 0 :(得分:34)
这是description unclutter
实用程序如何做到的。
Unclutter是一个在X11背景下永久运行的程序 会话。它每隔几次检查一次X11指针(光标)位置 秒,当它发现它没有移动时(没有按钮 按下鼠标,光标不在根窗口中) 它创建一个小的子窗口作为光标所在窗口的子窗口。 新窗口安装一个大小为1x1但掩码为的游标 全0,即不可见的光标。这允许您查看所有文本 例如,xterm或xedit。人为因素会让人同意 应该减少分散注意力。
一旦创建,程序就会等待指针离开窗口 然后摧毁它,恢复原来的情况。 按钮事件透明地传递到父窗口。 它们通常会导致光标重新出现,因为主动抓取 当按钮关闭时,程序将进行,所以指针 显然会离开窗户,即使它的x y位置没有变化。
答案 1 :(得分:18)
我宁愿使用更简单的方法:
unclutter -idle 0
你几乎看不到光标,它仍然可用。要禁用鼠标:
rmmod psmouse
或者在/ etc /中的某处永久禁用鼠标模块。请参阅您的分发手册。
答案 2 :(得分:17)
整理对我来说不起作用,因为它不能很好地与硬件加速表面(例如在解码视频时由intels的VA-API生成的表面)相配合。所以我发现了一个程序,它以一种不那么迂回的方式隐藏了鼠标指针, hhp ,并在C中用最小的依赖关系重写了它,结果是 hhpc < / strong>即可。我这样做是为了避免让haskell编译它,因为hhp有时会停止隐藏鼠标指针。
hhpc ,仅依赖于glibc
和xlib
,因此很容易构建,只需make release
。您可以从my repository获取代码和说明。它的内存和CPU效率非常高(因为它几乎没有任何功能)。
答案 3 :(得分:14)
您可以创建和设置不可见的光标主题。这个技巧由maemo使用,因为在触摸屏设备上放置光标是没有意义的。
可悲的是,在运行时更改全局游标主题的能力在X11应用程序和工具包中并不统一。您可以更改服务器资源Xcursor.theme
,没有人会注意到(通常只在启动时查询);你可以通知xsettings这似乎只影响Gtk +程序; KDE通过根窗口上的属性进行某种通信;等
至少更改您自己的应用程序的光标就像XDefineCursor一样简单,如果您在根窗口上执行此操作,某些应用程序可能会关注沿。
答案 4 :(得分:14)
我最终使用了像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);
答案 5 :(得分:13)
Xorg 1.7及更高版本有一个-no-cursor
选项。 https://www.x.org/wiki/AdvancedTopicsFAQ/
xinit -- -nocursor
或startx -- -nocursor
可以正常工作。
答案 6 :(得分:6)
使用xbanish! #&#34;在键入&#34;时消除鼠标光标! 从
开始xbanish&amp;
并享受!
答案 7 :(得分:4)
这是我的解决方案。它把光标放在你看不到的地方(在我的情况下,在左下角) - 然后,它会禁用鼠标,所以你不能移动它。
注意您可以解析xrandr
中的数据,或者在登录环境中将数据放入环境中,然后使用它;这样,您就不必对其进行硬编码。但是,至于我,我从不改变我的屏幕分辨率,所以768可以:)
setmouse () {
DISPLAY=":0" xinput $1 `DISPLAY=":0" xinput | grep Mouse |
tr -d " " | tr "\t" " " |
cut -d" " -f2 | cut -d"=" -f2`
}
offmouse () {
DISPLAY=":0" xdotool mousemove 0 768 # use xrandr to find out
setmouse disable
}
onmouse () {
setmouse enable
}
答案 8 :(得分:4)
好吧!
我想这篇文章可能会变得有点旧,但如果我发现的内容可以帮助我们中的某些人,我肯定要在这里发帖;)
我发现自己是一个干净简单的解决方案,工作正常,没有使用“xcb”(对于我试图实现的目标,它是一个小工程过度工程(..)
所以:
你需要的只是“xsetroot”命令,带有适当的参数/参数:
- &GT;要隐藏鼠标光标,你需要一个额外的小文件(我称之为“blnk_ptr.xbm”)
此文件的内容:
#define blnk_ptr_width 1
#define blnk_ptr_height 1
#define blnk_ptr_x_hot 0
#define blnk_ptr_y_hot 0
static unsigned char blnk_ptr_bits[] = {
0x00 };
然后,我们可以使用以下两个命令:
- &GT;隐藏鼠标指针光标:
xsetroot -cursor blnk_ptr.xbm blnk_ptr.xbm
- &GT;再次显示鼠标指针光标:
xsetroot -cursor_name left_ptr
(你可以使用除“left_ptr”之外的鼠标指针光标,但是这个光标似乎可以在* nix系统中广泛使用(..)
Btw-&GT;我还不知道如何使用xsetroot获取系统当前使用的指针的名称 - &gt;我想我会像往常那样挖掘它,但我很高兴有人知道如何给我答案(这很好;)
享受? ; P
答案 9 :(得分:0)
有一个名为Fixes的X11扩展,它具有一个可以用来隐藏光标的功能。该功能的优点在于,它将向X服务器发送一条消息,该消息隐藏了精灵。没有技巧(即,从像素图看不见的光标),并且据我所知,它可以在整个屏幕上正常工作。
update UserSettings
set Setting=REPLACE(convert(varchar(max),Setting),'<string>Report - 1</string>','<string>Report - One</string>')
where convert(varchar(max),Setting) like '%<string>Report - 1</string>%'
答案 10 :(得分:0)
源代码,xtoggle.c
:
#include <signal.h>
#include <X11/extensions/Xfixes.h>
Display *display;
volatile sig_atomic_t breakout = 0;
void toggle_cursor(int x) { breakout = x; }
int main(void) {
int hidden = 0;
struct sigaction act;
sigset_t mask;
if (!(display = XOpenDisplay(NULL))) { return(1); }
act.sa_handler = toggle_cursor;
sigaction(SIGUSR1, &act, NULL);
sigemptyset(&mask);
while (1) {
if (hidden) { XFixesShowCursor(display, DefaultRootWindow(display)); }
else { XFixesHideCursor(display, DefaultRootWindow(display)); }
XFlush(display);
hidden = !hidden;
breakout = 0;
while (!breakout) { sigsuspend(&mask); }
}
return(0);
}
取决于 Xfixes。在 Debian/Ubuntu 上,
apt install libxfixes-dev
编译并在后台执行,
cc xtoggle.c -lX11 -lXfixes -o xtoggle
./xtoggle &
通过向光标发送 USR1 信号来切换光标可见性,
pkill -USR1 -x xtoggle
可能有用的练习:使用 XWarpPointer 移动 隐藏时不可见的鼠标指针。