Kunci pemetaan ulang yang menghasilkan banyak kode pindai

33

Saya memiliki ThinkPad W540. Di keyboard-nya ada empat tombol multimedia di atas numpad. Dua dari kunci tersebut menghasilkan kode kunci (dan, tampaknya, scancode) yang sesuai dengan kombinasi tombol, Win_L+ Ldan Win_L+ E. Dengan kata lain, untuk kunci yang menghasilkan Win_L+ L,
showkey --scancodesmengembalikan ini:

0xe0 0x5b 0x26 0xa6 0xe0 0xdb

The setkeycodesperintah membutuhkan baik tunggal byte unescaped atau melarikan diri urutan dua-byte untuk menunjukkan kode scan, dan showkeymemberi saya cara yang lebih dari itu, jadi saya tidak bisa cukup ulang peta-bahwa kunci untuk salah satu keycodes bebas dalam sistem saya dengan mudah sebuah setkeycodes <scancode> <keycode>.

Saya akan sangat menghargai petunjuk bagaimana saya dapat memetakan kembali kunci itu untuk sesuatu yang lain yang tidak hanya menduplikasi salah satu kombinasi tombol yang ada di keyboard saya.

moonwalker
sumber
1
Anda mungkin ingin melihat ini: Tombol pintas yang independen terhadap tata letak keyboard
terdon
1
Saya pikir ini mungkin rumit: setidaknya pada Thinkpads yang lebih tua, pemetaan semacam ini dilakukan oleh pengontrol on-board, bukan OS.
mirabilos
1
Saya memiliki Microsoft All-in-One Media Keyboard yang memiliki masalah yang sama, apakah Anda dapat menemukan solusinya?
osolmaz
5
Saya melakukan sesuatu yang serupa pada Thinkpad t61 beberapa waktu lalu dengan memetakan tombol /etc/acpi/events yang digunakan dalam acpidpaket dan hanya mendefinisikan tindakan ketika tombol fungsi tersebut ditekan.
cesar
2
Apakah Anda memiliki pengaturan Win_L sebagai modifier di X-windows? Ini standar untuk saya.
mcr

Jawaban:

1

Anda dapat melakukan ini dalam dua langkah:

  1. untuk menangkap kombinasi tombol
  2. untuk mensimulasikan mengetik tombol yang berbeda.

Anda dapat menggunakan xchainkeysuntuk 1. dan [xdotool][2]untuk 2 .:

Untuk membuat kunci baru yang disimulasikan dengan xdotool, pilihan --clearmodifiersdari keymungkin penting untuk menetralkan asli simulasi pers modifier:

xdotool key --clearmodifiers Shift+a

Ini harus mengetikkan modal Asebagai ujian.

Dalam konfigurasi xchainkeysin ~/.config/xchainkeys/xchainkeys.conf, kita dapat mengikat perintah ke kombinasi tombol:

W-l :exec xdotool key --clearmodifiers Shift+a

Sekarang, kombinasi tombol Windan l( Winkiri atau kanan melakukan hal yang sama), serta kunci yang menghasilkan Win_L + L, harus membuat modalA .

(Ada banyak program lain yang tersedia untuk kedua bagian. Untuk yang pertama, orang dapat menggunakan konfigurasi hotkey dari lingkungan desktop, tetapi saya lebih suka untuk tetap independen dari DE.)

Volker Siegel
sumber
2
Masalah dengan solusi ini, jika saya tidak salah, akan sama dengan hanya menggunakan kombinasi tombol tersebut untuk memicu tindakan - tindakan itu tidak akan dipicu oleh kunci itu saja, menekan kombinasi tombol yang sebenarnya yang menghasilkan yang sama kode juga akan memberikan hasil yang sama. Dengan kata lain, itu tidak memenuhi "remap kunci itu untuk sesuatu yang lain yang tidak hanya menduplikasi salah satu kombinasi kunci yang ada". Tapi saya menghargai upaya ini.
moonwalker
3
Ya, itu benar - saya tidak yakin apa yang Anda maksud dengan kalimat itu, sekarang saya mengerti. Tapi sepertinya kunci Anda menghasilkan dua kode kunci dalam perangkat keras (yaitu, dalam firmware keyboard) - jadi saya tidak melihat ada perang di sekitar, kecuali Anda mendeteksi waktu tombol artifivial menekan "modifier down", "key lainnya", "pengubah atas". Hmm ... mungkin solusi yang melibatkan penyolderan lebih sederhana;)
Volker Siegel
1
@ moonwalker Bisakah Anda mencoba untuk memetakan ulang Win_L alih-alih kunci lainnya, dan memeriksa apakah memetakan ulang pengubah yang lain juga?
Volker Siegel
1
um, tidakkah saya akan kehilangan kombinasi seperti Win_L + R, Win + Break, Win + L, Win + dll. dalam hal itu?
moonwalker
1
Tidak, kurasa tidak. Win-L is Win-Shift-lBut Anda juga bisa memetakan rantai kombinasi tombol ke sebuah perintah. Suka Win-adan setelah itu b. Tanpa itu Win-a, bberperilaku normal. Sejauh ini fitur yang paling berguna xchainkeys, dan cukup unik, saya pikir.
Volker Siegel
-2

Inilah yang saya lakukan pada Thinkpad Yoga saya untuk mengganti tombol backslash / pipe ke tombol yang benar. Karena untuk beberapa alasan di setiap Mesin Virtual Linux itu mengartikan kunci backslash \ pipe (\ |) sebagai kunci kurang dari (<).

Pertama jalankan perintah: xev

Tekan tombol yang diinginkan untuk mendapatkan kode kunci untuk kunci yang ingin Anda to rebind:

xev KeyPress keluaran acara

Dalam contoh ini Keycode adalah 94 dan aksinya "kurang" tetapi kami ingin itu memiliki aksi backslash dan bar alias "pipa"

Remap kode kunci 94 ke garis miring terbalik dan bilah alias "pipa":

xmodmap -e 'keycode 94 = backslash bar'

Sekarang mari kita buat ini terus-menerus:

xmodmap -pke | egrep "backslash|bar" | grep 94 > ~/.Xmodmap`

Mengembalikan yang berikut ke file ~/.Xmodmap:

keycode  94 = backslash bar backslash bar

Maka Anda harus membuat file berikut untuk menyelesaikan membuatnya persisten:

echo "xmodmap .Xmodmap" > ~/.xinitrc
Kentgrav
sumber
1
Tombol backslash / pipa menghasilkan kode pindai tunggal, topiknya adalah tentang memetakan ulang kunci yang menghasilkan banyak kode pindai.
moonwalker