为了在 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
更新2:
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)" };
};
答案1
根据类似的问题堆栈溢出,下面应该可以解决问题:
setxkbmap -print | grep xkb_symbols | awk '{print $4}' | awk -F"+" '{print $2}'
我无法验证这一点,因为我目前没有可用的带有 X 的 *nix 机器(我不在家)...
答案2
对于 Ubuntu 17.10 或更高版本
在 Ubuntu 17.10 中,使用 GNOME,当前的切换输入源时,gsettings 值不会改变。相反,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 | sed -r "s/\S*\s'([^']+).*/\1/"
请注意,如果您在 Ubuntu 17.10 系统上使用 Unity,则此答案不适用。使用 Unity,它可以像以前一样继续工作。
答案3
对于 Ubuntu 13.04 及更低版本
您可以使用xkblayout-state
工具。请参阅自述文件.md文件的描述、编译、安装和使用。
以下命令将准确执行您想要的操作:
xkblayout-state print "%s"
对于 Ubuntu 13.10 及更高版本
Ubuntu 13.10 在这方面做出了一些很好的改进,您可以使用以下简单的 bash 函数:
get_current_xkblayout () {
current_input_nr=$(gsettings get org.gnome.desktop.input-sources current | \
awk '{ print $NF }')
shift=$(( 2 * ( $current_input_nr + 1 )))
gsettings get org.gnome.desktop.input-sources sources | tr -d "\',[]()" | \
awk -v cur="$shift" '{ print $cur }'
}
以下命令在 13.10 中也有效:
setxkbmap -query | awk -F"(,|[ ]+)" '/layout:/ { print $2 }'
或者:
setxkbmap -print | awk -F"+" '/xkb_symbols/ {print $2}'
答案4
只需按下键盘上的Ctrl+ Alt+T即可打开终端。打开后,运行以下命令。
setxkbmap -query
这是你应该看到的