如何从终端获取当前的 gnome 键盘布局?

如何从终端获取当前的 gnome 键盘布局?

为了在 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

这是你应该看到的

在此处输入图片描述

相关内容