Bagaimana cara menukar kunci Alt dan Windows dengan xmodmap?

9

Saya memiliki keyboard Mac di mana tombol Alt / Win (yaitu Option / Command) terbalik dibandingkan dengan keyboard PC biasa, dan saya ingin menukarnya. Saya belum beruntung dengan xmodmap sejauh ini. Konfigurasi standar adalah sebagai berikut:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (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)

Saat ini, tombol alt kiri / kanan adalah kode kunci 64 dan 108, sedangkan tombol jendela kiri / kanan adalah 133 dan 134.

Saya menghargai bantuan apa pun!

Daniel Schuler
sumber
Bagi saya, ini swap kedua pasang Alt dan Win: setxkbmap -device 8 dvorak -option altwin:swap_alt_win,ctrl:nocaps. Saya hanya ingin Alt yang tepat dan Win bertukar. Ini tidak "membatalkan" swap kiri: setxkbmap -device 8 dvorak -option altwin:swap_lalt_lwin,altwin:swap_alt_win,ctrl:nocaps. Tidak ada altwin:swap_ralt_rwinpilihan, menurut man xkeyboard-config.
Peter Becich

Jawaban:

11

Ini adalah Xmodmaprc saya:

! Exchange left Alt and left Win
remove mod1 = Alt_L
remove mod4 = Super_L
add mod1 = Super_L
add mod4 = Alt_L
! Exchange tilde and lesser/greater
keycode  94 = grave asciitilde dead_grave dead_tilde grave asciitilde
keycode  49 = less greater less greater bar brokenbar bar brokenbar
! Steve, your keyboard sucks

Anda harus memodifikasi .xsession atau .xinitrc Anda untuk memanggil xmodmap .Xmodmaprc

Christophe Devine
sumber
7

Saya mencapai ini di Ubuntu 13.04 dengan menggabungkan jawaban Christophe (yang membantu saya, tetapi tidak bekerja untuk pengubah dan saya tidak perlu kubur dan tilde menjadi kunci mati), jawaban lain tentang setxkbmap , bermain dengan opsi berbeda di pengaturan- keyboard-layout-options (bahkan melihat kode sumber ) dan memeriksa konfigurasi saat ini menggunakan perintah setxkbmap -query(yang juga harus Anda jalankan, untuk memeriksa model keyboard spesifik Anda dan kode tata letak karena mungkin berbeda).

Saya memiliki satu skrip yang saya panggil ketika saya beralih ke keyboard Apple (opsi penting adalah altwin:swap_lalt_lwinuntuk menukar tombol pengubah Alt dan Super):

# clear all options
setxkbmap -model "pc105" -layout "hr,us" -option ""  

# set the Apple keyboard
setxkbmap -rules "evdev" -model "pc105" -layout "hr,us" -option "terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier,altwin:swap_lalt_lwin"

# swap the grave-tilde with less-greater key
#  - variant without dead keys
xmodmap -e "keycode  94 = grave asciitilde"
xmodmap -e "keycode  49 = less greater less greater bar brokenbar bar brokenbar"

Dan satu lagi yang saya sebut ketika saya kembali dengan keyboard normal:

# clear settings
setxkbmap -model "pc105" -layout "hr,us" -option ""

# pc keyobard
setxkbmap -rules "evdev" -model "pc105" -layout "hr,us" -option "terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier"

Perhatikan bahwa saya menambahkan pengaturan

terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier

untuk mengaktifkan terminasi sesi ctrl + alt + backspace Gnome, akses tombol level 3 menggunakan tombol win kanan, tata letak bergeser dengan menekan kedua tombol shift dan mengubah Caps Lock saya menjadi Ctrl tambahan (masing-masing). Anda mungkin ingin mengecualikan beberapa atau semuanya.

Anda dapat menggunakan Kunci Otomatis untuk mengikat panggilan ke beberapa pintasan keyboard, atau memanggilnya dari Anda .profileatau .bashrcjika Anda menggunakan keyboard Apple sepanjang waktu.

metakermit
sumber
1
Banyak sekali. Jika Anda hanya ingin swap kiri alt dan super key , gunakan perintah ini: setxkbmap -option altwin:swap_lalt_lwindan jika Anda ingin beralih baik kiri dan kanan alt dan super kunci, gunakan perintah ini: setxkbmap -option altwin:swap_alt_win.
erik
Jawaban yang bagus. Tetapi bagaimana saya melakukan hal itu hanya untuk kemenangan yang benar dan alt yang benar (AltGr)? Saya baru-baru ini memiliki unicomp, di mana kemenangan yang tepat berada di sebelah spasi, bukan AltGr, seperti yang biasa saya lakukan
cessor
6

Saya menemukan bahwa di Ubuntu 16.04 yang menggunakan xkb dan gnome Anda memerlukan beberapa langkah tambahan bila dibandingkan dengan jawaban jawaban Christopher Devine di atas jika Anda ingin mempertahankan semua perilaku jalan pintas untuk tombol alt dan super. Ini adalah solusi termudah yang saya temukan.

