Saya mencoba menggunakan xmodmap
untuk memetakan kembali Alt/ Superpada keyboard Dell L100, dan kesulitan mendapatkan kode kunci.
Misalnya, menggunakan xev
tidak memberi saya kode kunci untukAlt
FocusOut event, serial 36, synthetic NO, window 0x4a00001,
mode NotifyGrab, detail NotifyAncestor
FocusIn event, serial 36, synthetic NO, window 0x4a00001,
mode NotifyUngrab, detail NotifyAncestor
KeymapNotify event, serial 36, synthetic NO, window 0x0,
keys: 122 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Untuk Right Superkunci, xev
dan showkey
berikan kode kunci yang berbeda - 134
dan 126
masing - masing.
Apa yang terjadi dengan kode kunci ini?
Saya mencoba mendapatkan kode kunci dari showkey -k
, dan menggunakan xmodmap
file di bawah ini, tetapi itu memberikan peta aneh yang memetakan kembali bkunci:
clear Mod1
clear Control
keycode 125 = Meta_L
keycode 126 = Meta_R
keycode 58 = Control_L
keycode 56 = Control_L
keycode 100 = Control_R
add Control = Control_L Control_R
add Mod1 = Meta_L Meta_R
Jawaban:
Ada banyak pemain di antara keyboard Anda dan proses yang akhirnya menangani acara keyboard. Di antara bagian-bagian utama lansekap adalah kenyataan bahwa sistem X memiliki lapisan penanganan keyboard sendiri, dan X mengaitkan "kode kode" yang berbeda dengan kunci dibandingkan dengan sistem basis Linux Anda. The
showkey
perintah menunjukkan Anda keycodes di Linux-base-sistem lingo. Untukxmodmap
Anda memerlukan kode kunci X, yang merupakan apaxev
yang ditampilkan. Selama Anda berencana untuk bekerja di X dan melakukan rebinding dengan kunci Andaxmodmap
, maka, abaikanshowkeys
dan dengarkan saja apa yangxev
dikatakan.Apa yang ingin Anda cari dalam
xev
output Anda adalah blok-blok seperti ini:xev
cenderung menghasilkan banyak output, terutama ketika Anda menggerakkan mouse Anda. Anda mungkin harus menggulir ke belakang sebentar untuk menemukan output yang Anda cari. Pada keluaran sebelumnya, kita melihat bahwakeysym Alt_L
berhubungan dengan keycode X64
.sumber
xev -event keyboard
akan cukup untuk menghilangkan sebagian besar kebisingan.xev harus bekerja
Aneh, xev saya memberikan acara KeyPress dan KeyRelease untuk alt (dan untuk kunci Windows, di sini disebut "super"):
Dan tangan kanan:
Saya dapat melihat dua kemungkinan:
xinit -- :1
, yang seharusnya memberi Anda server X hanya dengan xterm — bahkan tidak akan ada window manager yang berjalan. Keluar dari xterm akan menutup sesi).Cara mudah, jika Anda tahu nama kuncinya
Kemungkinan lain: dapatkan kode kunci dari xmodmap:
Ada 64 dan 108 lagi.
xmodmap -pm
akan menunjukkan kepada Anda hanya peta pengubah, yang juga memberi Anda angka (meskipun, kali ini, dalam hex).sumber
Saya "mendeteksi" tiga masalah dalam pertanyaan Anda:
xev
danshowkey
melaporkan kode kunci yang berbeda untuk suatu kunci?xev
tidak terlihat Altditekan dengan benar?Mengenai pertanyaan pertama: hari-hari ini, di mana "driver" keyboard di X tidak benar-benar menggerakkan perangkat keras, ia hanya bisa melewatkan kode kunci dari kernel ke inti X, tetapi ternyata tidak. Ia menambahkan 8 ke kode kunci sebelum meneruskannya.
Kedua: Sesuatu di sesi X Anda adalah meraih Altacara. Jawaban lain sudah mencakup ini. (Yaitu
xev
tidak mendapatkan acara yang ingin Anda lihat). Pelakunya mungkin terkait dengan manajer jendela Anda. Coba sesi X yang lebih telanjang.Ketiga: Jangan gunakan
xmodmap
. Itu sudah usang selama satu dekade. Orang-orang baru adalah XKB dan alatnyasetxkbmap
.Untuk bertukar Altdan Winsudah ada opsi yang disiapkan di XKB. Tambahkan saja:
sumber
setxkbmap
perubahan itu permanen?~/.xinitrc
.Sebagai root, jalankan:
... untuk melihat apa kode sandi untuk kunci misteri Anda. Saya mendapat sesuatu seperti ini:
Tidak yakin mengapa tampaknya satu kunci menghasilkan dua scancode. Itu bukan hal keydown / keyup, sejauh yang saya tahu dari pola. Perhatikan peringatannya, jadi Anda mungkin ingin menjalankan ini dalam mode satu pengguna.
Saya menduga 0x46 adalah kode kunci saya.
Selanjutnya, cari kode kunci yang tidak digunakan dengan:
Di sini Anda dapat melihat kode kunci 97 tidak digunakan di sistem saya:
Keycode X menggunakan dan keycode yang digunakan kernel OFF OLEH 8 karena "alasan historis". Jadi ambil 97 - 8 = 89 dan gunakan 89 dengan perintah setkeycodes (sekali lagi sebagai root):
Dan Anda harus siap. Konfirmasikan dengan xev bahwa Anda mendapatkan Keypress Event dengan kode kunci 97. (meskipun begitu saya memberi tahu file kunci Fluxbox untuk menggunakan kode kunci itu, saya tidak mendapatkan acara KeyPress lagi - mungkin karena Fluxbox menelannya saat menggunakannya?)
Perhatikan bahwa 'setkeycodes' tidak akan selamat dari reboot, jadi Anda harus menambahkannya ke skrip init Anda (mis. Di /etc/rc.local)
sumber
Saya mencoba menyelesaikan ini untuk diri saya sendiri dan saya baru saja menemukan jawabannya.
Masalah utama adalah bahwa Anda tidak mendapatkan acara untuk penekanan tombol. Melihat log yang Anda kirim alasannya jelas.
Anda dapat melihat para
Focus{In,Out}
peristiwa memilikimode
dariNotify{Grab,Ungrab}
. Ini menunjukkan bahwa kunci ditangani oleh proses lain (mungkin aplikasi pintas / pengikat tombol).Dalam kasus saya itu adalah xbindkeys, tetapi jika Anda menggunakan lingkungan desktop mereka mungkin memiliki sistem keybinding. Untuk melihat acara ini adalah xev, Anda harus menghentikan / menonaktifkan program lain.
Jika Anda tidak dapat menentukan program apa yang mencuri peristiwa penting, solusi terbaik adalah memulai sesi X lainnya tanpa menjalankannya. Jalankan perintah berikut untuk memulai sesi X lain pada layar
:1
, jika itu sudah diambil, tambah saja jumlahnya di akhir. Anda tentu saja dapat mengubah terminal ke apa pun yang Anda inginkan atau telah diinstal pada sistem Anda.Kemudian jalankan
xev
lagi. Itu akan memberi Anda hasilnya tanpa tertangkap oleh program lain. Perhatikan bahwa window manager yang memulai adalah hover-focus, jadi Anda harus meletakkan kursor Anda di atas jendela xev agar kunci dapat diambil.Seperti yang dikatakan dalam jawaban yang bagus oleh dubiousjim , kode kunci itu berbeda karena ada banyak lapisan antara xev dan kernel.
sumber
Saya memiliki masalah yang sama dengan
Alt_L
menghilang di XUbuntu 14.04 (Alt_R
baik-baik saja). Setelah banyak bermain, saya mengamati bahwashowkey
merekam keystroke, tetapixev
tidak --- itu pasti sesuatu di sistem jendela. Saya menjelajahi semua pengaturan "Window Manager" dan "Window Manager Tweaks", dan tidak menemukan apa pun. Akhirnya, saya menemukan nyasarAlt_L
di daftar pintasan keyboard (xfce4-keyboard-shortcuts
) di "Pengaturan Editor". Saya "mengatur ulang" itu, dan sayaAlt_L
mendukung saya !Alt_L
Pintasan tersesat tidak muncul di tempat lain kecuali di "Editor Pengaturan".sumber