Como obter o layout do teclado do gnome atual do terminal?

9

Para uso em um script bash, eu preciso pegar o layout do teclado do gnome que o usuário está usando atualmente. Por exemplo, se o usuário definir seu layout de teclado como en-us , eu preciso de um comando bash que me imprima isso.

Como posso obter essa informação?

Atualização:

setxkbmap -query infelizmente não está funcionando. Abaixo está a saída com o layout en (primeiro comando) e de (segundo comando) ativado. Mudar o layout do teclado parece ter alguma relação com a configuração da sessão do gnome

setxkbmap -query 
rules:      evdev
model:      pc105
layout:     us,de
variant:    ,
options:    terminate:ctrl_alt_bksp,lv3:ralt_switch,grp:alts_toggle

setxkbmap -query
rules:      evdev
model:      pc105
layout:     us,de
variant:    ,
options:    terminate:ctrl_alt_bksp,lv3:ralt_switch,grp:alts_toggle

Update2:

setxkbmap -print #with en-us layout
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+de:2+inet(evdev)+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+group(alts_toggle)+level3(ralt_switch)+terminate(ctrl_alt_bksp)"    };
    xkb_geometry  { include "pc(pc105)" };
};
setxkbmap -print #after switching to german layout
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+de:2+inet(evdev)+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+group(alts_toggle)+level3(ralt_switch)+terminate(ctrl_alt_bksp)"    };
    xkb_geometry  { include "pc(pc105)" };
};
    
por ftiaronsem 25.06.2012 / 19:50

6 respostas

9

De acordo com uma pergunta semelhante em Stackoverflow , o seguinte deve fazer o truque:

setxkbmap -print | grep xkb_symbols | awk '{print }' | awk -F"+" '{print }'

Eu não pude verificá-lo, pois atualmente não tenho uma máquina * nix com X disponível (não estou em casa) ...

    
por Izzy 02.07.2012 / 15:14
3

Para o Ubuntu 13.04 e inferior

Você pode usar a ferramenta xkblayout-state . Veja o arquivo README.md para descrição, compilação, instalação e uso.

O comando a seguir fará exatamente o que você deseja:

xkblayout-state print "%s"

Para o Ubuntu 13.10 e superior

O Ubuntu 13.10 veio com algumas boas melhorias nesse sentido, e você pode usar a seguinte função bash simples:

get_current_xkblayout () {
      current_input_nr=$(gsettings get org.gnome.desktop.input-sources current | \
          awk '{ print $NF }')
      shift=$(( 2 * ( $current_input_nr + 1 )))
      gsettings get org.gnome.desktop.input-sources sources | tr -d "\',[]()" | \
          awk -v cur="$shift" '{ print $cur }'
}

Os seguintes comandos também funcionam no 13.10:

setxkbmap -query | awk -F"(,|[ ]+)" '/layout:/ { print  }'

ou:

setxkbmap -print | awk -F"+" '/xkb_symbols/ {print }'
    
por Radu Rădeanu 01.11.2013 / 08:28
2

Basta pressionar Ctrl + Alt + T no seu teclado para abrir o Terminal. Quando se abre, execute o comando abaixo.

setxkbmap -query

Isso é o que você deve ver

    
por Mitch 25.06.2012 / 20:14
2

Usando o terminal, executei um teste de alteração entre 'pt' e 'us' e, após cada alteração, coletei o layout do teclado usado com sucesso:

Obtenha o layout de teclado ativo

setxkbmap -print | grep xkb_symbols | awk -F"+" '{print }'
  • Imprimir a configuração: setxkbmap -print
  • Colete a linha que importa: grep xkb_symbols
  • obtém a string após o primeiro sinal "+": awk -F"+" '{print }'

A saída com layout 'us' ativo é: us

Swith entre layouts

sudo setxkbmap -option grp:alt_shift_toggle pt

Passe onde está escrito 'pt', o código do idioma para mudar para.

Nota: estou usando o Gnome no Ubuntu 12.04 (Precise Pangolin)

    
por Zuul 02.07.2012 / 19:44
1

Para o Ubuntu 17.10 ou posterior

No Ubuntu 17.10, com o GNOME, o valor atual gsettings não é alterado quando você alterna a fonte de entrada. Em vez disso, existe uma chave mru-sources que lista as fontes de entrada sed m ost r ecently u .

$ gsettings get org.gnome.desktop.input-sources mru-sources
[('xkb', 'se'), ('xkb', 'us')]

A primeira fonte nessa lista é a atual, então um oneliner para obter o layout atual pode ser assim:

gsettings get org.gnome.desktop.input-sources mru-sources | sed -r "s/\S*\s'([^']+).*//"

Por favor, note que esta resposta não se aplica se você usar o Unity em um sistema Ubuntu 17.10. Com o Unity, ele continua funcionando como antes.

    
por Gunnar Hjalmarsson 06.11.2017 / 01:30
0

Para o Ubuntu 13.10 ou posterior

(Não tenho certeza se funciona nas versões anteriores)

current_layout=gsettings get org.gnome.desktop.input-sources current | awk '{print }'
gsettings get org.gnome.desktop.input-sources sources | grep -Po "'[[:alpha:]]+'\)" | sed -ne "s/['|)]//g;$(($current_layout+1))p"

Para ver mais opções:

gsettings list-recursively org.gnome.desktop.input-sources
    
por user.dz 01.02.2014 / 14:36