Jika Anda menggunakan Linux, cara terbaik untuk membedakan antara perangkat masukan adalah dengan menggunakan Antarmuka Peristiwa Linux. Setelah input khusus perangkat keras perangkat didekodekan, input tersebut diubah menjadi struktur peristiwa khusus Linux menengah dan tersedia dengan membaca satu atau lebih perangkat karakter di bawah /dev/input/
. Omong-omong, ini sepenuhnya independen dari bahasa pemrograman yang Anda gunakan.
Setiap perangkat keras mendapatkan /dev/input/eventX
sendiri perangkat, dan ada juga agregat (mis. /dev/input/mice
yang mewakili gerakan semua tikus dalam sistem). Sistem Anda mungkin juga memiliki /dev/input/by-path
dan /dev/input/by-id
.
Ada ioctl
disebut EVIOCGNAME
yang mengembalikan nama perangkat sebagai string yang dapat dibaca manusia, atau Anda dapat menggunakan sesuatu seperti /dev/input/by-id/usb-Logitech_USB_Gaming_Mouse-mouse
.
Anda membuka perangkat, dan setiap kali suatu peristiwa datang dari perangkat keras input, Anda akan mendapatkan paket data. Jika Anda dapat membaca C, Anda dapat mempelajari file /usr/include/linux/input.h
yang menunjukkan dengan tepat bagaimana hal ini bekerja. Jika tidak, Anda dapat membaca pertanyaan ini yang memberikan semua informasi yang Anda butuhkan.
Hal yang baik tentang antarmuka acara adalah Anda baru mengetahui perangkat apa yang Anda butuhkan, dan Anda dapat membaca masukan dari perangkat masukan itu hanya , mengabaikan yang lainnya. Anda juga akan mendapatkan notifikasi tentang kunci, tombol, dan kontrol yang biasanya tidak Anda dapatkan hanya dengan membaca aliran karakter yang 'dimasak' dari terminal:bahkan tombol mati seperti Shift , dll.
Hal buruknya adalah antarmuka acara tidak mengembalikan karakter 'dimasak', ia hanya menggunakan kode numerik untuk kunci (kode yang sesuai dengan setiap kunci ditemukan di file header yang disebutkan di atas — tetapi juga di sumber Python dari event.py. Jika perangkat input Anda memiliki kunci/tombol yang tidak biasa, Anda mungkin perlu sedikit bereksperimen hingga mendapatkan angka yang tepat.
Pendekatan alternatif (jika "keyboard" Anda tidak memiliki banyak tombol - banyak perangkat berpura-pura menjadi keyboard) adalah dengan menerapkan pemetaan tombol ke setiap keyboard secara khusus dan memastikan bahwa tombol dibedakan.
Ini diuraikan di sini:https://superuser.com/questions/760602/how-to-remap-keys-under-linux-for-a-specific-keyboard-only. Poin utamanya adalah setxkbmap
mengambil argumen perangkat.
Jika Anda menggunakan pendekatan input mentah, lsinput akan menemukan perangkat mentah untuk Anda.