Saya sering bekerja pada stasiun pasangan di mana ada beberapa keyboard yang diinstal. Saya dapat menggunakan setxkbmap
dengan -device <ID>
untuk mengatur tata letak keyboard tertentu (menggunakan ID darixinput
), tetapi seringkali tidak jelas keyboard mana yang saya gunakan . Akan lebih baik untuk menghindari bolak-balik mencoba kedua keyboard, jadi saya ingin menulis alat cepat untuk mendapatkan informasi ini setxkbmap
. Saya mengharapkan kasus penggunaan tipikal seperti berikut ini:
$ setxkbmap -device "$(get-keyboard-id)" -layout gb
Press Enter to detect keyboard ID
Antarmuka mana yang menyediakan informasi ini di Linux? Idealnya itu harus bekerja tanpa X, tapi itu bukan keharusan (sepertinya tidak ada banyak alat yang mendukung ini tanpa X).
Temuan sejauh ini:
- Linux harus tahu keyboard mana yang saya ketikkan untuk mendukung tata letak yang berbeda untuk beberapa keyboard secara bersamaan.
xinput
→ list.c →list_xi2
→XIQueryDevice
memberikan ID perangkat yang dapat digunakan olehsetxkbmap
.showkey
danxev
jangan cetak ID keyboard.xinput list-props $ID
menunjukkan tempat acara keyboard dikirim . Namun, menggunakan kode dari jawaban lain sepertinya perangkat ini tidak mencetak apa pun untuk mengidentifikasi keyboard.Salah satu solusi yang hampir mungkin adalah berjalan
xinput --test <ID> &
untuk setiap ID keyboard dan melihat mana yang mengembalikan sesuatu terlebih dahulu. Masalah dengan itu adalah mencari tahu "keyboard" mana yang sebenarnya adalah keyboard:$ xinput | grep keyboard ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Power Button id=8 [slave keyboard (3)] ↳ Sleep Button id=9 [slave keyboard (3)] ↳ WebCam SC-13HDL10931N id=10 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)]
less -f /dev/input/eventX
dan menekan tombol pada keyboard yang sesuai, Anda akan melihat "sampah" muncul, sehingga penekanan tombol Anda memang diarahkan ke satu file dev dan bukan yang lain.Jawaban:
Nonaktifkan perangkat
Berikut ini satu ide untuk mengidentifikasi keyboard mana. Anda dapat menggunakan perintah xinput untuk mengaktifkan dan menonaktifkan perangkat.
Contoh
Output di atas menunjukkan berbagai perangkat yang saya miliki di laptop Thinkpad saya. Saya hanya memiliki 1 keyboard yang terpasang, yang ini:
Sekarang lihat properti yang tersedia melalui perangkat ini:
Dari hal di atas, Anda dapat melihat bahwa itu diaktifkan, jadi mari kita nonaktifkan:
Untuk mengaktifkannya:
Ide?
Anda dapat mengaktifkan menonaktifkan salah satu keyboard menggunakan perintah ini untuk menentukan yang sedang Anda gunakan.
Referensi
sumber
Pertanyaannya terdengar agak kontradiktif karena Anda mengutip alat X tetapi meminta solusi yang "idealnya bekerja tanpa X".
Tentang temuan keempat Anda :
xinput
akan memberi Anda korespondensisetidaknya dengan versi berikut
Langkah pertama: mendeteksi perangkat acara keyboard di C
Terima kasih banyak untuk halaman ini . Saya telah menghapus sebagian besar pemeriksaan keamanan dari kode yang saya pinjam di sana, untuk kejelasan, dalam kode nyata Anda mungkin menginginkannya.
Perhatikan bahwa penekanan tombol digema, jadi Anda mungkin ingin meminta pengguna untuk menekan tombol pengubah (Shift, Control ...) daripada tombol apa pun .
Langkah kedua: gunakan xinput untuk mendapatkan X ID dari nama perangkat
Kompilasi sumber C di atas dan gunakan cara ini:
xinput list --id-only "keyboard:$(sudo ./a.out /dev/input/event*)"
sumber
/dev/input/by-id
/dev/input/event*
- saya mencobatail
tetapi tidak berhasil.Lebih banyak penggalian mengungkapkan solusi lain menggunakan Bash biasa dan akun pengguna normal. Skrip :
sumber