Comment obtenir le nom (chemin) du périphérique créé par uinput

J’ai réussi à configurer un petit programme pour créer un périphérique uinput que je prévois utiliser pour automatiser le test d’une application recevant des événements d’entrée au clavier.

J’ai suivi les deux tutoriels comme dans cette très belle réponse .

Lorsque mon programme crée le périphérique uinput en appelant ioctl(fd, UI_DEV_CREATE) un nouveau périphérique apparaît dans le système de fichiers afin que mon application testée puisse s’y attacher et attendre les événements. Mon système cible a déjà un /dev/input/event0 , de sorte que le nouveau système obtient le chemin /dev/input/event1 . Si je comstack et exécute le programme pour mon système de bureau, où il y a des périphériques existants /dev/input/event[0-15] , lors de l’exécution du programme, le nouveau périphérique obtient /dev/input/event16 .

J’aimerais que mon programme rapporte le nouveau nom du périphérique après l’avoir créé. Y a-t-il un moyen de l’obtenir?

    Oui, vous pouvez utiliser UI_GET_SYSNAME (défini dans /usr/include/linux/uinput.h ) s’il est disponible sur votre plate-forme (Android, par exemple, ne le définit pas pour une raison quelconque). Cela vous donnera un nom pour le périphérique créé dans /sys/devices/virtual/input . Une fois que vous connaissez le périphérique dans sysfs , vous pouvez déterminer le (s) périphérique (s) créé (s) dans /dev/input en lisant cette question SO .

    Utilisez-le après avoir appelé UI_DEV_CREATE comme UI_DEV_CREATE (en omettant la vérification d’erreur / de cohérence):

     ioctl(fd, UI_DEV_CREATE); char sysfs_device_name[16]; ioctl(fd, UI_GET_SYSNAME(sizeof(sysfs_device_name)), sysfs_device_name); printf("/sys/devices/virtual/input/%s\n", sysfs_device_name); 

    S’il n’est pas disponible, vous pouvez essayer de rechercher le périphérique sysfs dans /proc/bus/input/devices qui devrait contenir une entrée telle que:

     I: Bus=0006 Vendor=0001 Product=0001 Version=0001 N: Name="your-uinput-device-name" P: Phys= S: Sysfs=/devices/virtual/input/input12 U: Uniq= H: Handlers=sysrq kbd mouse0 event11 B: PROP=0 B: EV=7 B: KEY=70000 0 0 0 0 0 7ffff ffffffff fffffffe B: REL=143 

    ..qui est un peu en désordre. Mais comme vous pouvez le constater, cela vous donnera également un raccourci vers le périphérique créé dans /dev/input .