Mengapa xmodmap saya mengikat yang melibatkan AltGr hanya berfungsi pada beberapa kunci?

12

Saya ingin memetakan ulang AltGR + Right_Windows saya, tetapi saya tidak tahu caranya. Tidak peduli apa yang saya coba, menekan tombol windows kanan memancarkan nama keysym ketika alt kanan ditekan atau tidak.

Ini adalah isi dari file xmodmap yang saya uji sekarang. Di keyboard saya, 38 adalah kode kunci untuk "a", 48 adalah kode kunci untuk aportrophe / doublequote dan 134 adalah kode kunci untuk tombol windows kanan.

keycode  38 = 1 2 3 4 5 6 7 8
keycode  48 = 1 2 3 4 5 6 7 8
keycode 134 = 1 2 3 4 5 6 7 8

Ketika saya menekan tanda Right_Alt +, output 5 tetapi Right_Alt + a dan Right_Alt + Right_Windows memberikan 1 (baik ketika alt kanan ditekan dan ketika tidak) yang bukan yang saya inginkan.

Layout keyboard saya saat ini adalah us(alt-intl)dan alt yang tepat tampaknya diatur untuk bertindak sebagai AltGr / Iso_Level3_Shift. Output dari xmodmap -pmadalah sebagai berikut:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
hugomg
sumber
Tidak tahu persis apa yang terjadi, tetapi jika Anda belum melakukannya, Anda mungkin ingin menjalankan xevdan menekan berbagai kombinasi tombol untuk melihat apakah perangkat keras dan hingga tingkat Xwindows mendapatkan penekanan tombol yang dapat dibedakan untuk memulai.
Joe
Saya mengalami masalah yang sama. Saya ingin memodifikasi koma dan titik untuk juga mendukung pencetakan tanda kutip ganda bahasa Inggris dan ceko („/“ / ”) yang harus saya tulis menggunakan kunci penulisan sebaliknya. Saya menggunakan us(cz_sk_de)tata letak keyboard dan xmodmap.
Pavel Šimerda
Jadi bagaimana sekarang? Tidak praktis untuk menyia-nyiakan karunia lain atau memulai pertanyaan baru ketika yang satu ini cukup menggambarkan masalahnya. Sepertinya bug di xorg tapi saya belum menemukan referensi. Jawaban yang ada jelas salah meskipun secara otomatis diberikan.
Pavel Šimerda
Saya akhirnya menyerah dan menggunakan keybinds berbeda yang saya tahu berfungsi: / Saya setuju bahwa ini memang terlihat seperti bug tapi saya tidak tahu sistem apa yang terkait dengan dan di mana melaporkannya ...
hugomg
Saya menemukan beberapa informasi di sini ... blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html
Pavel Šimerda

Jawaban:

7

Menggunakan xmodmap untuk mengonfigurasi pemetaan kunci individual

Inilah saatnya untuk menuliskan hasil penelitian saya sendiri.

Saya pikir saya pasti telah melewatkan sesuatu di xmodmap dan itu tidak terdokumentasi dengan baik dan orang-orang bingung. Tapi ternyata desain X.Org tentang XKB dan xmodmap hanya bodoh.

Gagal epik: xmodmap

Anda dapat menggunakan xmodmap untuk mendefinisikan ulang pemetaan yang ada selama pemetaan itu benar-benar ada di tata letak keyboard asli Anda. Dalam kasus yang dijelaskan dalam pertanyaan, Anda tidak dapat memperluas perilaku kunci apa pun untuk menggunakan AltGr. Anda hanya dapat mengubah kunci tombol AltGr untuk kode kunci yang sudah menggunakan AltGr.

Lihat juga: http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

Penanganan masalah: Mode_switch

Solusi ini dijelaskan dalam jawaban oleh @ Ned64. Anda dapat memetakan kembali AltGrdari ISO_Level3_Shiftke Mode_switch.

Saya berhasil menggunakan baris perintah berikut untuk memetakan kembali AltGr.

xmodmap -e 'keycode 108 = Mode_switch'

