Deixar as teclas modificadoras agirem como alternadas em X

5

Existe alguma maneira de permitir que as teclas Shift , Ctrl e Alt se comportem como alternadas em X? Eu sei como alguém poderia fazer isso sob o CLI (por exemplo, fazendo este ) mas encontrado nenhuma referência para fazer isso em X.

Por favor, note que isso não é uma pergunta sobre as chaves, que podem ser ativadas por uma opção de acessibilidade.

    
por Gödel 13.10.2010 / 01:11

3 respostas

1

Isso é implementado no nível de DE AFAIK. O KDE tem a opção de bloquear as teclas de aderência:

  

Com as teclas de bloqueio ativadas ativadas:

     

Se você pressionar a tecla Shift duas vezes, pressione a tecla F , o computador   interpreta isso como Shift + F . Agora se você   digite um P, o computador interpreta isso   como a letra P ( Shift + P ). Para   desmarque a tecla Shift, pressione-a   novamente.

link

    
por scottl 18.10.2010 / 12:30
0

As chaves no X11 são remapeadas com xmodmap, mas não há Control_Lock em /usr/include/X11/keysymdef.h

Se você tiver algumas chaves, poderá mapear o Controle para algo como ISO_Next_Group_Lock e defina suas chaves neste grupo com Controle + Chave .

Encontrei algumas informações aqui: link

    
por sroecker 15.10.2010 / 20:49
0

Isso pode ser alcançado usando o componente de compatibilidade XKB

  1. Verifique a variante de compatibilidade que você está usando

    $ 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. Modifique o arquivo misc , aquele que contém as interpretações necessárias dos modificadores

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

    Alterei Shift_L , Alt_L & amp; Alt_R de ação de SetMods a LockMods , adicionado novo Shift_R , Control_L & amp; Control_R interpretação com LockMods e comentado //setMods.clearLocks (não tenho certeza se é necessário). Aqui está o arquivo completo:

    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. Compile a alteração & amp; atualize as imagens do initramfs

    sudo dpkg-reconfigure xkb-data
    sudo update-initramfs -u -k all
    
  4. Reinicializar

Referências:

por user.dz 19.02.2015 / 00:30