このハッキングされたスクリプトは、今のところうまくいきます:
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 ] )
python-evdev を使用して /dev/input/foo
から読み取ります そして、それらを読み取り可能な値に非常に汚い方法で変換します。
スクリプトを実行してカードをリーダーに接続すると、次のようになります。
[email protected] ~ $ python test.py
7
6
4
3
f
a
4
6
必要な権限があると仮定して、次の起動まで簡単に動作させるための簡単なハックを次に示します。
次のコマンドを使用すると、コンピューターで実行されているすべてのプロセスが表示されます
ps -ef
キーボードが現在読み取られているところから login/getty プロセスの PID を見つけるために、grep を介してこの関数の結果を渡すことができます。
ps -ef | grep tty
次のようなものを見ることができます
root 23698 1 0 18:17 ttyO0 00:00:00 /sbin/getty -L ttyO0 115200 vt102
2 番目の列の数字に注意してください。これが PID です。そして 6 列目は、キーボードがある場所です。
そのプロセスを停止するには、次のコマンドを使用します (PID を数値に置き換えます)
kill -stop 23698
これで、キーボードのキーが来る場所から tty を読み取ることができます (tty は ps コマンドで表示されます)。
cat /dev/ttyO0
cat
永久に読み取り、キーボードで入力されたものを何でも出力します。
完了し、通常の動作に戻りたい場合は、
でキーボード機能を再開できます。kill -cont 23698
もちろん、それは一般的なアイデアの概要です。独自のプログラムを使用して tty から読み取ることができます。
最近ハッカソンのためにこれをしなければならなかったので、私たちが最終的に行ったことに貢献することにしました.
<オール>tty1 (キーボードデバイスが入力をダンプするメイン端末) で root として自動ログインをセットアップします。 Arch Linux wiki エントリには適切な手順があります。再起動してログインしてください。
「ttyEcho」として知られる小さなプログラムのソースをコピーします。 1 つのコピーはここにありますが、Google で検索するとさらに多くの情報が表示されます。このプログラムを使用すると、コマンドを別の端末にエコーできます。ターゲット マシンでコンパイルします。
/dev/tty1 でなんでも実行できるようになったので、あとは ./ttyEcho -n /dev/tty1 'cat > buffer'
だけです。 tty1 のすべての入力をファイルに追加します。常に拡張するファイルを作成する代わりに、mkfifo buffer
を使用します 最初に、単なる名前付きパイプである特別なファイルを生成します。これは、メモリのみによってサポートされる FIFO キューです。
SSH セッションから tail -f filename
できるようになりました tty1 でのすべてのキーボード入力を監視します。 Python 内から open('filename','r')
.read()
を呼び出し続けます または .readline()
入ってくるキーボード データのフィードを取得します。
この方法は、キーボード スキャンコードの解析を回避し、コードなしでデータの適切な大きなバッファーを保持するため、私たちにとって素晴らしいものでした。