Kerugiannya adalah itu akan merusak tata letak keyboard Anda saat ini tetapi Anda dapat membuat kembali semua pemetaan satu per satu menggunakan xmodmapseperti yang telah disebutkan @ Ned64.

Penanganan masalah: Tata letak keyboard yang dimodifikasi

Saya menggunakan us(cz_sk_de)tata letak keyboard saya dan saya mencoba memodifikasinya dengan menambahkan konfigurasi untuk tombol yang ingin saya perpanjang.

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };

(Pada bagian xkb_symbols "cz_sk_de"dari /usr/share/X11/xkb/symbols/us)

Setel ulang tata letak keyboard untuk menggunakan versi yang dimodifikasi.

setxkbmap 'us(cz_sk_de)'

Sekarang Anda dapat (1) jenis Ceko dan Inggris tanda kutip dan elips menggunakan kombinasi ,, ., Shiftdan AltGrkunci dan / atau (2) remap tombol tersebut menggunakan xmodmapsekarang bahwa mereka didefinisikan.

Kerugian utama adalah bahwa setxkbmaptampaknya tidak mendukung lokasi sembarang untuk tata letak papan ketik dan oleh karena itu Anda perlu menulis ke konfigurasi sistem alih-alih direktori home Anda.

Kesimpulan

Ini tampaknya menjadi contoh desain X.Org yang direkayasa ulang dan buruk di mana bahkan hal sepele seperti memetakan kode kunci dan kombinasi pengubah menjadi simbol ternyata menjadi masalah. Alat tampaknya tidak memberikan cara yang masuk akal untuk hanya mengubah pemetaan kunci individu dalam konfigurasi pengguna tanpa efek samping.

Pavel Šimerda
sumber
"Anda tidak dapat memperpanjang perilaku kunci apa pun untuk menggunakan AltGr" - sepertinya ini adalah masalah selama ini! Terima kasih.
hugomg
5

Langkah satu: Jadikan AltGr dapat digunakan

Saya menemukan bahwa AltGr-modifikasi Keys hanya berfungsi pada sistem saya jika saya juga memetakan ulang AltGr-Key untuk Mode_switch, seperti ini:

xmodmap -e "keycode 108 = Mode_switch Mode_switch Mode_switch Mode_switch"

Jika Anda memiliki keyboard yang berbeda, Anda mungkin perlu mengganti 108dengan kode Anda, periksa dengan mengetik

xmodmap -pke | grep Alt_R

lalu gunakan nomor itu. (Kuncinya biasanya disebut Alt_Rpada sistem yang saya tahu.)

Atau, ini juga bisa berfungsi jika Alt_R belum ditugaskan untuk sesuatu yang lain:

xmodmap -e "keysym Alt_R = Mode_switch Mode_switch Mode_switch Mode_switch"

Pengubah AltGr Anda sekarang akan melayani posisi 3 (dengan Shift: 4) dalam daftar pengubah Anda.

Langkah dua: Tetapkan kunci sesuai kebutuhan

Anda dapat menetapkan varian AltGr untuk tombol apa pun dari keyboard yang Anda inginkan. Jika Anda memiliki kunci lain yang tidak sesuai dengan kode yang diinginkan sekarang, Anda perlu menetapkan ulang ini seperti kunci Anda yang lain (yang Anda uji).

Langkah tiga: Konversikan ini menjadi skrip

Sekarang ambil saja xmodmapperintah Anda dan tuliskan semua (tetapi hanya) modifikasi pada keyboard default Anda menjadi file - yang lebih cepat daripada memuat keymap lengkap. Mulai skrip ini satu kali setelah setiap login dan kapan saja keymap akan direset oleh beberapa proses.

Saya telah bereksperimen dengan ini banyak selama bertahun-tahun, di bawah Solaris, IRIX dan Linux, dan setahu saya ini adalah satu-satunya solusi untuk membuat AltGr bekerja - dan itu telah bekerja dengan baik untuk saya selama lebih dari 20 tahun.

