bagaimana cara menetapkan pengubah lain ke tombol Alt untuk X11?

9

Tujuan:

Saya ingin menetapkan Alt ke tombol CapsLock, dan Meta ke tombol Alt. Tetapi dengan cara seperti itu, Alt-key tidak lagi dikenali sebagai Alt, dan CapsLock-key tidak lagi dikenali sebagai CapsLock.

openSUSE 11.4

Sebelumnya:

openSUSE 11.1 - karena saya adalah satu-satunya pengguna komputer saya, saya "cukup" mengedit file / usr / share / X11 / xkb / keycodes / xfree86 dan bekerja tanpa masalah. Kunci disambungkan ke simbol mereka di tingkat terendah.

Masalah:

  1. xkb

    Saya membuat varian tata letak Polandia (pl_ext) yang (untuk pengujian) terdiri dari entri tersebut:

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    

    Namun ini tidak melakukan apa-apa, tombol CapsLock di xev dikenali (simbol) sebagai Alt_L, tetapi ketika saya menekan tombol CapsLock berperilaku seperti CapsLock (misalnya dengan asumsi Anda memiliki File di menu, Alt + F harus membuka menu ini, itu tidak + ).

    Pertanyaan: Bagaimana cara mendefinisikan file layout untuk mengatur CapsLock-key sebagai Alt, dan Alt-key sebagai Meta?

    Sunting: Setengah sukses di sini! Sekarang saya punya entri:

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { <CAPS> }; // this is a difference
    

    dan ini berfungsi seperti yang diinginkan. Ini tidak:

    key <LALT> { [ Meta_L ] } ;
    key <RALT> { [ Meta_R ] } ;
    modifier_map Mod5 { <LALT>,<RALT> };
    

    Alt-keys dikenali sebagai Meta by xev, tetapi saya masih dapat membuka menu dengan Alt + F, mengganti windows, dan saya tidak seharusnya. Dan di sisi lain saya tidak bisa memasukkan karakter nasional apa pun, dan saya harus.

  2. xfree86

    Tapi sekarang ini tidak berfungsi, saya kira tabel file lain dibaca bukan xfree86.

    Pertanyaan: Bagaimana cara mengetahui file tabel kode kunci yang digunakan oleh sistem (X / Gnome)?

    Sunting: Pilihan terbaik bagi saya - mengedit tabel kode kunci - diselesaikan dengan jawaban macias !

  3. xmodmap

    Setengah sukses di sini. Bagian ini berfungsi seperti yang diinginkan:

    hapus Lock = Caps_Lock keysym Caps_Lock = Alt_L

    Sekarang, saya memiliki tombol CapsLock benar yang dipetakan ke Alt. Tapi ini:

    keysym Alt_L = Meta_L

    ... melakukan hal yang aneh. xev menunjukkan bahwa Alt-key dipetakan ke Meta, tetapi ketika saya menekan Alt + F (ini harus dipetakan ke Meta + F -> tidak melakukan apa-apa) menu File dibuka. Terlebih lagi, ketika saya menekan Alt + Tab, saya mendapatkan window-switcher (saya seharusnya tidak - Alt adalah Meta sekarang).

    Pertanyaan: Bagaimana cara "menghapus" perilaku lama untuk Alt-key?

    Sunting: Bagian ini diselesaikan oleh jawaban Gilles .

Ringkasan:

Menjawab pertanyaan apa pun (semoga) menyelesaikan masalah saya, namun saya lebih suka menggunakan xkb sepenuhnya karena saya kemudian dapat mengemas semua file untuk xkb dan mengubah tata letak di satu tempat. Terima kasih sebelumnya atas bantuannya!

Greenoldman
sumber
Jika Anda sudah menemukan jawaban, silakan posting seperti itu, dan berikan informasi yang cukup untuk orang lain yang mungkin tertarik. (Tidak apa-apa untuk menjawab pertanyaan Anda sendiri jika Anda menemukan jawaban di tempat lain atau sendiri; Anda bahkan dapat menandai jawaban Anda diterima jika Anda mau.)
Gilles 'SO-stop being evil'
@ Gilles, ok, tapi saya tetap jawaban Anda sebagai jawabannya, hanya untuk mencegah tuduhan yang mungkin saya lakukan untuk poin. Selain itu, bantuan Anda sangat berharga bagi saya.
greenoldman
Anda tidak mendapatkan poin karena menerima jawaban Anda sendiri. (Anda mendapatkan poin untuk suara pada jawaban Anda sendiri, yang adil karena Anda melakukan pekerjaan.) Yang paling penting adalah memiliki informasi yang disajikan dengan jelas. Sekarang ada dua jawaban untuk pertanyaan ini, satu dengan xmodmap dan satu dengan xkb, dan halaman akan membaca lebih jelas jika keduanya diposting sebagai jawaban.
Gilles 'SO- berhenti bersikap jahat'

Jawaban:

7

(Jawaban ini hanya tentang xmodmap. Saya yakin ini mungkin dilakukan dengan XKB, saya hanya tidak tahu caranya.)

