Para uso em um script bash, preciso obter o layout do teclado gnome que o usuário está usando no momento. Por exemplo, se o usuário definir seu layout de teclado en-us
, preciso de um comando bash que me imprima isso.
Como posso obter essa informação?
Atualizar:
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)" };
};
command-line
keyboard-layout
ftiaronsem
fonte
fonte
Respostas:
De acordo com uma pergunta semelhante no Stackoverflow , o seguinte deve fazer o truque:
Não consegui verificar, pois atualmente não tenho uma máquina * nix com o X disponível (não estou em casa) ...
fonte
xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+us+inet(evdev)" }; xkb_geometry { include "pc(pc105)" }; };
-v
parâmetro (várias vezes), o que aumenta a verbosidade e, portanto, fornece mais informações. Deve funcionar para ambos,-query
bem como-print
. Como não tenho configuração de vários idiomas, não sei dizer se ele fornece os detalhes necessários - mas com três vezes a-v
saída aqui é dividida em "regras aplicadas" e "mapa de teclas". A última parece ser a informação completa; portanto, a primeira parte pode ter a "parte atualmente ativa".Para Ubuntu 17.10 ou posterior
No Ubuntu 17.10, com o GNOME, o valor atual de gsettings não é alterado quando você alterna a fonte de entrada. Em vez disso existe um mru-fontes chave que lista o m ais r ecentemente u sed fontes de entrada.
A primeira fonte dessa lista é a atual, portanto, um oneliner para obter o layout atual pode ser assim:
Observe que esta resposta não se aplica se você usar o Unity em um sistema Ubuntu 17.10. Com o Unity, ele continua trabalhando como anteriormente.
fonte
Para o Ubuntu 13.04 e inferior
Você pode usar a
xkblayout-state
ferramenta. Veja o arquivo README.md para descrição, compilação, instalação e uso.O comando a seguir fará exatamente o que você deseja:
Para Ubuntu 13.10 e superior
O Ubuntu 13.10 veio com algumas boas melhorias nesse sentido, e você pode usar a seguinte função simples do bash:
Os seguintes comandos também funcionam na 13.10:
ou:
fonte
Basta pressionar Ctrl+ Alt+ Tno teclado para abrir o Terminal. Quando abrir, execute o comando abaixo.
Isto é o que você deve ver
fonte
Usando o terminal, executei um teste alterando entre 'pt' e 'us' e, após cada alteração, coletei o layout do teclado sendo usado com êxito:
Obtenha o layout de teclado ativo
setxkbmap -print
grep xkb_symbols
awk -F"+" '{print $2}'
A saída com o layout 'us' ativo é:
us
Swith entre layouts
Passe para onde está escrito 'pt', o código do idioma para o qual alternar.
Nota: Estou usando o Gnome no Ubuntu 12.04 (Precise Pangolin)
fonte
Para Ubuntu 13.10 ou posterior
(Não tenho certeza se funciona em versões anteriores)
Para ver mais opções:
fonte