CapsLock sebagai kunci pengubah untuk tombol aplikasi

11

Saya pengembang dan saat ini saya menggunakan Ubuntu Linux dengan PyCharm IDE untuk pengembangan situs web. Untuk meningkatkan kinerja pengetikan, saya mempertimbangkan untuk mengubah CapsLock ke Hyper_L dan menetapkannya ke mod3 menggunakan xmodmap. Setelah ini saya ingin memetakan mod3 untuk 'i' kunci untuk 'Atas'. Sejauh ini yang saya lakukan adalah:

xmodmap -e "keysym Caps_Lock = Hyper_L"

output seperti ini:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Hyper_L (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  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)

maka saya menghapus Hyper_L dari mod4

xmodmap -e "remove Mod4 = Hyper_L"

Setelah itu saya mencoba menetapkan Hyper_L ke mod3

xmodmap -e "add Mod3 = Hyper_L"

Namun saya mendapat kesalahan sebagai berikut:

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

Jadi, apa masalahnya di sini? Bagaimana saya bisa membuatnya bekerja? Apakah pendekatan saya benar? Atau saya harus menggunakan pendekatan yang berbeda untuk menggunakan mod3 untuk kunci kustom?

PS Saya menggunakan keyboard Microsoft Natural Ergonomic 7000

Khamidulla
sumber

Jawaban:

20

Ada bajillion jawaban di internet, kebanyakan dari mereka membingungkan.

Kuncinya adalah Anda perlu memetakan 'kode kunci 66' ke kunci hiper Anda, menghapus pemetaan kunci itu dari mod {1,2,4,5} lainnya (hanya jika ada), dan kemudian mengatur mod3.

Buka ~ / .Xmodmap dan tuliskan yang berikut ini:

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

Jalankan ini

xmodmap ~/.Xmodmap

Jika terjadi kesalahan, Anda dapat mengatur ulang keyboard Anda dengan:

setxkbmap -layout us

Kemungkinan penyebab sesuatu meledak adalah bahwa Hyper_L dipetakan di tempat lain. Perbaiki ini dengan menjalankan xmodmap tanpa args untuk mencari tahu apa lagi yang terikat pada Hyper_L. Ketika Anda tahu apa yang perlu Anda hapus, buang 'hapus BINDING = Hyper_L' di file .Xmodmap Anda.

File .Xmodmap akan dimuat ketika Anda membuka sesi X11, Anda harus memiliki pemetaan ini di tempat lain kali Anda login atau reboot.

Konfigurasi ini berfungsi untuk pengaturan ubuntu 14.04 saya. Jika Anda memiliki * nix yang berbeda dan ini tidak berfungsi, kirimkan apa yang Anda lakukan untuk menyiasatinya di sini dan saya akan memasukkannya ke dalam jawabannya.

heymatthew
sumber
@ antindexer berfungsi untuk Anda?
heymatthew
Saya mencoba cukup banyak jawaban, dan ini adalah yang bekerja untuk saya. Setidaknya, itu terjadi pada instalasi linux bare metal. Anehnya, ia gagal di QEMU / KVM, hanya bekerja pada penekanan tombol caps lock alternatif.
Diagon
0

Saya tahu pertanyaan ini sudah cukup lama, tetapi saya perlu membagikan solusi saya, karena (frustasi) jawaban Heymantthew tidak bekerja untuk saya. Apa yang akhirnya berhasil untuk saya:

setxkbmap -layout us -option lv3:caps_switch -variant intl

Ini akan mengaktifkan capslock sebagai kunci mod3, mengatur tata letak menjadi "kami" dan mengatur varian menjadi "intl". Jika Anda menggunakan shell interaktif seperti ikan, maka Anda dapat menekan tab setelah "-layout", "-option" atau "-variant" untuk mendapatkan daftar lengkap dari kemungkinan parameter.

Latar belakang lebih lanjut: Saya mencoba pendekatan xmodmap setahun yang lalu pada mesin Ubuntu yang menjalankan i3 window manager, beralih dari lingkungan gnome standar. Saya telah memodifikasi tata letak keyboard "kami" xkb, khususnya yang internasional dengan kunci mati - ini bekerja dengan baik ketika menggunakan gnome-desktop-manager (ada opsi untuk mengatur caps-lock sebagai kunci mod3), tapi saya tidak bisa mulai bekerja dengan xmodmap. Ini adalah kesalahan saya: Saya pikir GUI gdm menggunakan xmodmap untuk memetakan caps lock ke mod3, tetapi pada kenyataannya ia mengatur opsi X11 ini. Sekarang saya beralih ke Arch, saya terpaksa mengetahuinya.

Saya merekomendasikan kepada siapa pun yang berencana mengotak-atik ini untuk membaca halaman manual tentang localectl, xmodmap, setxkbmap, dan menguji tata letak dengan menambahkan sleep dan mengembalikan part:

setxkbmap ... ; sleep 10; setxkbmap <INSERT DEFAULT SETTINGS>

ini menghemat waktu saya.

Saya masih tidak mengerti bagaimana hasilnya, pendekatan xmodmap tidak berfungsi. Semoga ini bisa membantu seseorang.

Tandai IO
sumber