• # Réponse

    Posté par . En réponse au message Appuie simultané de plusieurs touches. Évalué à 3.

    Je suis désolé, j'ai été un peu prompt à poser ma question sur le forum, alors je vais tenter de me répondre moi même.

    J'ai eu une partie de ma réponse en allant chercher dans le code source de showkey (console-tools). Donc il faut bien désactivé les modes ICANON et ECHO de la console. Ensuite il faut placer le clavier en mode raw. C'est à dire que le clavier envoie un code pour la touche appuyé (toutes les touches, y compris Ctrl, Alt, CapsLock...) et un code pour la touche relâché. Ainsi, détecter l'appuie de plusieurs touches devient tout à fait possible.

    Le passage du clavier en mode raw se fait par la fonction ioctl(fd, KDSKBMODE, K_RAW) ou fd représente la console courante. Seul problème en mode graphique (émulation de console ex:konsole) X a déjà passé le clavier en raw puisqu'il capte les évenements du clavier (touches Windows,Ctrl et toutes les autres). D'ailleurs une autre méthode aurai été d'utilisé l'API du serveur graphique pour les événements.

    Donc le comportement est différent, si vous exécutez en console émulé (konsole) ou en console native. De plus pensez à bien réinitialisé le mode du clavier en fin de programme (lancer kbd_mode -a depuis une connexion ssh pour vous sauver)