Ce script piraté fonctionne pour moi pour le moment :
import string
from evdev import InputDevice
from select import select
keys = "X^1234567890XXXXqwertzuiopXXXXasdfghjklXXXXXyxcvbnmXXXXXXXXXXXXXXXXXXXXXXX"
dev = InputDevice('/dev/input/by-id/usb-HID_OMNIKEY_5127_CK_01010053423438303000835748112531-event-kbd')
while True:
r,w,x = select([dev], [], [])
for event in dev.read():
if event.type==1 and event.value==1:
print( keys[ event.code ] )
Il utilise python-evdev pour lire à partir de /dev/input/foo
et les convertit très salement en valeurs lisibles.
Voici ce que j'obtiens lorsque j'exécute le script et que je connecte une carte au lecteur :
[email protected] ~ $ python test.py
7
6
4
3
f
a
4
6
Voici un hack simple pour le faire fonctionner facilement jusqu'au prochain démarrage, en supposant que vous ayez les privilèges requis.
L'utilisation de la commande suivante affiche tous les processus en cours d'exécution sur l'ordinateur
ps -ef
Pour trouver le PID du processus login/getty à partir duquel le clavier est actuellement lu, nous pouvons transmettre les résultats de cette fonction via grep.
ps -ef | grep tty
Vous pourriez voir quelque chose comme
root 23698 1 0 18:17 ttyO0 00:00:00 /sbin/getty -L ttyO0 115200 vt102
Prenez note du nombre dans la deuxième colonne - c'est le PID. Et la sixième colonne, où se trouve le clavier.
Pour arrêter ce processus, utilisez la commande suivante (en remplaçant le numéro par votre PID)
kill -stop 23698
Maintenant, vous pouvez lire le tty d'où viennent les touches du clavier (tty est affiché dans la commande ps)
cat /dev/ttyO0
Le cat
lira indéfiniment, affichant tout ce qui est entré sur le clavier, jusqu'à ce que vous le tuiez.
Lorsque vous avez terminé et que vous souhaitez revenir au comportement normal, vous pouvez reprendre la fonction du clavier avec
kill -cont 23698
Bien sûr, cela décrit l'idée générale. Vous pouvez utiliser votre propre programme pour lire à partir du tty.
J'ai dû le faire récemment pour un Hackathon, alors j'ai pensé que je contribuerais à ce que nous avons fini par faire.
-
Configurez l'autologin en tant que root sur tty1 (le terminal principal où le clavier transfère son entrée). L'entrée du wiki Arch Linux contient de bonnes instructions. Redémarrez pour qu'il se connecte.
-
Copiez la source d'un petit programme connu sous le nom de 'ttyEcho'. Une copie peut être trouvée ici, mais une recherche Google en amène beaucoup plus. Ce programme vous permet de renvoyer des commandes vers un autre terminal. Compilez sur la machine cible.
-
Maintenant que nous pouvons exécuter n'importe quoi sur /dev/tty1, nous pouvons simplement
./ttyEcho -n /dev/tty1 'cat > buffer'
pour que toutes les entrées sur tty1 soient ajoutées à un fichier. Au lieu de créer un fichier en constante expansion, utilisezmkfifo buffer
d'abord pour générer un fichier spécial qui est juste un tube nommé - une file d'attente FIFO qui est sauvegardée uniquement par la mémoire. -
Depuis votre session SSH, vous pouvez désormais
tail -f filename
pour regarder toutes les saisies au clavier sur tty1. Depuis Python,open('filename','r')
et continuez d'appeler le.read()
ou.readline()
dessus pour obtenir le flux des données du clavier au fur et à mesure qu'elles arrivent.
Cette méthode était géniale pour nous car elle évite l'analyse du scancode du clavier et conserve un gros tampon de données sans aucun code.