Tukar alt dan super

27

Saya memiliki Macbook Air yang menjalankan Linux. Saya ingin menukar tombol altdan superdi kedua sisi keyboard satu sama lain.

Bagaimana saya melakukan ini dengan alat cli?

Memperbarui

Mengikuti jawaban Drav Sloan saya menggunakan yang berikut:

keycode 64 = Alt_L
keycode 133 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

keycode 108 = Alt_R
keycode 134 = Super_R
remove Mod1 = Alt_R
remove Mod4 = Super_R
add Mod1 = Super_R
add Mod4 = Alt_R

sumber
1
Anehnya, semuanya bekerja untuk saya (mac air) karena ketika saya hanya mengambil 6 baris pertama dan bukan bototm sekali ke dalam file dan menjalankan file xmobmap di atasnya. Dengan garis bawah saya punya kesalahan.
Leo Ufimtsev

Jawaban:

20

Salah satu cara untuk mencapai itu adalah melalui xmodmap. Anda dapat berlari xevuntuk mendapatkan acara utama. Saat menjalankan xevsebuah kotak akan muncul dan Anda dapat memfokuskannya dan menekan tombol yang ingin Anda tukarkan. Seharusnya menampilkan detail yang mirip dengan untuk Altkunci:

KeyPress event, serial 28, synthetic NO, window 0x8800001,
  root 0x25, subw 0x0, time 2213877115, (126,91), root:(1639,475),
  state 0x0, keycode 14 (keysym 0xffe9, Alt_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

Saya menggunakan PC, dan tidak memiliki "Command Key", tetapi memiliki "Windows Key" yang setara, dan xev memberikan:

KeyPress event, serial 28, synthetic NO, window 0x8000001,
  root 0x25, subw 0x0, time 2213687746, (111,74), root:(1624,98),
  state 0x0, keycode 93 (keysym 0xffeb, Super_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

Karena xmodmap tidak tahu state, dan dapat dengan mudah memecah pemetaan kunci, saya sarankan Anda melakukan:

xmodmap -pke > defaults

Kemudian kita membuat file xmodmap:

keycode 14 = Alt_L
keycode 93 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

Perhatikan bagaimana saya menggunakan kode kunci yang xevdikembalikan. Juga di sini saya hanya mengganti super kiri dan tombol alt (dan meninggalkan yang tepat untuk perilaku lama mereka). Kemudian kita cukup menjalankan xmodmap, untuk mengatur kunci-kunci ini:

$ xmodmap -v modmap.file
! modmap:
! 1:  keycode 14 = Alt_L
        keycode 0xe = Alt_L
! 2:  keycode 93 = Super_L
        keycode 0x5d = Super_L
! 3:  remove Mod1 = Alt_L
! Keysym Alt_L (0xffe9) corresponds to keycode(s) 0xe
        remove mod1 =  0xe
! 4:  remove Mod4 = Super_L
! Keysym Super_L (0xffeb) corresponds to keycode(s) 0x5d
        remove mod4 =  0x5d
! 5:  add Mod1 = Super_L
        add mod1 = Super_L
! 6:  add Mod4 = Alt_L
        add mod4 = Alt_L
!
! executing work queue
!
        keycode 0xe = Alt_L
        keycode 0x5d = Super_L
        remove mod1 =  0xe
        remove mod4 =  0x5d
        add mod1 = Super_L
        add mod4 = Alt_L

Anda dapat menjalankan tanpa tombol -v(verbose) untuk menjalankan diam, tetapi saya merasa berguna jika Anda membuat kesalahan dalam file modmap Anda. Jika semuanya berantakan maka cukup gunakan kembali default Anda:

xmodmap defaults

Modmap sering dijalankan pada awal X, sehingga Anda dapat menerapkannya sebagai default jika Anda memasukkan perintah modmap Anda ~/.xmodmaprc.

Drav Sloan
sumber
Apakah ada cara untuk melakukan ini setxkbmap? Saya ingin menggunakan setxkbmap -option compose:raltopsi bersama-sama dengan ini.
Saya menggunakan solusi swap_opt_cmd dalam jawaban lain, tetapi yang satu ini patut mendapat upvote karena sangat teliti dan ditulis dengan jelas. Bravo, tuan.
John Franklin
Terima kasih. Saya mendapatkan xmodmap kacau dan menghargai jika Anda dapat membantu askubuntu.com/questions/1026246/…
Tim
26

Jika Anda ingin melakukan ini pada keyboard Apple, coba ini:

echo 1|sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd

Agar ini berfungsi untuk versi Linux yang lebih rendah, Anda dapat mencoba ini: http://blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html

theicfire
sumber
Meskipun jawaban yang lain melakukan juga pekerjaan, ini adalah yang solusi untuk Mac Buku; bekerja seperti pesona!
sinisterstuf
1
Mengapa ini bukan default ?!
John Franklin
Saya tidak memiliki akses tulis ke file ini. :-(
itmuckel
1
@ Micha90 - Anda perlu menggunakan tee: echo "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
jaustin
2
Luangkan satu jam untuk mengonfigurasi xmodmap. Berhasil. Kemudian lihat jawaban ke-2 ...
Bilow
17

Jika Anda hanya ingin menukar alt kiri dan super key, jalankan perintah di terminal Anda:

setxkbmap -option altwin:swap_alt_win

Untuk mengembalikan perilaku default, gunakan saja:

setxkbmap -option

Catatan: Ini bersifat sementara. Jika Anda ingin efeknya ditambahkan secara permanen ke file startup Anda.

coljamkop
sumber
4
Ini harus menjadi solusi yang diterima, karena bersih dan menggunakan fungsi bawaan. Anda seharusnya menyebutkan, bahwa untuk mengembalikan perilaku default yang bisa Anda gunakan setxkbmap -option. Dan jika Anda hanya ingin pertukaran kiri alt dan super key , kemudian gunakan perintah ini: setxkbmap -option altwin:swap_lalt_lwin.
erik
1
Saya memiliki keyboard Logitech dan ini berfungsi untuk mengganti kunci windows saya (Super_L) dengan alt kiri (Alt_L). Terima kasih!
Derek
4
$ xmodmap -pke

Perhatikan alt dan super kode kunci mana yang terikat, lalu di folder awal Anda buka / buat file baru .xmodmaprc. Sebagai contoh, kunci super / alt saya terikat seperti itu

keycode  64 = Alt_L Meta_L Alt_L Meta_L
keycode 108 = Alt_R Meta_R Alt_R Meta_R
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R

Tetapi untuk menukar kunci, Anda harus memasukkan yang berikut ini di .xmodmaprc

keycode  64 = Super_L NoSymbol Super_L
keycode 108 = Super_R NoSymbol Super_R
keycode 133 = Alt_L Meta_L Alt_L Meta_L
keycode 134 = Alt_R Meta_R Alt_R Meta_R
cepkos
sumber
Menimpa asosiasi kode kunci / peran ... sederhana, dan berfungsi. Bertanya-tanya apakah ada kelemahan dibandingkan dengan remove ...solusi.
Dering Ø
Ingat Anda dapat menggunakan grepuntuk memfilter keluaran sehingga xmodmap -pke | grep -i "super\|alt"harus memudahkan untuk melihat apa yang Anda butuhkan.
Benjamin R
0

Jika Anda adalah salah satu orang yang kurang beruntung seperti saya yang tidak bisa mendapatkan xmodmap untuk beralih Alt kanan dengan Ctrl kanan, maka mungkin ini akan membantu.

Jika Anda menekan Alt kanan dan e dan Anda mendapatkan é maka solusi ini adalah untuk Anda (perlu perbaikan).

Jalankan ini di terminal (periksa kode kunci Anda dengan xev):

xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"

lalu letakkan kode ini di .Xmodmap Anda:

remove Control = Control_R
remove Mod1 = Alt_R
keycode 105 = Alt_R
keycode 108 = Control_R
add Control = Control_R
add Mod1 = Alt_R

Kode ini mengatur kunci Alt_Gr Anda ke Alt_R, dan kemudian menukar Alt_r dengan Ctrl_R.

Jika Anda ingin ini tetap setelah Anda keluar, masukkan perintah berikut di salah satu file shell startup Anda, misalnya ~ /. Profil:

if [ -f $HOME/.Xmodmap ]; then
  xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"
  /usr/bin/xmodmap $HOME/.Xmodmap
fi

sumber: question1 question2

Mugur 'Bud' Chirica
sumber