Ang*_*gel 4 command-line keyboard-layout console
是否可以在命令行中获取当前的键盘布局?我已经尝试过不同的方法:
localectl
( status
) 等。cat /etc/default/locale
cat /etc/default/keyboard
setxkbmap -query
gsettings ...
setxkbmap -print | grep xkb_symbols
( setxkbmap -v | awk -F "+" '/symbols/ {print $2}'
)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)
所以......正如你所看到的那样。总而言之,这是获得当前布局的明确方法吗?
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列表中的第一个输入源。