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

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)

更新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)" };
};
Run Code Online (Sandbox Code Playgroud)

Izz*_*zzy 9

根据Stackoverflow上的一个类似问题,以下应该可以解决问题:

setxkbmap -print | grep xkb_symbols | awk '{print $4}' | awk -F"+" '{print $2}'
Run Code Online (Sandbox Code Playgroud)

我确实无法验证它,因为我目前没有带有 X 的 *nix 机器(我不在家)...

  • 感谢您的回答。不幸的是,这并没有奏效。两次我都得到了我们。我已经编辑了我的问题以向您展示输出。 (2认同)

Gun*_*son 5

对于 Ubuntu 17.10 或更高版本

在 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,它可以像以前一样继续工作。


Mit*_*tch 1

只需按键盘上的Ctrl+ Alt+T打开终端。打开后,运行以下命令。

setxkbmap -query
Run Code Online (Sandbox Code Playgroud)

这就是你应该看到的

在此输入图像描述