Как мне переназначить Caps Lock на Hyper Key в Ubuntu 18.04

В Ubuntu 16.04 я использовал xmodmap для переназначения ключа и сохранил скрипт в файл .sh, который вызывался при каждом запуске Ubuntu. Однако в Ubuntu 18.04 это работает не так хорошо. Когда Ubuntu запускается, он перераспределяет ключ, как и ожидалось, однако после приостановки и повторного входа в систему ключи заменяются на исходные настройки.

Мне удалось добиться некоторого прогресса, отредактировав /usr/share/X11/xkb/symbols/pc следующим образом:

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      ]   };

    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 <CAPS> {    [ Hyper_L       ]   };
    key <NMLK> {    [ Num_Lock      ]   };

    key <LFSH> {    [ Control_L     ]   };
    key <LCTL> {    [ Shift_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 };

Так что теперь моя левая клавиша Shift действует как клавиша управления, а моя левая клавиша управления действует как клавиша Shift. Это работает нормально каждый раз, когда я запускаю Ubuntu или захожу снова. Но я не могу заставить ключ Caps работать как Hyper-ключ. В результате я получаю то, что когда я нажимаю Caps, активируется клавиша Super, и я действительно не понимаю, почему. Возможно, где-то определено, что Super и Hyper работают вместе, но я не могу найти где.

2
задан 12 April 2019 в 18:05

2 ответа

Для этого для работы также необходимо изменить модификаторы. Это можно сделать, изменив следующие части /usr/share/X11/xkb/symbols/pc: (те, что отмечены комментариями справа)

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      ]   };

    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     ]   };         //remove caps lock mapping
    key <CAPS> {    [ Hyper_L       ]   };         //add Hyper_L mapping
    key <NMLK> {    [ Num_Lock      ]   };

    key <LFSH> {    [ Control_L     ]   };
    key <LCTL> {    [ Shift_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 };            //remove caps modifier
    modifier_map Control{ Control_L, Control_R };
    modifier_map Mod2   { Num_Lock };
    modifier_map Mod3   { Hyper_L, Hyper_R };      //add modifier for Hyper (Mod3)
    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 Mod3   { <HYPR> };                  //set Hyper modifier to Mod3
    // End of modifier mappings.

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

Оставьте остальную часть файла как есть. Чтобы это работало, вам необходимо выйти из системы и войти снова. Это не сработает, если вы просто приостановите или заблокируете экран.

0
ответ дан 12 April 2019 в 18:05

Несколько дней назад это работает:

  • Запустите Ubuntu на Wayland
  • Поместите это в свой .bashrc
setxkbmap -option caps:hyper
setxkbmap -option caps:none
1
ответ дан 18 December 2019 в 16:11

Другие вопросы по тегам:

Похожие вопросы: