Bagaimana cara membuat kunci Hyper dan Super tidak melakukan hal yang sama?

8

Saya telah menggunakan xkb untuk memetakan kembali kunci windows kanan (RWIN) ke Hyper_R karena saya ingin menggunakannya dengan AutoKey untuk beberapa cara pintas khusus. Saya melakukannya dengan mengedit

/usr/share/X11/xkb/symbols/pc

memodifikasi garis RWIN:

  key <RWIN> {  [ Hyper_R   ]   };

( Inilah jawaban yang membimbing saya )

Dari apa yang saya tahu, ini berfungsi dan tombol Windows kanan sekarang menjalankan Hyper_R. Namun, tampaknya di Ubuntu (tepatnya Xubuntu), Hyper dan Super melakukan hal yang sama. Jadi Super + e meluncurkan editor, dan begitu juga Hyper + e.

Saya tidak yakin mengapa ini atau di mana saya dapat mengubah perilaku ini. Saya ingin Hyper dan Super menjadi pengubah yang berbeda.

Alexander Rechsteiner
sumber
Ada satu hal di sini , meskipun saya tidak berpikir dialog sekarang ada di 13.10 ...
Wilf
Tetapi ini harus dapat dikonfigurasi di suatu tempat, bukan?
Alexander Rechsteiner
Anda mungkin dapat menemukannya didconf-editor
Wilf
1
Terima kasih, tetapi tidak berhasil di sana. Sial, seluruh keyboard remapping hal ini di Linux memberi saya diabetes.
Alexander Rechsteiner
+1: kerukunan (pada bagian diabetes). Saya tidak dapat menemukan panduan yang bagus, komprehensif, dan terperinci tentang bagaimana keyboard dikelola di Ubuntu. Ada serangkaian interaksi antara gnome-control-center, gnome-tweak-tool, xkbd, xmodmap yang cukup kompleks dan, terburuk, tidak terdokumentasi. Jika Anda menemukan beberapa tautan, silakan bagikan! (Meskipun saya curiga hampir tidak ada yang mengetahuinya secara nyata. Lihat saja ketidakmampuan bugs.launchpad.net/ubuntu/+source/gnome-settings-daemon/+bug/… )
Rmano

Jawaban:

11

Untuk beberapa alasan Ubuntu saat ini menetapkan Super dan Hyper ke Mod4. Anda dapat melihat ini di / usr / share / X11 / xkb / simbol / pc:

 key <SUPR> {   [ NoSymbol, Super_L ]   };
 modifier_map Mod4   { <SUPR> };

 key <HYPR> {   [ NoSymbol, Hyper_L ]   };
 modifier_map Mod4   { <HYPR> };

Saya dapat mengubah ini untuk menempatkan super dan hiper pada pengubah terpisah tanpa perlu menjadi root atau memodifikasi file sistem apa pun. Saya tidak yakin apakah ini cara terbaik karena saya jelas bukan ahli xkb, tapi ini cara yang dapat diandalkan bagi saya.

Pertama, buat file simbol lokal. Saya punya barang saya di $ {HOME} /. Config / xkb / simbol / lokal. Ini menetapkan Super ke Mod3 dan Hyper ke Mod4.

default  partial modifier_keys
xkb_symbols "superhyper" {

    modifier_map Mod3 { Super_L, Super_R };

    key <SUPR> {    [ NoSymbol, Super_L ]   };
    modifier_map Mod3   { <SUPR> };

    key <HYPR> {    [ NoSymbol, Hyper_L ]   };
    modifier_map Mod4   { <HYPR> };
};

Kemudian kompilasi ulang peta yang ada untuk menambahkan "lokal":

setxkbmap -print | sed -e '/xkb_symbols/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.config/xkb - ${DISPLAY}

Masukkan skrip ini untuk dijalankan saat Anda masuk. Anda bisa menjalankannya sebagai pengguna biasa.

ergosys
sumber
Apakah mungkin hanya mengedit file itu di tempat untuk mengubah HYPR ke Mod3?
Alex Moore-Niemi
3
Kamu bisa melakukan ini. Manfaat dari tidak mengedit adalah bahwa pembaruan sistem tidak akan menimpa perubahan Anda.
ergosys
Untuk saya sendiri, saya menggunakannya secara singkat dengan raw.githubusercontent.com/jabbalaci/dotfiles/master/.Xmodmap meskipun secara misterius berhenti ...
Alex Moore-Niemi
Juga kelemahan dari metode jawaban saya yang saya temukan adalah bahwa jika keyboard Anda dicabut atau kehilangan komunikasi USB karena kesalahan acak, skrip harus dijalankan lagi. Mungkin ada beberapa cara untuk memutarnya kembali secara otomatis, tetapi saya belum memeriksanya. Untungnya hal kesalahan acak hanya terjadi sebulan sekali bagi saya. Jika Anda mengedit file sistem ini seharusnya tidak menjadi masalah. Jadi ada plus dan minusnya.
ergosys
1
Saya juga menggunakannya. Sudah ada pengaturan kalengan untuk itu, jadi saya menggunakan: setxkbmap -option 'caps: hyper'
ergosys
3

Dengan xmodmapAnda dapat mengubah perilaku ini dengan 2 perintah:

## Hyper_L is mod4 by default, we will "move" it to Mod3
xmodmap -e "remove mod4 = Hyper_L"
xmodmap -e "add mod3 = Hyper_L"
Alex Stragies
sumber