Разрешение клавишам модификаторов действовать как переключатели под X

Есть ли способ позволить клавишам Shift , Ctrl и Alt вести себя как переключатели под X? Я знаю, как можно сделать это в CLI (например, выполнив this ), но не нашел ссылки для этого в X.

Обратите внимание, что это , а не вопрос о липких клавишах, которые можно включить с помощью опции специальных возможностей.

5
задан 19 February 2015 в 10:12

3 ответа

Это реализовано на уровне DE AFAIK. KDE имеет возможность заблокировать липкие клавиши:

с включенными блокировочными липкими клавишами:

Если дважды нажать клавишу Shift , а затем нажать Клавиша F , компьютер интерпретирует это как Shift + F . Теперь, если вы напечатаете P, компьютер интерпретирует это как букву P ( Shift + P ). Чтобы отменить выбор клавиши Shift, нажмите ее еще раз.

http://docs.kde.org/stable/en/kdebase-workspace/kcontrol/kcmaccess/index.html

0
ответ дан 19 February 2015 в 10:12

Ключи в X11 повторно отображаются с xmodmap, но в/usr/include/X11/keysymdef.h нет никакого Control_Lock

Если у Вас есть несколько ключей, Вы могли бы отобразить Управление на что-то как ISO_Next_Group_Lock и определить Ваши ключи в этой группе с Управлением + Ключ.

Я нашел некоторую информацию здесь: https://bbs.archlinux.org/viewtopic.php? id=75771

0
ответ дан 19 February 2015 в 10:12

Этого можно добиться с помощью компонента совместимости XKB

  1. Проверьте используемый вариант совместимости

    $ setxkbmap -v -query
    Trying to build keymap using the following components:
    keycodes:   evdev+aliases(qwerty)
    types:      complete
    compat:     complete
    symbols:    pc+us(altgr-intl)+us:2+inet(evdev)
    geometry:   pc(pc105)
    rules:      evdev
    model:      pc105
    layout:     us,us
    variant:    altgr-intl,
    
    $ more /usr/share/X11/xkb/compat/complete 
    default xkb_compatibility "complete"  {
        include "basic"
        augment "iso9995"
        augment "mousekeys"
        augment "accessx(full)"
        augment "misc"
        augment "xfree86"
        augment "level5"
        augment "caps(caps_lock)"
    };
    
  2. Изменить файл misc тот, который содержит необходимые интерпретаторы модификаторов

    sudo nano /usr/share/X11/xkb/compat/misc
    

    Я изменил Shift_L, Alt_L и amp; Alt_R действия с SetMods по LockMods, добавлены новые Shift_R, Control_L и amp; Control_R Интерпретация с LockMods и комментарий //setMods.clearLocks (не уверен, если это необходимо). Вот полный файл:

    default partial xkb_compatibility "misc"  {
    
        virtual_modifiers   Alt,Meta,Super,Hyper,ScrollLock;
    
        // Interpretations for some other useful keys
    
        interpret Terminate_Server {
            action = Terminate();
        };
    
        //setMods.clearLocks= True;
    
        // Sets the "Alt" virtual modifier
    
        interpret Alt_L+Any     {
            //useModMapMods= level1;
        virtualModifier= Alt;
        action = LockMods(modifiers=modMapMods);
        };
    
        interpret Alt_L {
        action = LockMods(modifiers=Alt);
        };
    
        interpret Alt_R+Any     {
            //useModMapMods= level1;
        virtualModifier= Alt;
        action = LockMods(modifiers=modMapMods);
        };
    
        interpret Alt_R {
        action = LockMods(modifiers=Alt);
        };
    
        // Sets the "Meta" virtual modifier
    
        interpret Meta_L+Any     {
    //        useModMapMods= level1;
        virtualModifier= Meta;
        action = SetMods(modifiers=modMapMods);
        };
    
        interpret Meta_L    {
        action = SetMods(modifiers=Meta);
        };
    
        interpret Meta_R+Any     {
            //useModMapMods= level1;
        virtualModifier= Meta;
        action = SetMods(modifiers=modMapMods);
        };
    
        interpret Meta_R    {
        action = SetMods(modifiers=Meta);
        };
    
        // Sets the "Super" virtual modifier
    
        interpret Super_L+Any     {
    //        useModMapMods= level1;
        virtualModifier= Super;
        action = SetMods(modifiers=modMapMods);
        };
    
        interpret Super_L   {
        action = SetMods(modifiers=Super);
        };
    
        interpret Super_R+Any     {
            //useModMapMods= level1;
        virtualModifier= Super;
        action = SetMods(modifiers=modMapMods);
        };
    
        interpret Super_R   {
        action = SetMods(modifiers=Super);
        };
    
        // Sets the "Hyper" virtual modifier
    
        interpret Hyper_L+Any     {
    //        useModMapMods= level1;
        virtualModifier= Hyper;
        action = SetMods(modifiers=modMapMods);
        };
    
        interpret Hyper_L   {
        action = SetMods(modifiers=Hyper);
        };
    
        interpret Hyper_R+Any     {
            //useModMapMods= level1;
        virtualModifier= Hyper;
        action = SetMods(modifiers=modMapMods);
        };
    
        interpret Hyper_R   {
        action = SetMods(modifiers=Hyper);
        };
    
        // Sets the "ScrollLock" virtual modifier and
        // makes it actually lock when pressed.  Sets
        // up a map for the scroll lock indicator.
        interpret Scroll_Lock+Any   {
        virtualModifier= ScrollLock;
        action = LockMods(modifiers=modMapMods);
        };
    
        include "ledscroll"
    
        include "misc(assign_shift_left_action)"
    };
    
    partial xkb_compatibility "assign_shift_left_action"  {
        // Because of the irrevertable modifier mapping in symbols/pc <LFSH> is 
        // getting bound to the Lock modifier when using 
        // symbols/shift(both_capslock), creating unwanted behaviour. 
        // This is a quirk, to circumvent the problem.
        interpret Shift_L {
            action = LockMods(modifiers = Shift);
        };
    
        interpret Shift_R {
            action = LockMods(modifiers = Shift);
        };
    
        interpret Control_L {
            action = LockMods(modifiers = Control);
        };
    
        interpret Control_R {
            action = LockMods(modifiers = Control);
        };
    
    };
    
  3. Скомпилируйте изменения & amp; обновить изображения initramfs

    sudo dpkg-reconfigure xkb-data
    sudo update-initramfs -u -k all
    
  4. Перезагрузить

Ссылки:

0
ответ дан 19 February 2015 в 10:12

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

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