Script para alternar o setxkbmap

8

Eu gostaria de um script bash que alterna entre: setxkbmap se e setxkbmap us .

Então minhas intenções são mapear esse script para Ctrl Esc através do teclado > atalhos personalizados.

O ponto é que eu quero mudar o layout do teclado com Ctrl Escape . Como posso implementar isso?

    
por Fredrik 01.09.2012 / 14:43

3 respostas

3

Não sei qual ambiente de área de trabalho você está executando, como você pode atribuir uma chave de atalho pode variar, mas esse script funciona globalmente, pelo menos no meu Ubuntu 12.04 box e Arch Linux :

#!/bin/bash

(setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us
    
por 01.09.2012 / 18:08
4

Existem várias respostas para semelhantes perguntas . No entanto, nenhum deles funciona de forma robusta para mim.

O script a seguir deve funcionar em todos os casos. Certamente funciona no meu sistema debian ao trocar layouts com setxkbmap :

#!/bin/bash
seven='xmodmap -pke | grep "keycode  16" | awk '{print \}'' 
## If this is the "us" layout
if [ $seven == "ampersand" ]; then
    setxkbmap se
else
  setxkbmap us
fi

O script analisa a saída do xmodmap para ver se o layout atual é "us" ou "se". No layout "us", SHIFT + 7 é mapeado para "e comercial". Se você apenas alternar entre os layouts "us" e "se", ter "e comercial" em 7 significa que você está usando o layout "us" e o script mudará para "se". Se você não tem "e comercial" em 7 , o script muda para "nós".

    
por 01.09.2012 / 16:30
4

a melhor maneira seria não usar um script, mas carregar um teclado de duas camadas (por exemplo: setxmodmap "us,se" ) e redefinir a Ctrl - Esc para enviar ISO_Next_Group

Veja este responda no xkb para saber como redefinir algumas teclas sem precisar editar os arquivos padrão principais (assim, não é necessário ser root). No arquivo de símbolos local (por exemplo: ~/.xkb/symbols/mysymbols ) coloque uma pequena seção como:

partial modifier_keys 
xkb_symbols "ctrl_esc_toggle" {
    key <ESC> {
        type[Group1]="PC_CONTROL_LEVEL2",
        symbols[Group1]= [ Escape,     ISO_Next_Group ]
    };
};

o PC_CONTROL_LEVEL2 informa que o símbolo sencond para essa chave é obtido com Control (em vez de Shift).

e no arquivo de mapa de teclado local (por exemplo: ~/.xkb/keymap/mykbd ; você pode criá-lo com setxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd ) altere a linha xkb_symbols para adicionar "mysymbols (ctr_esc_toggle)" então você terá algo como:

xkb_symbols   { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)"   };

(observe o "se: 2", o ": 2" informa para carregar as definições dos símbolos "se" como Grupo2; você pode empilhar vários grupos).

agora você pode carregá-lo com: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY então Ctrl-Esc alternará entre os layouts "us" e "se".

OBSERVE que você precisa pressionar Ctrl (e segurar) antes de Esc; Por outro lado, não funciona (seria necessário definir um modificador virtual para Escape e não sei como fazê-lo)

    
por 21.02.2013 / 12:53