Gunakan setxkbmap untuk menukar Shift Kiri dan Kontrol Kiri


17

Apakah mungkin untuk menukar tombol Kiri Shiftdan Kiri CTRLmenggunakan setxkbmapbukan xmodmap?

EDIT

Saya telah beralih ke Fcitx , yang bekerja jauh lebih baik dengan tata letak keyboard saya dan keymap yang dikustomisasi daripada IBus dalam segala hal. Saya sangat merekomendasikannya.

Jawaban:


28

xmodmapsudah usang; jadi memang itu harus dilakukan dengan xkbalat.

Swap yang Anda inginkan tampaknya tidak termasuk dalam file X11 default; jadi kamu harus menulis sendiri.

Halaman http://madduck.net/docs/extending-xkb/ membantu saya untuk memahami dan menemukan cara untuk melakukannya.

Buat file di ~/.xkb/keymap/mykbdmana Anda meletakkan output setxkbmap, itu akan menjadi definisi keyboard dasar Anda; misalnya:

setxkbmap -print > ~/.xkb/keymap/mykbd

kemudian, buat file simbol untuk menentukan pertukaran kunci Anda, masukkan misalnya ~/.xkb/symbols/myswap

di sana, letakkan baris berikut:

partial modifier_keys
xkb_symbols "swap_l_shift_ctrl" {
    replace key <LCTL>  { [ Shift_L ] };
    replace key <LFSH> { [ Control_L ] };
};

kemudian, edit ~/.xkb/keymap/mykbdfile, dan ubah xkb_symbolsbaris untuk ditambahkan

+myswap(swap_l_shift_ctrl)

akhirnya, Anda dapat memuatnya dengan xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY(Anda tidak dapat menggunakan "~" untuk -Iparameter). Mungkin akan meludahkan banyak peringatan tentang simbol yang tidak terdefinisi untuk beberapa kunci langka, tetapi Anda dapat mengabaikannya (misalnya, redirect error to dave:) 2> /dev/null.

Jika Anda ingin dapat dengan mudah bertukar antara ctrl / shift yang normal dan terbalik; buat saja di bawah ~/.xkb/keymap/file lain, tanpa opsi "myswap" tambahan, dan muat dengan xkbcomp. Anda dapat membuat dua skrip kecil untuk memuatnya.


1
Terima kasih. Itu bekerja, tetapi untuk sekali saja. Masalahnya adalah saya menggunakan mesin input yang disebut IBus. Setiap kali saya mengganti metode input dan kemudian kembali dengan stroke tombol "Ctrl + Spasi", Kontrol Kiri dan Kontrol Kiri diaktifkan kembali. Ada saran tentang cara menghindarinya.
hari

mmn, mungkin IBus sendiri melakukan beberapa redefinisi keyboard. coba xkbcomp $DISPLAY some.dumpsetelah dan sebelum memanggil IBus, dan lakukan diff dari dua kesedihan (itu adalah definisi keyboard lengkap); Anda mungkin akan melihat perbedaan.
Pablo Saratxaga

Hmm, memang, sungguh menyebalkan. Adakah ide untuk menghilangkan masalah? Perhatikan bahwa perintah itu setxkbmap -option caps:escapeberfungsi. IBus ingat tombol bertukar tombol Esc dan Caps_Lock Tapi itu tidak berlaku untuk tombol Shift Kiri dan Kontrol Kiri yang ditukar.
hari

mungkin IBus membaca keyboard saat diluncurkan. Coba bongkar IBus, ganti keyboard Anda, dan muat lagi. Jika masalah tetap ada, maka pertanyaan khusus IBus harus dibuat (dan mungkin melaporkan bug; jika demikian, IBus harus mendeteksi perubahan keyboard dan menghormatinya)
Pablo Saratxaga

Hai. Adakah yang bisa memberitahu saya bagaimana saya akan menggunakan teknik yang sama untuk menukar tombol Alt kiri dengan tombol Control kiri? Saya mencoba mengubah file myswap ke: partial modifier_keys xkb_symbols "swap_l_shift_ctrl" {ganti kunci <LCTL> {[Alt_L]}; ganti kunci <LALT> {[Control_L]}; }; tapi itu tidak berhasil. TIA !!!
Neil Girardi

3

Saya mengalami beberapa masalah pemetaan LALTuntuk Control_Lmenggunakan solusi Pablo , tampaknya Anda perlu mengatur modifier_mapopsi juga.

Saya menyalin templat dari /usr/share/X11/xkb/symbols/altwin- mencari xkb_symbols "ctrl_alt_win"- dan memodifikasinya untuk mengatur perubahan berikut:

  • Kunci LALT untuk Kontrol **
  • Kunci LWIN ke Alt
  • Tombol MENU ke tombol Windows

File terakhir ~/.xkb/symbols/myswapadalah:

partial modifier_keys
xkb_symbols "swap" {
   key <MENU> {     [   Super_L     ]   };
   key <LALT> { [ Control_L, Control_L  ] };
   key <RALT> { type[Group1] = "TWO_LEVEL",
                symbols[Group1] = [ Alt_R, Meta_R ] };
   key <LWIN> { [ Alt_L, Meta_L ] };
   key <LCTL> { [ Control_L ] };
   key <RCTL> { [ Control_R ] };
   modifier_map Control { <LALT>, <LCTL>, <RCTL> };
   modifier_map Mod1 { <LWIN>, <RALT> };
   modifier_map Mod4 { <MENU> };
};

Saya juga menambahkan -w0ke xkbcompperintah untuk menghindari keluaran peringatan saat membuka shell baru.

xkbcomp -w0 -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY

** Berganti-ganti antara Mac dan Linux, saya ingin memiliki dua tombol kontrol di Linux untuk memperkirakan keyboard Mac untuk memori otot saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.