Modifiers dan keyyms ditugaskan secara independen. Tetapi Anda mendapatkan efek aneh jika Anda tidak mengaturnya secara konsisten. Saya pikir semua yang Anda lewatkan adalah addperintah untuk menetapkan pengubah Meta_L, meskipun Anda mungkin juga perlu menghapus dan menetapkan kembali kunci pengubah. Anda dapat mengganti Mod1dan Mod2dengan Mod3, Mod4dan Mod5: mereka dapat dipertukarkan, pastikan Anda tidak menggunakannya untuk dua tujuan yang berbeda.

clear Mod1
clear Mod2
remove Lock = Caps_Lock
keysym Caps_Lock = Alt_L
keysym Alt_L = Meta_L
add Mod1 = Alt_L Alt_R
add Mod2 = Meta_L Meta_R
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Terima kasih banyak. Jadi memang, saya menggunakan Mod5 bukan Mod2 untuk Meta, dan sekarang saya dapat menulis seperti yang diharapkan (saya menggunakan kunci meta + untuk banyak karakter nasional). Tapi anehnya, sekarang saya punya masalah dengan CapsLock-key lagi - itu diikat ke ... Meta. Saya kira mengapa, karena begitu ada yang mengikat Alt, tetapi kemudian Alt didefinisikan ulang. Jadi bagaimana membuat perbedaan dan sekali bersikeras pada kode, dan kedua kalinya pada simbol? Saya ingin tidak menggunakan kode kunci mentah karena bisa berubah dari keyboard ke keyboard. Saya tidak dapat menukar urutan keyyms, karena pada baris terakhir saya akan mendapatkan kesalahan.
greenoldman
Masalahnya keysym Caps_Lock = Alt_Ladalah jika Anda menjalankannya dua kali, ini akan mengembalikan sistem ke kondisi yang tidak diinginkan. Itu sebabnya saya menggunakan kode kunci ; mereka berbeda antara sistem operasi dan arsitektur (bukan antara keyboard), tetapi tidak sering.
Gilles 'SO- stop being evil'
Terima kasih atas penjelasannya, saya kira sekarang :-). Jika Anda tidak keberatan saya akan menyimpannya sedikit lebih lama sebagai pertanyaan yang belum terjawab, mungkin seseorang dapat memecahkan masalah saya di tingkat xkb, yang akan lebih fleksibel (beralih tata letak membunuh xmodmaps).
greenoldman
Terima kasih banyak, terus berjuang dengan simbol / pc tanpa hasil.
Cody Craven
9

Mengedit pendekatan kode kunci

Saya menemukan jawabannya di forum Ubuntu Polandia. Sekarang orang tidak mengedit file "xfree86" tetapi file "evdev". Dengan cara ini Anda dapat membuat perubahan permanen yang berfungsi untuk semua tata letak.

Contoh (berdasarkan permintaan Gilles) - masuk sebagai root, buka

/usr/share/X11/xkb/keycodes

buat cadangan file "evdev", lalu edit. Ubah kode sesuai keinginan Anda, misalnya dalam kasus saya:

<LALT> = 66; // when I press CapsLock (66 code) system will report pressing LeftAlt
<LMTA> = 64; // I will get LeftMeta when pressing LeftAlt (64 code)

Anda dapat menemukan kode-kode itu dengan menjalankan perintah "xev", tetapi Anda cukup melihat file "evdev" yang asli.

Logout, masuk, nikmati keyboard baru Anda :-).

Greenoldman
sumber
ini mungkin cara yang tepat untuk menggunakan XKB. Saya menjalankan Linux Mint dan mengalami masalah di mana Keyboard Preferencesopsi untuk Capslockmenimpa XKBkonfigurasi kustom yang saya tulis. Karena ini adalah tombol radio pilih, tidak ada cara yang bisa saya lihat untuk menghentikan salah satu aturan dari GUI agar tidak diterapkan.
dcunited001
Bisakah Anda mempertahankan perilaku LALT? Artinya, tidak mengubahnya ke LMTA? Saya sudah mencoba tetapi ternyata Anda tidak dapat memiliki dua penugasan dalam bentuk <LALT> = ...
Daniel
dengan ini sangat mudah untuk mengganti LALT dan RALT di ubuntu ... terima kasih banyak. untuk semua googler: memetakan alt ke ubuntu kunci lainnya alt ke altgr ubuntu remap alt ke ctrl
Noel Schenk
4

coba ini:

    key <CAPS>  { [ Alt_L, Alt_L ] };
    key <LALT> { [ Meta_L, Meta_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    modifier_map Mod5 { Meta_L, Meta_R };

perhatikan dua definisi level. Itu karena default untuk LALT adalah [Alt_L, Meta_L]; jika Anda tidak mendefinisikan kembali yang kedua, itu akan tetap menjadi Meta_L.

Lihatlah jawaban ini di xkb untuk cara mendefinisikan kembali beberapa kunci tanpa perlu mengedit file default utama (dengan demikian, tidak perlu menjadi root). Dalam kasus seperti itu, Anda perlu membuat bagian simbol di bagian kecil sebagai:

partial modifier_keys
xkb_symbols "capsasalt_altasmeta" {
        replace key <CAPS>  { [ Alt_L, Alt_L ] };
        replace key <LALT> { [ Meta_L, Meta_L ] };
        modifier_map Mod1 { Alt_L, Alt_R };
        modifier_map Mod5 { Meta_L, Meta_R };
};
Pablo Saratxaga
sumber