Comment empêcher le périphérique HID sur certains ports USB

Pour des raisons de security, je souhaite éviter que les périphériques d'input ne puissent pas être utilisés sur un certain port USB. La fonctionnalité sans input (par exemple stockage de masse ou ttyUSB) doit être disponible sur ce port. Les périphériques d'input doivent toujours fonctionner sur d'autres ports USB.

"ne peut pas être utilisé" signifie qu'aucun /dev/input/eventX n'est créé et que les frameworks communs (X11, console Linux) n'acceptent pas les inputs du périphérique.

Je peux identifier le port USB par des règles udev comme

 DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7/2-1.7.1/*" 

mais je ne suis pas sûr de savoir comment le désactiver.

Les anciennes versions d'udev supscopes OPTIONS+="ignore_device" mais cette option est partie.

Comment puis-je faire ceci?

Vous devez écrire une règle pour chacun des types possibles de périphérique d'input, à savoir:

  • ID_INPUT_KEYBOARD
  • ID_INPUT_KEY
  • ID_INPUT_MOUSE
  • ID_INPUT_TOUCHPAD
  • ID_INPUT_TABLET
  • ID_INPUT_JOYSTICK

Dans la règle, testez que la variable d'environnement portant ce nom n'est pas vide, par exemple correspondez-la au model glob ?* qui ne correspond que s'il y a au less un caractère. Par exemple:

 ENV{ID_INPUT_KEYBOARD}=="?*" 

Dans chaque règle, lorsqu'elle correspond, définissez l'atsortingbut authorized l'appareil sur 0, par exemple:

 ATTR{authorized}="0" 

Il est préférable de replace = par := afin de ne pas pouvoir être remplacé par une règle ultérieure. Cela donne une règle typique de:

 ACTION=="add", DEVPATH=="...", ENV{ID_INPUT_KEYBOARD}=="?*", ATTR{authorized}:="0" 

Voir cette présentation par Adrian Crenshaw.