GNU/Linux >> Belajar Linux >  >> Linux

Linux – Tombol Remap Keras Keyboard?

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/... atau
input-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.)

Terkait:Linux – nomor utama TTY dari Unix Anda?

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.


Linux
  1. Miliki sapi di baris perintah Linux

  2. Masukkan diri Anda ke dalam baris perintah Linux

  3. Cadangkan Seluruh Hard Disk Linux?

  1. 8 tips untuk baris perintah Linux

  2. Remap tombol Win, Ctrl dan Alt di Linux

  3. Cara memetakan ulang kunci di Linux hanya untuk keyboard tertentu

  1. Bagaimana cara mengganti hard drive di Linux

  2. Cara Menghapus Baris di Vim di Linux

  3. Linux – Mode Keyboard Mentah?