Si vous écrivez un programme du monde réel qui utilise la souris sous Linux, vous écrivez probablement une application X, et dans ce cas, vous devez demander au serveur X les événements de souris. Qt , GTK et libsdl sont des bibliothèques C populaires qui fournissent des fonctions pour accéder à la souris, au clavier, aux graphiques, aux minuteurs et à d'autres fonctionnalités nécessaires à l'écriture de programmes GUI. Ncurses est une bibliothèque similaire pour les applications terminales.
Mais si vous explorez votre système ou si vous ne pouvez pas utiliser X pour une raison quelconque, voici comment cela fonctionne à l'interface du noyau.
Une idée centrale de la philosophie UNIX est que "tout est un fichier". Plus précisément, autant de choses que possible doivent être accessibles via les mêmes appels système que ceux que vous utilisez pour travailler avec des fichiers. Et donc l'interface du noyau avec la souris est un fichier de périphérique. Vous pouvez open()
, éventuellement appeler poll()
ou select()
dessus pour voir s'il y a des données entrantes, et read()
pour lire les données.
Dans les temps pré-USB, le fichier de périphérique spécifique est souvent un port série, par exemple /dev/ttyS0
, ou un port PS / 2, /dev/psaux
. Vous avez parlé à la souris en utilisant le protocole matériel intégré à la souris. De nos jours, le /dev/input/*
sous-système est préféré, car il fournit un moyen unifié et indépendant de l'appareil de gérer de nombreux appareils d'entrée différents. En particulier, /dev/input/mice
vous donnera les événements de n'importe quelle souris connectée à votre système et /dev/input/mouseN
vous donnera les événements d'une souris particulière. Dans la plupart des distributions Linux modernes, ces fichiers sont créés dynamiquement lorsque vous branchez une souris.
Pour plus d'informations sur ce que vous souhaitez lire ou écrire dans le fichier du périphérique de la souris, vous pouvez commencer par input / input.txt dans la documentation du noyau. Regardez en particulier les sections 3.2.2 (mousedev) et 3.2.4 (evdev), ainsi que les sections 4 et 5.