Dieses zusammengehackte Skript funktioniert für mich jetzt:
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 ] )
Es verwendet python-evdev, um von /dev/input/foo
zu lesen und wandelt sie sehr unsauber in lesbare Werte um.
Folgendes erhalte ich, wenn ich das Skript ausführe und eine Karte an das Lesegerät anschließe:
[email protected] ~ $ python test.py
7
6
4
3
f
a
4
6
Hier ist ein einfacher Hack, damit es bis zum nächsten Start problemlos funktioniert, vorausgesetzt, Sie haben die erforderlichen Berechtigungen.
Mit dem folgenden Befehl werden alle Prozesse angezeigt, die auf dem Computer ausgeführt werden
ps -ef
Um die PID des Anmelde-/Getty-Prozesses zu finden, von dem die Tastatur gerade gelesen wird, können wir die Ergebnisse dieser Funktion durch grep übergeben.
ps -ef | grep tty
Sie könnten so etwas wie
sehenroot 23698 1 0 18:17 ttyO0 00:00:00 /sbin/getty -L ttyO0 115200 vt102
Notieren Sie sich die Zahl in der zweiten Spalte – das ist die PID. Und die sechste Spalte, in der sich die Tastatur befindet.
Um diesen Prozess anzuhalten, verwenden Sie den folgenden Befehl (ersetzen Sie die Nummer durch Ihre PID)
kill -stop 23698
Jetzt können Sie das tty lesen, von dem die Tastaturtasten kommen (tty wird im ps-Befehl angezeigt)
cat /dev/ttyO0
Die cat
liest ewig und gibt aus, was auch immer auf der Tastatur eingegeben wird, bis Sie es beenden.
Wenn Sie fertig sind und zum normalen Verhalten zurückkehren möchten, können Sie die Tastaturfunktion mit
wieder aufnehmenkill -cont 23698
Das umreißt natürlich die Grundidee. Sie könnten Ihr eigenes Programm verwenden, um aus dem tty zu lesen.
Musste dies kürzlich für einen Hackathon tun, also dachte ich, ich würde zu dem beitragen, was wir am Ende gemacht haben.
-
Richten Sie die automatische Anmeldung als root auf tty1 ein (dem Hauptterminal, an dem das Tastaturgerät seine Eingabe ausgibt). Der Arch-Linux-Wiki-Eintrag enthält gute Anweisungen. Starten Sie neu, damit es sich anmeldet.
-
Kopieren Sie den Quellcode eines kleinen Programms namens 'ttyEcho'. Eine Kopie kann hier gefunden werden, aber eine Google-Suche bringt viele weitere hervor. Mit diesem Programm können Sie Befehle an ein anderes Terminal senden. Kompilieren Sie auf dem Zielcomputer.
-
Jetzt, wo wir alles auf /dev/tty1 ausführen können, können wir einfach
./ttyEcho -n /dev/tty1 'cat > buffer'
um alle Eingaben auf tty1 zu einer Datei hinzuzufügen. Anstatt eine immer größer werdende Datei zu erstellen, verwenden Siemkfifo buffer
zuerst eine spezielle Datei zu generieren, die nur eine benannte Pipe ist - eine FIFO-Warteschlange, die nur durch Speicher unterstützt wird. -
Aus Ihrer SSH-Sitzung können Sie jetzt nur noch
tail -f filename
um alle Tastatureingaben auf tty1 zu sehen. Aus Python herausopen('filename','r')
und rufen Sie weiterhin.read()
an oder.readline()
darauf, um den Feed der Tastaturdaten zu erhalten, sobald sie eingehen.
Diese Methode war großartig für uns, da sie das Analysieren des Tastatur-Scancodes vermeidet und einen schönen großen Puffer der Daten ohne Code bereithält.