如何在终端(控制台、命令行)中获取键盘布局(语言)

Ang*_*gel 4 command-line keyboard-layout console

是否可以在命令行中获取当前的键盘布局?我已经尝试过不同的方法:

  1. localectl( status) 等。
  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 $2}')
  7. 尝试安装xkblayout-state,但不想安装(make失败)

所以......如果键盘布局更改为另一个,所有这些都显示相同的输出事件......它们向我们展示布局。顺便说一句,我已经检查了十几个主题,但没有结果......所以请不要将其标记为重复。让我们找出如何正确实现它。

uname -a 显示 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

发行版KDE Neon 5.8基于 Ubuntu

窗户系统是 X11

顺便说一下,我发现了这个:xset -q | grep -A 0 'LED' | cut -c59-67 here。这样做有明确的方法吗?


上述命令的输出:

$ 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
Run Code Online (Sandbox Code Playgroud)

$ 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"
Run Code Online (Sandbox Code Playgroud)

$ cat /etc/default/keyboard

# KEYBOARD CONFIGURATION FILE                                                                                                                                                      

# Consult the keyboard(5) manual page.

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

BACKSPACE="guess"
Run Code Online (Sandbox Code Playgroud)

$ setxkbmap -query

rules:      evdev
model:      pc101
layout:     us,ru
options:    grp:alt_shift_toggle
Run Code Online (Sandbox Code Playgroud)

$ setxkbmap -print | grep xkb_symbols

        xkb_symbols   { include "pc+us+ru:2+inet(evdev)+group(alt_shift_toggle)"        };
Run Code Online (Sandbox Code Playgroud)

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

us
Run Code Online (Sandbox Code Playgroud)

$ 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
Run Code Online (Sandbox Code Playgroud)

所有这些命令都运行了两次(在键盘布局更改之前和之后)。所以没有结果。


顺便一提:

$ xset -q | grep -A 0 'LED' | cut -c59-67 (启用英语):

00000000
Run Code Online (Sandbox Code Playgroud)

$ xset -q | grep -A 0 'LED' | cut -c59-67 (俄语已启用):

00001000
Run Code Online (Sandbox Code Playgroud)

所以......正如你所看到的那样。总而言之,这是获得当前布局的明确方法吗?

Gun*_*son 6

As regards Ubuntu 17.10, I just figured out that the current keyboard layout in a desktop session is saved differently.

我有可用的瑞典语和英语(美国)布局。以前我可以这样做:

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

电流值为0(零)告诉我,目前的布局是在第一个布局列表。但是,在 17.10 中,如果我切换布局,当前值不会改变。

相反,17.10包括MRU-源键,它列出了OST ř ecently ù sed的输入源。因此,当瑞典语是我当前的布局时,它看起来像这样:

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

如果我切换到英语,它看起来像这样:

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

所以当前布局只是mru-sources列表中的第一个输入源。