Menukar tombol AltGr dan Spasi di Kali - Firefox tidak terpengaruh

Jan 04 2021

Setelah mencoba beberapa ide Spacedan AltGrmemetakan ulang kunci, perubahan xkbterlihat paling menjanjikan. Saya membaca dan menggunakan ide-ide ini terkait dengan xkb:
Memetakan ulang tombol altgr ke AC10 di XKB
Bagaimana cara memetakan ulang tombol keyboard?

Dari pandangan pertama, koreksi saya tampaknya berfungsi di editor teks dan di terminal ( Spacesimbol dicetak pada AltGrpenekanan tombol). Namun, di Firefox itu tidak berfungsi. Melihat lebih dekat, saya telah memperhatikan bahwa di ketiga kombinasi tombol aplikasi dengan AltGrjuga berfungsi (seolah-olah tidak ada pemetaan ulang yang dilakukan), kecuali bahwa di terminal dan di editor teks kombinasi tersebut juga mencetak karakter spasi. Misalnya, di terminal dan di FireFox kombinasi AltGr+ Fmembuka menu File dan di terminal juga karakter spasi dicetak.

Saya Spacerusak dan saya tidak menggunakan AltGr. Saya hanya ingin menukar fungsinya sepenuhnya. Apa yang saya lewatkan? (Saya menggunakan Kali Linux.)

Inilah yang saya lakukan:
1.Opened /usr/share/X11/xkb/symbols/pc
2.Mengubah baris komentar dengan yang di bawah ini:

 // key <SPCE> {    [    space      ]   };
 key <SPCE> {   [ ISO_Level3_Shift  ]   };

3. Menambahkan baris ini:

// Additionally added
key <RALT> {    [    32     ]   };

