Como obter o layout do teclado (idioma) no terminal (console, linha de comando) [closed]

1

É possível obter o layout de teclado atual na linha de comando? Eu já tentei de maneiras diferentes:

  1. localectl ( status ) etc.
  2. cat /etc/default/locale
  3. cat /etc/default/keyboard
  4. setxkbmap -query
  5. gsettings ...
  6. setxkbmap -print | grep xkb_symbols ( setxkbmap -v | awk -F "+" '/symbols/ {print }' )
  7. Tentou instalar xkblayout-state , mas não quer ser instalado ( make falha)

Então ... tudo isso mostra o mesmo evento de saída se o layout do teclado foi alterado para outro ... eles mostram layout nós . Btw eu tenho verificado dezenas de tópicos e nenhum resultado ... então por favor não marcá-lo como um duplicado. Vamos descobrir como alcançá-lo corretamente.

uname -a mostra Linux x4 4.4.0-97-generic #120-Ubuntu SMP Tue Sep 19 17:28:18 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

A distribuição é KDE Neon 5.8 , que é baseada no Ubuntu

O sistema de janelas é X11

A propósito, encontrei isto: xset -q | grep -A 0 'LED' | cut -c59-67 aqui . É claro como fazer isso?

As saídas dos comandos acima:

$ localectl status :

System Locale: LANG=en_US.UTF-8
   LC_NUMERIC=ru_RU.UTF-8
   LC_TIME=ru_RU.UTF-8
   LC_MONETARY=ru_RU.UTF-8
   LC_PAPER=ru_RU.UTF-8
   LC_NAME=ru_RU.UTF-8
   LC_ADDRESS=ru_RU.UTF-8
   LC_TELEPHONE=ru_RU.UTF-8
   LC_MEASUREMENT=ru_RU.UTF-8
   LC_IDENTIFICATION=ru_RU.UTF-8
 VC Keymap: n/a
X11 Layout: us
X11 Model: pc105

$ cat /etc/default/locale :

#  File generated by update-locale                                                                                                                                                 
LANG="en_US.UTF-8"                                                                                                                                                                 
LC_NUMERIC="ru_RU.UTF-8"                                                                                                                                                           
LC_TIME="ru_RU.UTF-8"                                                                                                                                                              
LC_MONETARY="ru_RU.UTF-8"                                                                                                                                                          
LC_PAPER="ru_RU.UTF-8"                                                                                                                                                             
LC_NAME="ru_RU.UTF-8"                                                                                                                                                              
LC_ADDRESS="ru_RU.UTF-8"                                                                                                                                                           
LC_TELEPHONE="ru_RU.UTF-8"                                                                                                                                                         
LC_MEASUREMENT="ru_RU.UTF-8"                                                                                                                                                       
LC_IDENTIFICATION="ru_RU.UTF-8"

$ cat /etc/default/keyboard :

# KEYBOARD CONFIGURATION FILE                                                                                                                                                      

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""

BACKSPACE="guess"

$ setxkbmap -query :

rules:      evdev
model:      pc101
layout:     us,ru
options:    grp:alt_shift_toggle

$ setxkbmap -print | grep xkb_symbols :

        xkb_symbols   { include "pc+us+ru:2+inet(evdev)+group(alt_shift_toggle)"        };

$ setxkbmap -v | awk -F "+" '/symbols/ {print }' :

us

$ cat ~/.config/kxkbrc :

[Layout]
DisplayNames=,
LayoutList=us,ru
LayoutLoopCount=-1
Model=pc101
Options=grp:alt_shift_toggle
ResetOldOptions=true
ShowFlag=false
ShowLabel=true
ShowLayoutIndicator=true
ShowSingle=false
SwitchMode=Global
Use=true

Todos esses comandos foram executados duas vezes (antes e depois da alteração do layout do teclado). Então não há resultado.

A propósito:

$ xset -q | grep -A 0 'LED' | cut -c59-67 (a língua inglesa está ativada):

00000000

$ xset -q | grep -A 0 'LED' | cut -c59-67 (o idioma russo está ativado):

00001000

Então ... como você vê, esta muda. Tudo em tudo é claro para obter layout atual?

    
por V.7 05.11.2017 / 18:21

1 resposta

2

Em relação ao Ubuntu 17.10 , acabei de descobrir que o layout atual do teclado em uma sessão de desktop é salvo de forma diferente.

Eu tenho um layout em sueco e inglês (EUA) disponível. Anteriormente eu poderia fazer:

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

O valor atual 0 (zero) me disse que o layout atual era o primeiro layout na lista fontes . No entanto, em 17.10 o valor atual não será alterado se eu mudar de layout.

Em vez disso, o 17.10 inclui a chave mru-sources , que lista o m ost r ecently u sed fontes de entrada. Portanto, quando o sueco é meu layout atual, é assim:

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

e se eu mudar para o inglês, será assim:

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

Portanto, o layout atual é simplesmente a primeira fonte de entrada na lista mru-sources .

    
por Gunnar Hjalmarsson 05.11.2017 / 23:53