Ned64
sumber
1
Dengan ini, tombol jendela kanan mulai bertindak sebagai "3" bukannya "1". Namun, sekarang semua pengubah altgr yang ada berhenti bekerja (saya kira itu harus menjadi "5" alih-alih "3" bagi mereka untuk bekerja?)
hugomg
Terima kasih telah mencoba ini. Silakan kirim xmodmap -pmdan xmodmap -pke | grep -w SOMECHANGEDKEYdalam situasi ini, untuk kunci yang tidak berfungsi lagi.
Ned64
(maka kita perlu menambahkan pengubah baru menggunakan xmodmapsesuai dengan output Anda)
Ned64
xmodmap -pke | grep Alt_Rtidak mengembalikan hasil apa pun di sistem saya. Sistem saya adalah Lenovo ThinkPad X230 dengan Gentoo stable. Saya juga mencoba dengan grep -itidak berhasil.
Pavel Šimerda
Saya mencobanya dan masalahnya adalah aksen surat us(cz_sk_de)berhenti bekerja untuk saya. Karenanya jawaban ini tidak bekerja untuk saya dan tidak akan bekerja untuk banyak orang lain.
Pavel Šimerda
1

Rupanya, xmodmap tidak membaca AltGR default sebagaimana mestinya, mungkin terbatas pada tata letak keyboard tertentu, mungkin itu semua tata letak non-AS, bagaimanapun, masalah sebenarnya adalah ketika Anda dapat mengganti tata letak keyboard Anda, beberapa orang mungkin tidak benar-benar ingin melakukan itu karena mereka perlu menggunakan karakter khusus pada tata letak yang biasa mereka gunakan (seperti tata letak keyboard skandinavia yang memiliki karakter seperti ðþæöáúíóåů dan sebagainya) yang akan merepotkan untuk dikonfigurasikan untuk tata letak keyboard lainnya.

Anda bisa lari

xmodmap -e "keycode 108 = Mode_switch"

Untuk mengubah AltGR ke sesuatu yang dapat digunakan xmodmap, dan memang, penugasan keycoad ke-3 akan menjadi output ketika Anda menekan AltGR sekarang, namun itu akan sepenuhnya memecah tata letak keyboard asli karena tidak ada ikatan kunci AltGR yang akan berfungsi lagi dengan tombol AltGR.

Saya telah menemukan dua solusi yang tidak merusak tata letak keyboard saya yang ada dan tidak melibatkan pergantian tata letak , satu adalah untuk mengikat Mode_switch ke tombol lain.

Kunci ideal untuk ini adalah Super_R yang tepat di sebelah AltGR, kode kunci untuk itu adalah 134. Namun tidak semua keyboard memilikinya dan dalam kasus saya di laptop saya tidak memilikinya juga, jadi saya memutuskan untuk mengikatnya ke yang terakhir. sisa kunci yang praktis tidak pernah saya gunakan, Kontrol Benar.

xmodmap -e "keycode 105 = Mode_switch"

Saya memiliki tata letak keyboard fisik Amerika, tetapi konfigurasi tata letak eropa, dan tombol kurang / lebih besar / bilah (juga dikenal sebagai ISO_Backslash, meskipun itu tidak dikenali oleh xmodmap itu sendiri) biasanya di sebelah Z pada keyboard seperti itu tidak ada. Saya terikat itu ke Menu (135) tetapi bisa berfungsi sebagai alternatif untuk R_Ctrl dan Super_R

Kurasa ini perbaikan kotor.

Solusi kedua butuh sedikit lebih lama untuk mencari tahu. Menggunakan sxhkd (alternatif xbindkeys)

Jika Anda menambahkan ini ke ~ / .config / sxhkd / sxhkdrc :

~ISO_Level3_Shift
    xdotool key Mode_switch

AltGR Anda akan berfungsi seperti biasa, tetapi ketika ditekan, Mode_switch akan beralih (agak seperti caps lock, tetapi untuk Mode_switch) dan tombol xmodmap apa pun yang menggunakannya akan dikunci ke dalam mode AltGR sampai Anda menekan AltGR lagi untuk melepasnya. Seharusnya masalah sederhana untuk membuat skrip untuk membuka kunci secara otomatis ketika kunci dilepaskan tetapi upaya saya untuk melakukannya cukup buggy, untuk sedikitnya.

Pemeliharaan
sumber