Saisir les entrées sous Linux

D’abord, oui, je connais cette question , mais je cherche un peu plus d’informations à ce sujet. J’ai en fait, un problème assez similaire, en ce sens que je dois être capable de capturer une entrée pour la souris / clavier / joystick, et aussi éviter autant que possible le SDL. Je me demandais plus ou moins si quelqu’un savait où je pouvais obtenir des informations correctes sur la manipulation des entrées de périphériques sous Linux, peut-être même des tutoriels. SDL fonctionne très bien pour la gestion des entrées multi-plateformes, mais je ne vais pas utiliser du tout de SDL, donc je voudrais le supprimer complètement. La suggestion, les commentaires et l’aide sont tous appréciés. Merci!

Modifier pour plus de clarté:

Le but est de capturer le mouvement de la souris, la pression / relâchement du clavier, les clics de la souris et potentiellement la manipulation du joystick pour un jeu.

En utilisant le lien ci-dessous, regardez la fonction void kGUISystemX :: Loop (void)

Ceci est ma boucle principale pour obtenir des entrées via le clavier et la souris en utilisant X Windows sous Linux.

http://code.google.com/p/kgui/source/browse/trunk/kguilinux.cpp

Voici un extrait:

if(XPending(m_display)) { XNextEvent(m_display, &m_e); switch(m_e.type) { case MotionNotify: m_mousex=m_e.xmotion.x; m_mousey=m_e.xmotion.y; break; case ButtonPress: switch(m_e.xbutton.button) { case Button1: m_mouseleft=true; break; case Button3: m_mouseright=true; break; case Button4:/* middle mouse wheel moved */ m_mousewheel=1; break; case Button5:/* middle mouse wheel moved */ m_mousewheel=-1; break; } break; case ButtonRelease: switch(m_e.xbutton.button) { case Button1: m_mouseleft=false; break; case Button3: m_mouseright=false; break; } break; case KeyPress: { XKeyEvent *ke; int ks; int key; ke=&m_e.xkey; kGUI::SetKeyShift((ke->state&ShiftMask)!=0); kGUI::SetKeyControl((ke->state&ControlMask)!=0); ks=XLookupKeysym(ke,(ke->state&ShiftMask)?1:0); ...... 

Si vous savez que votre projet ne sera exécuté que sous Linux (pas Windows ou même l’un des BSD), vous devriez examiner le système de saisie du kernel Linux. Téléchargez le source du kernel et lisez Documentation/input/input.txt , en particulier la description du système evdev .

Pour une solution de niveau nettement supérieur (et plus portable), lisez sur Xlib . Évidemment, cela nécessite un serveur X en cours d’exécution, mais il présente l’avantage d’hériter les parameters de clavier de l’utilisateur. Les événements joystick ne sont malheureusement pas inclus, vous devrez probablement utiliser l’API joystick du kernel pour ceux-ci.

Vous pouvez commencer par lire ce formulaire de tutoriel Le projet de documentation Linux

Vous n’avez pas indiqué le but de votre application, mais lire les données brutes des périphériques d’entrée est rarement ce que vous voulez, à moins que vous le fassiez simplement pour le plaisir (ou un projet scolaire ou autre).

Si vous écrivez une application graphique (celle qui s’exécute dans un environnement graphique X11), vous pouvez vous fier aux outils graphiques (ou raw X).

Si vous écrivez un client en mode texte, alors peut-être que readline ou même ncurses pourraient être de bonnes alternatives.

Vous pouvez obtenir une entrée directe des fichiers dans / dev / input. C’est le moyen le plus simple de le faire et vous n’avez pas besoin de logiciel supplémentaire.