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.
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.
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.
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.
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).
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);
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.
utilisez xbanish! Il "bannit le curseur de la souris en tapant"! Commencer par
xbanish &
et profitez-en!
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
}
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