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

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

是否有可能以及如何通过 Ubuntu 中的命令行可靠地收集当前键盘语言和/或布局?

我们已经尝试过不同的选择:

  1. localectlstatus);
  2. cat /etc/default/locale
  3. cat /etc/default/keyboard
  4. setxkbmap -query
  5. gsettings ...
  6. setxkbmap -print | grep xkb_symbolssetxkbmap -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


上述命令的输出:

$ localectl status

System Locale: LANG=en_US.UTF-8
   LC_NUMERIC=lt_LT.UTF-8
   LC_TIME=lt_LT.UTF-8
   LC_MONETARY=lt_LT.UTF-8
   LC_PAPER=lt_LT.UTF-8
   LC_NAME=lt_LT.UTF-8
   LC_ADDRESS=lt_LT.UTF-8
   LC_TELEPHONE=lt_LT.UTF-8
   LC_MEASUREMENT=lt_LT.UTF-8
   LC_IDENTIFICATION=lt_LT.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="lt_LT.UTF-8"                                                                                                                                                           
LC_TIME="lt_LT.UTF-8"                                                                                                                                                              
LC_MONETARY="lt_LT.UTF-8"                                                                                                                                                          
LC_PAPER="lt_LT.UTF-8"                                                                                                                                                             
LC_NAME="lt_LT.UTF-8"                                                                                                                                                              
LC_ADDRESS="lt_LT.UTF-8"                                                                                                                                                           
LC_TELEPHONE="lt_LT.UTF-8"                                                                                                                                                         
LC_MEASUREMENT="lt_LT.UTF-8"                                                                                                                                                       
LC_IDENTIFICATION="lt_LT.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,lt
options:    grp:alt_shift_toggle

$ setxkbmap -print | grep xkb_symbols

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

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

us

$ cat ~/.config/kxkbrc

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

所有这些命令都执行了两次(键盘语言/布局更改之前和之后) - 没有足够有用的输出。


然而:

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

00000000

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

00001000

考虑到它正在发生变化,这是一个正确且可靠的选择吗?

答案1

至于Ubuntu 17.10,我刚刚发现桌面会话中的当前键盘布局的保存方式不同。

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

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

当前的值 0(零)告诉我当前布局是来源列表。然而,在 17.10 中当前的如果我切换布局,值不会改变。

相反,17.10 包括mru-来源键,其中列出了原声r最近sed 输入源。因此,当瑞典语是我的当前布局时,它看起来像这样:

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

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

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

因此,当前布局只是mru-来源列表。

相关内容