Je vais passer à la question dans l'ordre inverse:
- Pourquoi y en a-t-il autant?
Ce sont des appareils qui représentent la plupart des entrées présentes sur une machine (il y en a d'autres, un microphone par exemple ne sera pas géré /dev/input
). Contrairement à l'hypothèse selon laquelle un clavier et une souris donneraient 2 appareils, même le clavier et la souris les plus simples en donneraient encore 6.
Pourquoi 6? Parce que Xorg créera un clavier d'entrée de test et une souris d'entrée de test (toutes deux virtuelles) lors de son démarrage. En outre, il agrégera le clavier de test avec le clavier réel dans un appareil virtuel principal. c'est-à-dire qu'il effectuera le multiplexage de l'entrée. La même chose se produira pour le test et la souris réelle.
De plus, un ordinateur typique (ordinateur de bureau ou ordinateur portable) possède d'autres boutons que le clavier: bouton d'alimentation, bouton de veille.
Les eventN
appareils qui s'y trouvent sont des appareils pour les choses que Xorg crée et pour ce que l'ordinateur a. Le N
provient d'ID séquentiels et est analogue aux ID de xinput
. Par exemple sur ma machine j'ai:
[~]# ls -l /dev/input/
total 0
drwxr-xr-x 2 root root 100 Jan 26 16:01 by-id
drwxr-xr-x 2 root root 140 Jan 26 16:01 by-path
crw-rw---- 1 root input 13, 64 Jan 26 16:01 event0
crw-rw---- 1 root input 13, 65 Jan 26 16:01 event1
crw-rw---- 1 root input 13, 74 Jan 26 16:01 event10
crw-rw---- 1 root input 13, 75 Jan 26 16:01 event11
crw-rw---- 1 root input 13, 76 Jan 26 16:01 event12
crw-rw---- 1 root input 13, 77 Jan 26 16:01 event13
crw-rw---- 1 root input 13, 66 Jan 26 16:01 event2
crw-rw---- 1 root input 13, 67 Jan 26 16:01 event3
crw-rw---- 1 root input 13, 68 Jan 26 16:01 event4
crw-rw---- 1 root input 13, 69 Jan 26 16:01 event5
crw-rw---- 1 root input 13, 70 Jan 26 16:01 event6
crw-rw---- 1 root input 13, 71 Jan 26 16:01 event7
crw-rw---- 1 root input 13, 72 Jan 26 16:01 event8
crw-rw---- 1 root input 13, 73 Jan 26 16:01 event9
crw-rw---- 1 root input 13, 63 Jan 26 16:01 mice
crw-rw---- 1 root input 13, 32 Jan 26 16:01 mouse0
crw-rw---- 1 root input 13, 33 Jan 26 16:01 mouse1
Et xinput
me donne des identifiants analogues:
[~]$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Optical Mouse id=10 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ USB 2.0 Camera id=11 [slave keyboard (3)]
↳ Asus Laptop extra buttons id=12 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=13 [slave keyboard (3)]
(Regardez qui eventN
correspond à id=N
)
Sans Xorg
1.1 À quoi sert ce fichier?
Notez que toutes les entrées aléatoires (y compris ma caméra USB!) Sont vues par Xorg comme faisant partie du clavier virtuel. Cela permet le multiplexage et le démultiplexage des entrées. Par exemple, je peux déplacer ma souris via ma souris USB ou via mon trackpad et une application n'a pas besoin de connaître la différence.
(Le fait que la caméra USB fasse partie du clavier virtuel est dû au fait qu'elle a un bouton pour l'activer et le désactiver. Et comme il s'agit d'un bouton, il fait partie du sous-système du clavier. L'entrée vidéo réelle est gérée /sys/class/video4linux
. )
En d'autres termes, pour une application, il n'y a vraiment qu'un seul clavier et une seule souris. Mais Xorg et le noyau doivent tous les deux connaître les différences. Et cela conduit à la dernière partie:
1.2 Pourquoi ne pas simplement l'envoyer directement du noyau au serveur X?
Parce que Xorg a besoin de connaître la différence.
Et il y a des situations où cela est utile. Vous pouvez remapper les clés de Xorg sur chaque périphérique d'entrée esclave différemment. Par exemple, j'ai un jeu de jeu avec pédales, lorsqu'il est utilisé dans un jeu de course qu'il produit a, bet cpour chacune de ses pédales. Pourtant, lors de la programmation, je remappe ces touches vers Esc, Ctrlet Altsans remapper les touches du clavier lui-même.
De plus, il n'est pas nécessaire qu'une machine exécute Xorg. Par exemple, sur un serveur sans tête, je peux obtenir la sortie suivante:
[~]$ ls -l /dev/input/
total 0
drwxr-xr-x 2 root root 80 Nov 8 02:36 by-path
crw-rw---- 1 root input 13, 64 Nov 8 02:36 event0
crw-rw---- 1 root input 13, 65 Nov 8 02:36 event1
crw-rw---- 1 root input 13, 66 Nov 8 02:36 event2
Lorsque les périphériques d'entrée correspondent aux ports série (notamment dans ce cas, ils le font) au lieu du clavier ou de la souris.
gpm
).gpm
démon, ou GTK2 sur framebuffer.Il n'y a rien de tel que «l'envoyer directement». Les applications doivent avoir une méthode de lecture des données, et sous Unix, cela se fait de la même manière qu'elles lisent les fichiers normaux en créant un nœud de périphérique qui fonctionne avec les appels système d'E / S de fichiers normaux pour permettre aux applications de les ouvrir et de les lire.
Il existe d'autres sources d'entrée en plus de la souris et du clavier. Vous pouvez découvrir ce que chacun est en regardant
/sys/class/input
. Là, vous affinez les fichiers avec les mêmes noms inputNN qui sont des liens symboliques vers un autre nœud dans les sysfs qui décrivent le périphérique qu'ils représentent. D'autres sources courantes incluent les cartes son (qui signalent lorsque les choses sont branchées et débranchées) et le bouton d'alimentation physique de l'ordinateur.la source