Saya baru-baru ini membeli keyboard Unicomp yang datang dengan alt kanan dan tombol Windows yang ditukar. Keyboard mengidentifikasi seperti ini di lsusb:
Bus 003 Device 002: ID 17f6:0822 Unicomp, Inc
Apakah ada cara untuk membuat kernel (yaitu bukan berbasis xmodmap) menukar tombol alt kanan dan windows sehingga setiap aplikasi melihatnya di tempat yang ditukar bahkan jika mereka mendapatkan input keyboard mentah (menukar barang dengan xmodmap tidak akan melakukan itu) ? Apakah ada cara untuk memilikinya hanya untuk keyboard yang satu ini?
linux
keyboard-layout
FUZxxl
sumber
sumber
Jawaban:
Ya, dimungkinkan menggunakan XKB. Tidak seperti xmodmap, XKB dapat memetakan ulang kunci Anda untuk masing-masing perangkat.
Catatan: Pastikan Anda memiliki xkbcomp> 1.2.0
Pertama-tama daftarkan perangkat Anda dengan:
xinput list
Anda akan mendapatkan sesuatu seperti ini:
Identifikasi string perangkat Anda dan edit skrip shell berikut, ubah baris sed dengan yang sesuai dengan nama perangkat Anda. Kemudian ganti kunci yang perlu Anda buat ulang.
Contoh: Muat
xev
dan tekan tombol yang ingin Anda remap. Misalkan Anda mengetahui kode kunci 84. Cari 84 di https://gist.github.com/zoqaeski/3880640 . Nama kuncinya ada<KP5>
. Kemudian cari kunci yang Anda inginkan digantikan oleh (dalam tautan yang sama, lebih jauh di bawah ) dan salin apa yang ada di dalam tanda kurung. Ulangi proses ini untuk semua tombol yang Anda inginkan.Kemudian sumber itu (Anda dapat menambahkannya ke .xinitrc Anda). Semua selesai! Sekarang, menekan tombol akan menghasilkan output yang diinginkan, hanya untuk perangkat yang Anda tentukan.
Sunting : Baru-baru ini, saya perhatikan bahwa, karena suatu alasan, konfigurasi baru tidak segera diterapkan. Pertama-tama Anda harus menekan tombol pada keyboard Anda yang lain , kemudian menguji kunci yang dikonfigurasi pada keyboard Anda yang dimodifikasi. Saya tidak tahu mengapa ini terjadi, mungkin semacam cache.
sumber
sed -n 's/.*G19 Gaming Keyboard.*id=\([0-9]*\).*keyboard.*/\1/p'
c) Ya, Anda harus mengujinya terlebih dahulu untuk mengganti$remote_id
dengan nomor id. Perhatikan ada dua referensi ke$remote_id
sana, apakah Anda mengubah keduanya?$remote_id
, pastikan Anda mengomentari baris[ "$remote_id" ] || exit
jika Anda belum melakukannya, maka itu hanya akan menyelamatkan.$9
tidak akan berfungsi, maksudmu9
?Untuk siapa pun yang datang ke sini dari Google dan menginginkan jawaban yang lebih sesuai dengan apa yang awalnya ditanyakan oleh si penanya, saya mengetahui dua cara untuk memetakan ulang peristiwa di
evdev
tingkat sehingga perubahan tersebut berlaku untuk semua aplikasi:udev menyediakan API untuk memodifikasi entri basis data perangkat keras yang mengontrol pemetaan antara kode dan kode kunci. Halaman ArchiWiki ini , yang berisi instruksi, secara eksplisit mengatakan bahwa itu akan berfungsi untuk input X11 dan konsol.
Intinya adalah Anda membuat entri khusus
/etc/udev/hwdb.d/
yang terdiri dari pola kecocokan perangkat dan beberapa definisi remapping scancode-to-keycode, kemudian jalankansystemd-hwdb update
untuk membangun kembali database danudevadm trigger
menerapkannya tanpa reboot.Mengingat bahwa Wayland tidak menggunakan subsistem keyboard X11 dan kompositor Wayland utama seperti GNOME Shell dan Weston tidak menerapkan UI untuk mengonfigurasi aspek-aspek yang relevan dari libinput, seseorang menulis daemon bernama evdevremapkeys yang menyelesaikan masalah dengan cara yang sama dengan driver ruang pengguna G15Daemon untuk Logitech G15 keyboard gaming.
(Ini menelan peristiwa yang ingin dipetakan kembali, jadi tidak ada yang mendengarkannya di perangkat yang dapat melihatnya, lalu memancarkan peristiwa yang diperbaiki melalui
uinput
API untuk membuat perangkat input tingkat kernel dari userspace.)sumber
Bagi mereka yang tidak berhasil dengan opsi @Watcom, cukup masukkan file pemetaan baru Anda, seperti:
ke / usr / share / X11 / xkb / simbol / karena mungkin root (ubuntu, mungkin berbeda untuk distrib Anda), panggil file 'custom'. Minta string tata letak Anda saat ini dengan
setxkbmap -device <device id> -print | grep xkb_symbols
dan tambahkan+custom
padanya. Atur tata letak baru dengan kunci yang dipetakan dengan dan string tata letak yang dimodifikasi:Efek tidak permanen dan sayangnya me-reset ketika keyboard lain terhubung, belum memikirkan cara memperbaikinya. Anda dapat menambahkan perintah di atas untuk Anda
.bashrc
, jadi kunci ditukar saat restart jika perlu.sumber