Skrip yang diretas bersama ini berfungsi untuk saya untuk saat ini:
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 ] )
Ia menggunakan python-evdev untuk membaca dari /dev/input/foo
dan dengan sangat kotor mengonversinya menjadi nilai yang dapat dibaca.
Inilah yang saya dapatkan saat menjalankan skrip dan menghubungkan kartu ke pembaca:
[email protected] ~ $ python test.py
7
6
4
3
f
a
4
6
Ini adalah retasan sederhana untuk membuatnya bekerja dengan mudah hingga boot berikutnya, dengan asumsi Anda memiliki hak istimewa yang diperlukan.
Menggunakan perintah berikut menunjukkan semua proses yang berjalan di komputer
ps -ef
Untuk menemukan PID proses masuk/getty dari tempat keyboard saat ini dibaca, kita dapat meneruskan hasil fungsi ini melalui grep.
ps -ef | grep tty
Anda dapat melihat sesuatu seperti
root 23698 1 0 18:17 ttyO0 00:00:00 /sbin/getty -L ttyO0 115200 vt102
Catat nomor di kolom kedua - itu adalah PID. Dan kolom keenam, tempat keyboard berada.
Untuk menghentikan proses tersebut, gunakan perintah berikut (ganti nomor untuk apa pun PID Anda)
kill -stop 23698
Sekarang, Anda dapat membaca tty dari mana tombol keyboard berasal (tty ditampilkan di perintah ps)
cat /dev/ttyO0
cat
akan membaca selamanya, mengeluarkan apa pun yang dimasukkan pada keyboard, sampai Anda mematikannya.
Setelah selesai, dan ingin kembali ke perilaku normal, Anda dapat melanjutkan fungsi keyboard dengan
kill -cont 23698
Tentu saja itu menguraikan gagasan umum. Anda dapat menggunakan program Anda sendiri untuk membaca dari tty.
Harus melakukan ini baru-baru ini untuk Hackathon, jadi saya pikir saya akan berkontribusi apa yang akhirnya kami lakukan.
-
Siapkan autologin sebagai root di tty1 (terminal utama tempat perangkat keyboard membuang inputnya). Entri wiki Arch Linux memiliki instruksi yang baik. Nyalakan ulang untuk membuatnya masuk.
-
Salin sumber program kecil yang dikenal sebagai 'ttyEcho'. Satu salinan dapat ditemukan di sini, tetapi pencarian Google menampilkan lebih banyak lagi. Program ini memungkinkan Anda untuk menggemakan perintah ke terminal lain. Kompilasi pada mesin target.
-
Sekarang kita bisa menjalankan apapun di /dev/tty1, kita hanya bisa
./ttyEcho -n /dev/tty1 'cat > buffer'
untuk mendapatkan semua input pada tty1 untuk ditambahkan ke file. Alih-alih membuat file yang terus berkembang, gunakanmkfifo buffer
pertama untuk menghasilkan file khusus yang hanya berupa pipa bernama - antrean FIFO yang hanya didukung oleh memori. -
Dari sesi SSH, Anda sekarang hanya dapat
tail -f filename
untuk menonton semua input keyboard di tty1. Dari dalam python,open('filename','r')
dan terus panggil.read()
atau.readline()
di atasnya untuk mendapatkan umpan data keyboard saat masuk.
Metode ini bagus untuk kami karena menghindari penguraian kode pindaian keyboard, dan menyimpan buffer besar data yang bagus tanpa kode apa pun.