Como altero o layout do teclado atualmente selecionado na linha de comando?

12

Eu tenho meus layouts de teclado (dois deles) e alterno entre eles configurados através do seguinte comando:

setxkbmap -layout us,ru -option -option "grp:lctrl_lshift_toggle,ctrl:nocaps"

Agora eu quero mudar para o uslayout, usando algum comando da linha de comando. Isso é possível?

Rogach
fonte

Respostas:

13

Você pode usar o xkb-switch ( -nalterna para o próximo layout):

xkb-switch -n

ou xkblayout-state (com set +1para contornar, no seu caso):

xkblayout-state set +1

ou xtede xautomation para simular Control_L+ Shift_Lpressionar / soltar a tecla:

xte 'keydown Control_L' 'keydown Shift_L' 'keyup Shift_L' 'keyup Control_L'
don_crissti
fonte
xkblayout-state é ótimo, obrigado! Eu apenas uso xkblayout-state set 1e instantaneamente obtenho uslayout.
Rogach 12/06
2

As pesquisas do Stack Exchange para kbdmap encontram esta página sem mencionar essa palavra. Para maior clareza, aqui está uma resposta (não exatamente adequada à tag X11 da pergunta, mas deve ajudar alguém)…

Quando limitado a um console virtual

- sem X.

kbdmap (1)

kbdmap, vidfont- front end para syscons e vt

… Permite fácil configuração dos mapas de teclado disponíveis…

Na verdade, é fácil e (para mim, mudar para um layout de teclado no Reino Unido) eficaz.

Ao usar o X

- por exemplo, com o TrueOS Desktop baseado no FreeBSD.

Da postagem 5 em Alterar layout do teclado? | Os fóruns do FreeBSD (03/08/2015):

kbdmapé para o console. setxkbmapé o utilitário que você deseja para o X11. ...

Há um aviso, por exemplo quando se muda para U Nited Unido:

$ kbdmap
kbdcontrol: getting keymap: Inappropriate ioctl for device
You are not on a virtual console - expect certain strange side-effects
lang_default = en
dialect = en_...UTF-8
lang_abk = en

…

keymap="uk.kbd"
$ 
Graham Perrin
fonte
1

Dependendo da distribuição dos layouts de teclado, o comando é

loadkeys <path/to/file>

loadkey /lib/kbd/keymaps/i386/qwerty/pt_PT.map.gz

Se eu me lembro bem. Verifique também a página de manual para carregar chaves, se desejar atribuir chaves específicas a comportamentos específicos.

BitsOfNix
fonte
O problema é que depois de eu fazer (por exemplo) loadkeys us, ele redefine as configurações que eu criei com setxkbmap (dois layouts e alternar entre eles)
Rogach
Até onde eu sei, esse é o comando para alterar os layouts, se você tiver um específico, acho que a melhor maneira seria ter um apelido em seu shell que chamaria as teclas de carregamento com suas configurações. ex: load_us carregaria o teclado americano e, na verdade, chamaria a loadkey /lib/kbd/keymaps/i386/qwerty/us.map.gz ou similar. E o mesmo para o outro layout.
BitsOfNix
Mas como eu mudaria as configurações do teclado depois? Atualmente, altero os layouts pressionando Ctrl-Shift, usando as teclas de carga.
Rogach
vamos dar um passo para trás aqui, na linha de comando, estou assumindo que você está mencionando um terminal tty. Significa que você não está usando o xterm / terminology / gnome-terminal ou qualquer outro emulador, mas na verdade você está em um ambiente sem o servidor X. Tomando isso, então você precisa usar as teclas de carga, conforme sua pergunta, eu lhe dei a linha de comando, o que você realmente quer parece ser um atalho de tecla. Se você tiver chaves específicas a serem mapeadas, precisará criar seus próprios layouts e carregá-las em uma solicitação com as chaves de carregamento do ponto de vista do CLI. Se você deseja um atalho, atualize sua pergunta.
BitsOfNix
Não, de fato, estou usando o ambiente gráfico e o gnome-terminal em particular. É só que eu preciso alterar o layout do X programaticamente, em reação a alguns eventos - assim, coisas tty não vão funcionar.
Rogach
0

Dê uma olhada neste artigo do howto forge intitulado: Alterando o idioma e o layout do teclado em várias distribuições , para os vários comandos para alterar o layout do teclado em diferentes distros.

A maioria desses comandos se apresenta como GUIs, mas se você procurar a maioria deles também pode ser executada na linha de comando. Por exemplo, estou usando o Fedora (uma distribuição baseada no Red Hat). O comando system-config-keyboardquando executado sem argumentos me mostra uma GUI.

Mas se eu executar, system-config-keyboard --helptambém pode ser executado na linha de comando:

$ system-config-keyboard --help
Usage: system-config-keyboard [--help] [--noui] [--text] [<keyboardtype>]
       --help            Print out this message.
       --noui            Run in command line mode.
       --text            Run in text interface mode.

       <keyboardtype> options are: ar-azerty, ar-azerty-digits, ar-digits, ar-qwerty, ar-qwerty-digits, be-latin1, ben, ben-probhat, bg_bds-utf8, bg_pho-utf8, br-abnt2, cf, croat, cz-lat2, cz-us-qwertz, de, de-latin1, de-latin1-nodeadkeys, dev, dk, dk-latin1, dvorak, es, et, fi, fi-latin1, fr, fr-latin1, fr-latin9, fr-pc, fr_CH, fr_CH-latin1, gr, guj, gur, hu, hu101, ie, is-latin1, it, it-ibm, it2, jp106, ko, la-latin1, mk-utf, nl, no, pl2, pt-latin1, ro, ro-cedilla, ro-std, ro-std-cedilla, ru, sg, sg-latin1, sk-qwerty, slovene, sr-cy, sr-latin, sv-latin1, tj, tml-inscript, tml-uni, trq, ua-utf, uk, us, us-acentos

Então, para alterar meu layout de teclado para russo, eu poderia executar o seguinte comando:

$ system-config-keyboard ru
slm
fonte