Tetapkan ulang tombol Ctrl dan Alt - kesalahan xmodmap 'BadValue'

13

Saya mencoba untuk memetakan kembali keyboard saya agar emacs dapat digunakan. Keyboard ergonomis saya menempatkan satu tombol Kontrol di pulau terpencil dengan 4 tombol di sebelah kiri.

OS adalah pemerasan Debian.

Berikut adalah baris-baris yang saya coba beri makan xmodmap, saya menempatkannya ke dalam file ~ / .Xmodmap:

Kontrol yang jelas
hapus Mod1
! Tombol Alt diaktifkan 'Opsi' di keyboard saya,
! menggunakan xev menunjukkan mereka untuk mengirim Alt_L dan Alt_R keysym masing-masing
keysym Alt_L = Control_L
keysym Alt_R = Control_R
! Kunci Super_L dan Super_R adalah kunci Windows
keysym Super_L = Alt_L
keysym Super_R = Alt_R
tambahkan Control = Control_L Control_R
tambahkan Mod1 = Alt_L Alt_R

Tujuan saya adalah membuat kunci Option (alias Alt) saya berperilaku seperti kunci Kontrol, dan untuk mendapatkan kunci Windows saya (alias Super) untuk berperilaku seperti Alt.

Berikut adalah kode kunci dan keluaran keyms oleh xev untuk kunci yang dimaksud. Catatan, keyboard saya (keyboard ergonomis Goldtouch) hanya memiliki satu tombol kontrol.

kode kunci 37 (keysym 0xffe3, Control_L)
keycode 64 (keysym 0xffe9, Alt_L)
keycode 133 (keysym 0xffeb, Super_L)
kode kunci 134 (keysym 0xffec, Super_R)
keycode 108 (keysym 0xffea, Alt_R)

Inilah yang ditampilkan xev saat berjalan xmodmap .Xmodmap

Acara MappingNotify, serial 34, NO sintetis, jendela 0x0,
    minta MappingKeyboard, first_keycode 204, hitungan 1

Acara MappingNotify, serial 34, NO sintetis, jendela 0x0,
    meminta MappingKeyboard, first_keycode 64, hitungan 1

Acara MappingNotify, serial 34, NO sintetis, jendela 0x0,
    request MappingKeyboard, first_keycode 108, hitungan 1

Acara MappingNotify, serial 34, NO sintetis, jendela 0x0,
    minta MappingKeyboard, first_keycode 206, hitungan 1

Acara MappingNotify, serial 34, NO sintetis, jendela 0x0,
    meminta MappingKeyboard, first_keycode 133, hitungan 1

Acara MappingNotify, serial 34, NO sintetis, jendela 0x0,
    minta MappingKeyboard, first_keycode 134, hitungan 1

Dan ini kesalahan yang dikembalikan oleh xmodmap:

X Kesalahan permintaan gagal: BadValue (parameter integer di luar kisaran untuk operasi)
Opcode utama permintaan gagal: 118 (X_SetModifierMapping)
Nilai dalam permintaan gagal: 0x17
Nomor seri permintaan gagal: 17
Nomor seri saat ini dalam aliran output: 17

ada saran tentang bagaimana saya bisa menyelesaikan ini?

Aliud Alius
sumber
Pada sistem dan versi operasi apa? Jenis keyboard seperti apa (PC / Mac / Sun / ...)? Coba jalankan xevdi terminal, lalu xmodmapdi terminal lain. Anda harus melihat beberapa MappingNotifybait dari xev, menambahkannya ke pertanyaan Anda. Juga, di xevjendela, tekan berbagai tombol yang terlibat dan beri tahu kami kode kunci dan kunci apa yang terkait dengan (bagian “kode kunci 37 (keysym 0xffe3, Control_L)” dari output xev).
Gilles 'SO- berhenti menjadi jahat'

Jawaban:

7

Melihat solusi yang dikaitkan oleh Giles, inilah yang berhasil bagi saya:

clear Mod1
clear Mod4

keycode 204 = NoSymbol NoSymbol NoSymbol NoSymbol
keycode 206 = NoSymbol NoSymbol NoSymbol NoSymbol

keycode 64 = Control_L Control_L Control_L Control_L
keycode 133 = Alt_L Alt_L Alt_L Alt_L
keycode 134 = Alt_R Alt_R Alt_R Alt_R
keycode 108 = Control_R Control_R Control_R Control_R

add Control = Control_L Control_R
add Mod1 = Alt_L Alt_R

Tombol Pilihan Saya sekarang berfungsi seperti tombol Kontrol dan Tombol Windows saya seperti tombol Alt.

Aliud Alius
sumber
3

Masalah muncul ketika Anda mencoba menambahkan kunci ke pengubah yang sudah ditambahkan ke kunci pengubah lain. Penting untuk diketahui, bahwa jika Anda menambahkan keysym ke modifier, semua keyyms lain yang menyertai keysym jika ditambahkan juga sebagai modifier itu.

Sebagai contoh:

clear mod5
add mod5    = ISO_Level3_Shift Mode_switch

dapat menghasilkan

mod5        backslash (0x33),  Caps_Lock (0x42),  ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

karena Anda punya sesuatu seperti

keycode  66 = Caps_Lock NoSymbol ISO_Level3_Shift

di ~ / .Xmodmap Anda (Lihat pemetaan kode kunci saat ini ke keysym via xmodmap -pke)

yang akan menghasilkan kesalahan BadValue yang dipermasalahkan ketika Anda juga mencoba melakukan sesuatu seperti

add lock    = Caps_Lock

karena Caps_Lock sudah ditambahkan ke mod5 modifier.

Mengalir
sumber
2

Ini adalah solusi lain untuk masalah Anda meskipun tidak benar-benar menjawab pertanyaan Anda. Edit xorg.conf, masukkan berikut ini ke Bagian "InputDevice":

 Option "XkbOptions" "ctrl:swapcaps"
dotplus
sumber