Comment cacher le pointeur de la souris sous Linux / X11?

Comment puis-je cacher le pointeur de souris sous X11? Je voudrais utiliser les bibliothèques construites pour le faire et pas quelque chose comme SDL (SDL_ShowCursor(0)) ou glutsetcursor (GLUT_CURSOR(GLUT_CURSOR_NONE)). Aussi, le pointeur de la souris doit être caché n'importe l'emplacement du pointeur, pas seulement dans sa propre fenêtre.

28
demandé sur rck 2009-03-19 03:25:25

9 réponses

Vous pouvez créer et définir un curseur invisible thème. Cette astuce est utilisée par maemo, parce qu'il est plutôt inutile d'avoir un curseur sur un écran tactile.

malheureusement, la capacité de changer le thème du curseur global à l'exécution n'est pas uniforme dans les applications X11 et les boîtes à outils. Vous pouvez modifier la ressource du serveur Xcursor.theme, et personne ne s'en apercevra (généralement, il est demandé au démarrage); vous pouvez en informer l' xsettings qui semble affecter uniquement Gtk+ programmes; KDE utilise une sorte de communication à travers les propriétés de la fenêtre racine; etc.

Au moins changer le curseur de votre propre application est aussi facile que XDefineCursor, et si vous le faites sur la fenêtre racine, applications suivre le long.

14
répondu ephemient 2009-03-19 01:54:43

Voici un description comment unclutter utilitaire t-il.

Uncutter est un programme qui tourne en permanence en arrière-plan D'un X11 session. Il vérifie régulièrement la position du pointeur X11 (curseur) secondes, et quand il le trouve, il n'a pas bougé (et pas de boutons sont appuyé sur la souris et le curseur n'est pas dans la fenêtre racine) il crée un petit sous-fenêtre comme un enfant de la fenêtre, le curseur est dans. La nouvelle fenêtre installe un curseur de taille 1x1, mais un masque de tous 0, c'est à dire un curseur invisible. Cela vous permet de voir tout le texte un xterm ou un xedit, par exemple. La foule des facteurs humains serait d'accord. devrait rendre les choses moins distrayant.

une Fois créé, le programme attend le pointeur de quitter la fenêtre et puis il le détruit, en rétablissant la situation d'origine. Les évènements de boutons sont transmis de manière transparente dans la fenêtre parent. Ils provoquent généralement le curseur de réapparaître parce qu'un grab actif sera fait par le programme pendant que le bouton est éteint, donc le pointeur va apparemment quitter la fenêtre, même si sa position x y ne change pas.

33
répondu Eugene Morozov 2011-09-26 19:05:28

je préférerais utiliser une méthode plus simple:

unclutter -idle 0

vous ne voyez presque pas le curseur, il est quand même disponible. Pour désactiver la souris:

rmmod psmouse

ou désactiver définitivement le module de la souris quelque part dans /etc/. Consultez votre manuel de distribution.

18
répondu sevenfourk 2015-04-10 09:35:38

une alternative à mettre de l'ordre dans

mettre de l'ordre dans n'a pas fonctionné pour moi, car il ne fonctionne pas bien avec les surfaces matérielles accélérées (comme par exemple celles produites par l'API VA-D'Intel lors du décodage vidéo). J'ai donc trouvé un programme qui cachait le pointeur de souris d'une manière moins détournée, parcs historiques de la huronie, et réécrit en C avec des dépendances minimales, le résultat est hhpc. Je l'ai fait pour éviter la nécessité d'avoir haskell à compilez - le et parce que HHP cessait parfois de cacher le pointeur de la souris.

hhpc, repose uniquement sur glibc et xlib, il est donc facile à construire, il suffit de faire make release. Vous pouvez obtenir le code et les instructions de mon dépôt. Il est très efficace en mémoire et CPU (parce qu'il ne fait presque rien).

15
répondu Aktau 2013-09-17 15:26:35

j'ai fini par utiliser XDefineCursor comme ephemient mentionné. L'application de contrôle a changé le curseur de la fenêtre racine par défaut et les autres applications (qui sont sous mon contrôle) l'ont hérité.

les spécificités du Code ressemblent à:

// 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);

afin de cacher le curseur et ensuite après que j'ai fini

// Restore the X left facing cursor
Cursor cursor;
cursor=XCreateFontCursor(display,XC_left_ptr);
XDefineCursor(display, window, cursor);
XFreeCursor(display, cursor);

pour restaurer le curseur de la main gauche de X (puisque C'est la fenêtre racine et je ne veux pas qu'il reste invisible. Je ne suis pas sûr, mais je pourrais aussi être en mesure d'utiliser

XUndefineCursor(display, window);
14
répondu rck 2015-04-22 15:59:29

il y a un -no-cursor option pour Xorg 1.7 et versions ultérieures. https://www.x.org/wiki/AdvancedTopicsFAQ/

xinit -- -nocursor ou startx -- -nocursor pourrait fonctionner.

12
répondu rmarscher 2016-09-15 19:27:49

utilisez xbanish! Il "bannit le curseur de la souris en tapant"! Commencer par

xbanish &

et profitez-en!

6
répondu ILUXA 2017-02-05 02:47:49

C'est ma solution. Il place le curseur là où vous ne pouvez pas le voir (dans mon cas, dans le coin inférieur gauche)-puis, il désactive la souris, de sorte que vous ne pouvez pas le déplacer.

Remarque: vous pouvez analyser les données de xrandr, ou de mettre des données dans un environnement sur connexion, puis l'utiliser; de cette façon, vous n'aurez pas l'avoir codé en dur. Mais pour moi, je ne change jamais la résolution de mon écran, donc 768 est OK:)

setmouse () {
   DISPLAY=":0" xinput  `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
}
4
répondu Emanuel Berg 2013-01-24 03:27:31

Tous les à droite!

je suppose que ce post est peut-être un peu vieux, mais si ce que j'ai trouvé peut aider certains d'entre nous, je dois le poster ici ;)

je me suis trouvé une solution propre et simple qui fonctionne bien, sans utiliser " xcb " (pour ce que j'ai essayé de réaliser, c'était un peu trop d'ingénierie (..)

Donc:

Tout ce dont vous avez besoin est la commande "xsetroot", avec les arguments/paramètres appropriés:

-> pour cacher le curseur de la souris, vous besoin d'un petit fichier (j'ai appelé le mien "blnk_ptr.xbm")

le contenu de ce fichier:

#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 };

alors, nous pouvons utiliser les deux commandes suivantes:

-> pour masquer le pointeur de la souris curseur:

xsetroot -cursor blnk_ptr.xbm blnk_ptr.xbm

- > pour afficher à nouveau le curseur du pointeur de la souris:

xsetroot -cursor_name left_ptr

( vous pouvez utiliser un pointeur de souris curseur autres que "left_ptr", mais celui-ci semble être largement disponible à travers les systèmes *nix (..)

Btw-> je ne sais pas encore comment obtenir le nom du pointeur actuellement utilisé par le système en utilisant xsetroot --> je suppose que je vais [comme d'habitude] creuser cela aussi, mais je serais heureux d'avoir quelqu'un qui sait comment-me donner la réponse ( ce serait bien ;) )

Profiter ? ;p

4
répondu StephaneAG 2014-05-13 15:53:48