OpenBSD, wskbd(4): demuxer et detourner les entrees clavier
Bonjour,
J'ai des scanners de codes barre qui se présentent à l'OS comme des
claviers USB (pour detailler: ce sont en fait des scanners sans
fil bluetooth, raccordés à la machine par des adaptateurs usb-bluetooth
qui gèrent l'émulation clavier magiquement et s'occupent de l'aspect
bluetooth sans rien demander à l'OS). Les codes barres sont donc
envoyés à l'OS sous la forme de saisies clavier.
Le tout fonctionne parfaitement sous OpenBSD 3.9:
uhidev0 at uhub0 port 1 configuration 1 interface 0
uhidev0: Baracoda Baracoda HID, rev 1.10/10.77, addr 2, iclass 3/1
ukbd0 at uhidev0: 8 modifier keys, 6 key codes
wskbd1 at ukbd0 mux 1
wskbd1: connecting to wsdisplay0
Seulement, du point de vue applications censées récupérer les codes
barres scannés, ce n'est pas tres pratique: touts les scans sont
envoyés dans les consoles auxquelles sont attachées les wskbdX, et
c'est finalement getty(8) qui les reçoit.
Je pourrait me logguer physiquement sur la console et lancer
manuellement l'appli, mais ce n'est pas très pratique et cela ne
me permet pas de distinguer les entrées des divers scanners branchés.
J'ai pensé attacher mon application a un terminal via ttys(5), mais
ça ne me semble pas très propre, ça fait beaucoup de code en root,
je ne sait pas comment assigner un clavier à un tty précis, et je
voudrais brancher plusieurs scanners sur la machine.
misc/mtty et script(1) semblent ne pas convenir non plus, pour les
memes raisons (obligation de les lancer manuellement ?, discrimination
des divers claviers/wskbd ...).
Un truc du genre "tail -f /dev/wskbd1 > outfile" aurait été super ...
mais ça ne marche pas (pas mieux avec /dev/tty).
Existe-t-il une astuce pour logguer/sniffer/dupliquer/... les entrées
des claviers depuis le userland ?
Comment "dé-multiplexer" (distinguer) les saisies des différents
clavier connectés à une machine ?
|