Saya mencoba menemukan cara untuk memetakan kembali tombol keyboard secara paksa.
Saya mencoba menggunakan xmodmap dan setxkbmap, tetapi tidak berfungsi untuk satu aplikasi tertentu. Perintah seperti itu berfungsi untuk aplikasi/jendela normal lainnya di X.
Saya pikir aplikasi mungkin membaca data mentah keyboard dan mengabaikan input X?
Jadi, bagaimana cara memetakan ulang kunci tanpa menggunakan xmodmap dan setxkbmap? jika mungkin dilakukan dengan menggunakan beberapa perangkat lunak.
Saya juga mencoba xkeycaps, xkbcomp, tetapi tidak mencoba loadkeys, karena berjalan di X.
Saya menemukan di sini bahwa saya dapat mencoba setkeycodes
, "karena setelah menetapkan kode kunci kernel, tombol akan berfungsi di xorg", tetapi saya juga menemukan bahwa "Anda tidak dapat menggunakan 'setkeycodes' pada keyboard USB", itu kasus saya (saya tertarik jika seseorang membuatnya berfungsi di ps2 sebagai Saya rasa saya bisa menggunakan adaptor).
Ini tampaknya menjanjikan “Petakan kode pindaian ke kode kunci”, tetapi setelah beberapa pengujian tidak ada yang berubah, ini dia:
Saya menemukan kode kunci “36” (“j” key) di vt1 dengan showkey
Saya menemukan scancode “7e” (keypad “.”) di vt1 dengan showkey --scancodes
$cat >/etc/udev/hwdb.d/90-custom-keyboard.hwdb
keyboard:usb:v*p*
keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
KEYBOARD_KEY_7e=36
$udevadm hwdb --update #updates file: /lib/udev/hwdb.bin
$udevadm trigger #should apply the changes but nothing happened
$cat /lib/udev/hwdb.bin |egrep "KEYBOARD_KEY_7e.{10}" -ao
KEYBOARD_KEY_7eleftmeta
$#that cat on hwdb.bin did not change after the commands..
Obs.:juga tidak berfungsi dengan:KEYBOARD_KEY_7e=j
Beberapa cara alternatif lainnya (oleh @vinc17) untuk menemukan kunci:evtest /dev/input/by-id/...
atauinput-kbd 3
(letakkan indeks id yang ditemukan di ls -l /dev/input/by-id/*
dari mantan acara3)
PS.:*Jika Anda tertarik untuk menguji diri sendiri, utas terkait untuk aplikasi ini adalah ini:http://forums.thedarkmod.com/topic/14266-keyboard-issue-in-new-version-108/ Masalah yang saya memiliki yang sama:beberapa kunci (KP_Decimal, DownArrow, UpArrow, RightArrow) diabaikan dan dianggap semua dengan nilai yang sama di sana “0x00”
Jawaban yang Diterima:
Pertama, temukan kode pindaian kunci yang perlu dipetakan ulang, mis. dengan evtest
kegunaan. Baris seperti berikut (dengan MSC_SCAN
di dalamnya) harus menjadi output:
Event: time 1417131619.686259, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70068
diikuti oleh yang kedua memberikan kode kunci saat ini. Jika tidak ada MSC_SCAN
baris adalah output, ini karena bug driver kernel, tetapi scancode masih dapat ditemukan dengan input-kbd
kegunaan; evtest
seharusnya memberikan kode kunci, sehingga mudah untuk menemukan baris yang sesuai di input-kbd
output (misalnya dengan menggunakan grep
).
Setelah kode pindaian kunci yang akan dipetakan ulang ditentukan, buat file seperti /etc/udev/hwdb.d/98-custom-keyboard.hwdb
berisi pemetaan ulang. Awal file /lib/udev/hwdb.d/60-keyboard.hwdb
memberikan beberapa informasi. Dalam kasus saya (yang berfungsi), saya memiliki:
evdev:input:b0003v05ACp0221*
KEYBOARD_KEY_70035=102nd # Left to z: backslash bar
KEYBOARD_KEY_70064=grave # Left to 1: grave notsign
KEYBOARD_KEY_70068=insert # F13: Insert
(Sebelum udev 220, saya harus menggunakan keyboard:usb:v05ACp0221*
untuk baris pertama.)
evdev:
string harus di awal baris.
Perhatikan bahwa huruf di vendor dan id produk harus huruf kapital.
Setiap KEYBOARD_KEY_
pengaturan harus memiliki tepat satu spasi sebelumnya (catatan:baris tanpa spasi akan memberikan pesan kesalahan, dan baris dengan dua spasi diam-diam diabaikan dengan versi udev lama). KEYBOARD_KEY_
diikuti oleh scancode dalam heksadesimal (seperti apa yang keduanya evtest
dan input-kbd
memberi). Nilai yang valid dapat diperoleh dari evtest
output atau input-kbd
keluaran, atau bahkan dari /usr/include/linux/input.h
file:misalnya, KEY_102ND
akan memberikan 102nd
(dengan menghapus KEY_
dan mengonversi ke huruf kecil), yang saya gunakan di atas.
Setelah file disimpan, ketik:
udevadm hwdb --update
untuk (kembali) membangun basis data /etc/udev/hwdb.bin
(Anda dapat memeriksa stempel waktunya). Kemudian,
udevadm trigger --sysname-match="event*"
akan mempertimbangkan pengaturan baru. Anda dapat memeriksa dengan evtest
.
Pada tahun 2014, udev yang dirilis memiliki informasi yang tidak lengkap/bug di /lib/udev/hwdb.d/60-keyboard.hwdb
, tetapi Anda dapat melihat versi pengembangan terbaru dari file dan/atau laporan bug saya dan diskusi tentang masalah dokumentasi dan spasi.
Jika ini tidak berhasil, masalahnya mungkin ditemukan setelah sementara meningkatkan level log udevd
dengan udevadm control
(lihat halaman manual udevadm(8) untuk detailnya).
Untuk udev
lama versi seperti 204, metode ini akan tetap berfungsi.