fti*_*sem 16 command-line keyboard-layout
为了在 bash 脚本中使用,我需要获取用户当前使用的 gnome 键盘布局。例如,如果用户将其键盘布局设置为en-us,我需要一个 bash 命令来打印这个。
我怎样才能得到这些信息?
setxkbmap -query不幸的是没有工作。下面是激活en(第一个命令)和de(第二个命令)布局的输出。切换键盘布局似乎与 gnome 会话配置有关
setxkbmap -query
rules: evdev
model: pc105
layout: us,de
variant: ,
options: terminate:ctrl_alt_bksp,lv3:ralt_switch,grp:alts_toggle
setxkbmap -query
rules: evdev
model: pc105
layout: us,de
variant: ,
options: terminate:ctrl_alt_bksp,lv3:ralt_switch,grp:alts_toggle
Run Code Online (Sandbox Code Playgroud)
setxkbmap -print #with en-us layout
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+de:2+inet(evdev)+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+group(alts_toggle)+level3(ralt_switch)+terminate(ctrl_alt_bksp)" };
xkb_geometry { include "pc(pc105)" };
};
setxkbmap -print #after switching to german layout
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+de:2+inet(evdev)+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+group(alts_toggle)+level3(ralt_switch)+terminate(ctrl_alt_bksp)" };
xkb_geometry { include "pc(pc105)" };
};
Run Code Online (Sandbox Code Playgroud)
根据Stackoverflow上的一个类似问题,以下应该可以解决问题:
setxkbmap -print | grep xkb_symbols | awk '{print $4}' | awk -F"+" '{print $2}'
Run Code Online (Sandbox Code Playgroud)
我确实无法验证它,因为我目前没有带有 X 的 *nix 机器(我不在家)...
在 Ubuntu 17.10 中,使用 GNOME,切换输入源时不会更改当前的gsettings 值。取而代之的是一个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 | sed -r "s/\S*\s'([^']+).*/\1/"
Run Code Online (Sandbox Code Playgroud)
请注意,如果您在 Ubuntu 17.10 系统上使用 Unity,则此答案不适用。使用 Unity,它可以像以前一样继续工作。
只需按键盘上的Ctrl+ Alt+T打开终端。打开后,运行以下命令。
setxkbmap -query
Run Code Online (Sandbox Code Playgroud)
这就是你应该看到的