4.Menyimpan pcberkas.
5.Menghapus xkbcache yang menjalankan rm -rf /var/lib/xkb/*
6.Restart


Informasi tambahan (setelah perubahan yang tercantum di atas).

pcFile lengkap saat ini :

default  partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {

    key <ESC>  {    [ Escape        ]   };

    // The extra key on many European keyboards:
    key <LSGT> {    [ less, greater, bar, brokenbar ] };

    // The following keys are common to all layouts.
    key <BKSL> {    [ backslash,    bar ]   };
    // key <SPCE> { [    space      ]   };
    key <SPCE> {    [ ISO_Level3_Shift  ]   };

    include "srvr_ctrl(fkey2vt)"
    include "pc(editing)"
    include "keypad(x11)"

    key <BKSP> {    [ BackSpace, BackSpace  ]   };

    key  <TAB> {    [ Tab,  ISO_Left_Tab    ]   };
    key <RTRN> {    [ Return        ]   };

    key <CAPS> {    [ Caps_Lock     ]   };
    key <NMLK> {    [ Num_Lock      ]   };

    key <LFSH> {    [ Shift_L       ]   };
    key <LCTL> {    [ Control_L     ]   };
    key <LWIN> {    [ Super_L       ]   };

    key <RTSH> {    [ Shift_R       ]   };
    key <RCTL> {    [ Control_R     ]   };
    key <RWIN> {    [ Super_R       ]   };
    key <MENU> {    [ Menu          ]   };

    // Beginning of modifier mappings.
    modifier_map Shift  { Shift_L, Shift_R };
    modifier_map Lock   { Caps_Lock };
    modifier_map Control{ Control_L, Control_R };
    modifier_map Mod2   { Num_Lock };
    modifier_map Mod4   { Super_L, Super_R };

    // Fake keys for virtual<->real modifiers mapping:
    key <LVL3> {    [ ISO_Level3_Shift  ]   };
    key <MDSW> {    [ Mode_switch       ]   };
    modifier_map Mod5   { <LVL3>, <MDSW> };

    key <ALT>  {    [ NoSymbol, Alt_L   ]   };
    include "altwin(meta_alt)"

    key <META> {    [ NoSymbol, Meta_L  ]   };
    modifier_map Mod1   { <META> };

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

    key <HYPR> {    [ NoSymbol, Hyper_L ]   };
    modifier_map Mod4   { <HYPR> };
    // End of modifier mappings.

    key <OUTP> { [ XF86Display ] };
    key <KITG> { [ XF86KbdLightOnOff ] };
    key <KIDN> { [ XF86KbdBrightnessDown ] };
    key <KIUP> { [ XF86KbdBrightnessUp ] };

    // Additionally added
    key <RALT> {    [    32     ]   };

};

hidden partial alphanumeric_keys
xkb_symbols "editing" {
    key <PRSC> {
    type= "PC_ALT_LEVEL2",
    symbols[Group1]= [ Print, Sys_Req ]
    };
    key <SCLK> {    [  Scroll_Lock      ]   };
    key <PAUS> {
    type= "PC_CONTROL_LEVEL2",
    symbols[Group1]= [ Pause, Break ]
    };
    key  <INS> {    [  Insert       ]   };
    key <HOME> {    [  Home         ]   };
    key <PGUP> {    [  Prior        ]   };
    key <DELE> {    [  Delete       ]   };
    key  <END> {    [  End          ]   };
    key <PGDN> {    [  Next         ]   };

    key   <UP> {    [  Up           ]   };
    key <LEFT> {    [  Left         ]   };
    key <DOWN> {    [  Down         ]   };
    key <RGHT> {    [  Right        ]   };
};

setxkbmap -print:

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
};

xev( AltGrpers dan rilis):

KeyPress event, serial 34, synthetic NO, window 0x3400001,
    root 0x6cb, subw 0x0, time 1249191, (168,-8), root:(797,298),
    state 0x0, keycode 108 (keysym 0x20, space), same_screen YES,
    XLookupString gives 1 bytes: (20) " "
    XmbLookupString gives 1 bytes: (20) " "
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x3400001,
    root 0x6cb, subw 0x0, time 1249261, (168,-8), root:(797,298),
    state 0x8, keycode 108 (keysym 0x20, space), same_screen YES,
    XLookupString gives 1 bytes: (20) " "
    XFilterEvent returns: False

Karena Spacetombol keyboard saya rusak, saya tidak dapat menampilkannya xev.

Jawaban

3 Maik93 Jan 08 2021 at 01:35

Saya benar-benar membuatnya berfungsi bahkan dengan xkeymap, saya membiarkannya di sini sebagai jawaban yang berbeda karena metode ini sangat berbeda dari solusi saya sebelumnya.

Mungkin Anda melewatkan beberapa kejadian AltGrpenggunaan.

Mencoba meniru pengaturan Anda, saya telah mengekspor file konfigurasi saat ini dengan perintah xkbcomp $DISPLAY current.xkbdan mengeditnya dengan menghapus semua ISO_Level3_Shift, LVL3dan Mod5kejadian.

Tepatnya, yang saya hapus adalah:

interpret ISO_Level3_Shift+AnyOf(all) {
    virtualModifier= LevelThree;
    useModMapMods=level1;
    action= SetMods(modifiers=LevelThree,clearLocks);
};
interpret ISO_Level3_Shift+AnyOfOrNone(all) {
    action= SetMods(modifiers=LevelThree,clearLocks);
};
key <LVL3> {
    type= "ONE_LEVEL",
    symbols[Group1]= [ ISO_Level3_Shift ]
};
key <RALT> {
    type= "ONE_LEVEL",
    symbols[Group1]= [ ISO_Level3_Shift ]
};
modifier_map Mod5 { <LVL3> };

Kemudian saya telah memasukkan:

key <LVL3> {[space]};
key <RALT> {[space]};

Konfigurasi yang diedit ini dapat diuji dengan memuatnya

xkbcomp new_conf.xkb $DISPLAY
1 Maik93 Jan 07 2021 at 16:56

Saya tidak menemukan referensi apa pun yang membuktikan bahwa apa yang Anda usulkan seharusnya tidak berfungsi di Firefox, sementara tampaknya Chromium (dan karena itu Chrome) tidak bergantung pada xkeymaps: ini adalah pilihan pengembangan yang lebih mengintegrasikan program di ChromeOS. Oleh karena itu, beberapa pemetaan ulang sistem tidak dapat didukung.

Perbaikan yang berhasil bagi saya adalah memetakan ulang kode kunci di tingkat kernel. Untuk mencapai ini, saya telah mengumpulkan kode pindai (ID perangkat keras kunci) dan kode kunci (simbol tempat mereka dipetakan) untuk spasi dan altGr:

# to collect scan-codes
sudo showkey -s
# space press: 0x39
# altGr press: 0xe0 0x38

# to collect key-codes
sudo showkey
# space press: 57
# altGr press: 100

Sejauh yang saya mengerti, Anda ingin memetakan ulang altGr ke luar angkasa karena bilah spasi Anda rusak, oleh karena itu:

sudo setkeycodes e038 57

harus melakukan triknya.


Untuk membuat ini permanen pada Kali Linux, Anda harus mengedit file xinit default /etc/xdg/xfce4/xinitrc, dengan mengatasinya ~/.xinitrcdan memasukkan sudo setkeycodes e038 57sebelum pernyataan if yang berisi exec xfce4-session; pada file default Kali 20.04, pernyataan if ini ada di baris 86.

Perhatikan bahwa ini memerlukan untuk mengaktifkan sudo tanpa kata sandi ), tetapi sejauh yang saya ingat, ini sudah menjadi opsi default di Kali.