Untuk mendapatkan nomor kode kunci Anda, pada baris perintah $ xev dan ketik tombol yang Anda inginkan. Untuk info lebih lanjut tentang itu lihat posting ini: xev dan penggunaan xmodmap

Melakukannya memberi saya: Super_Lmemiliki kode kunci 133 Alt_Lmemiliki kode kunci 64

Jadi untuk menukar Windows alias Command (di Mac) alias kunci Super dengan tombol Alt kiri saya lakukan:

remove mod1 = Alt_L
remove mod4 = Super_L
keycode 133 = Alt_L
keycode 64 = Super_L
add mod1 = Alt_L  
add mod4 = Super_L

Dua baris terakhir menambahkan mod1 dan mod4 kembali ke keysym untuk Alt_L dan Super_L sama seperti mereka dihapus. Jika ini tidak dilakukan, saya kehilangan pintasan yang terkait dengan tombol super (pencarian) dan juga memecah kombo alt + tab untuk beralih di antara windows.

Anda dapat menambahkan perintah-perintah ini ke dalam file seperti .xmodmap dan kemudian $ xmodmap .xmodmapakan menjalankannya.

Atau, Anda dapat menjalankan ini secara berurutan pada baris perintah seperti: $ xmodmap -e <expression here>

Jika Anda ingin kembali ke pemetaan kunci default, maka Anda dapat membalikkan angka dalam kode di atas, seperti:

remove mod1 = Alt_L
remove mod4 = Super_L
keycode 64 = Alt_L
keycode 133 = Super_L
add mod1 = Alt_L  
add mod4 = Super_L

atau di Ubuntu saya jalankan: $ setxkbmap

Trevor Owens
sumber
punya masalah di dalam intellij di mana tombol alt tidak dikenali ketika hanya menukar kunci dengan mod1 dan mod4. Tapi ini mengatur ulang kode kunci berfungsi dengan baik di intellij. Pekerjaan besar
Jimubao
2

Anda juga dapat mengatur hid_appleopsi modul kernel untuk hanya memodifikasi keyboard apple Anda tetapi tidak untuk keyboard PC normal. Tidak perlu menggunakan xkbmap atau Xmodmapr. Cukup buat file /etc/modules.d/hid_apple.confdengan konten

options hid_apple iso_layout=0 fnmode=2 swap_opt_cmd=1

fnmode=2memetakan tombol fungsi F1...F12tanpa perlu menekan Fn. Hapus jika Anda lebih suka kunci media. Lihat Arch Wiki untuk lebih lanjut.

Secara permanen di Ubuntu :

echo options hid_apple iso_layout=0 fnmode=2 swap_opt_cmd=1 | sudo tee -a /etc/modprobe.d/hid_apple.conf
sudo update-initramfs -u -k all
sebastian
sumber
0

Saya akan merekomendasikan untuk tidak menggunakan xmodmap di masa depan karena itu tidak berfungsi di Wayland, tetapi mengesampingkan setxkbmap atau xkbcomp akan menjadi metode terbaik untuk digunakan ke depan dan proyek saya Kinto menggunakannya.

Kinto akan menukar tombol yang Anda inginkan, tetapi ia juga akan mendengarkan aplikasi apa yang Anda gunakan, sehingga Anda dapat tetap menyimpan keymap kanan untuk aplikasi terminal sehingga cocok dengan pengalaman Anda dengan berada di mac.

Berikut adalah tautan yang relevan, tetapi saya juga akan memasukkan inti dari apa yang dilakukan Kinto juga - minus custom keymap dan kemampuan keymap bergantian, sehingga Anda memiliki gagasan tentang apa yang sebenarnya dilakukan Kinto.

https://github.com/rbreaves/kinto

https://medium.com/@benreaves/kinto-a-mac-inspired-keyboard-mapping-for-linux-58f731817c0

https://gist.github.com/rbreaves/f4cf8a991eaeea893999964f5e83eebb

Isi intinya

# permanent apple keyboard keyswap
echo "options hid_apple swap_opt_cmd=1" | sudo tee -a /etc/modprobe.d/hid_apple.conf
update-initramfs -u -k all

# Temporary & instant apple keyboard keyswap
echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd

# Windows and Mac keyboards - GUI (Physical Alt is Ctrl, Physical Super is Alt, Physical Ctrl is Super)
setxkbmap -option;setxkbmap -option altwin:ctrl_alt_win

# Windows and Mac keyboards - Terminal Apps (Physical Alt is Super, Physical Super is Alt, Physical Ctrl is Ctrl)
setxkbmap -option;setxkbmap -option altwin:swap_alt_win

#
# If you want a systemd service and bash script to help toggle between
# GUI and Terminal applications then look at project Kinto.
# https://github.com/rbreaves/kinto
#
# Note: The above may not work for Chromebooks running Linux, please look
# at project Kinto for that.
#
# If anyone would like to contribute to the project then please do!
#
R Ben R
sumber