如何从命令行获取当前的键盘布局?

如何从命令行获取当前的键盘布局?

如何在所有发行版的命令行中获取当前的键盘布局?是否可以 ?

例如,xset -q | grep LED | awk '{ print $10; }'在本地使用不同的键盘布局显示不同的输出,但我问过其他人,我注意到对于他们来说,即使他们的布局发生了变化,它也会显示相同的输出。有可能吗,还是他们做错了什么?有没有一种清晰/正确的方法来获取当前精确的键盘布局?

我开始话题了这里,但很明显,解决方案取决于分布。在那里你可以看到我已经尝试了很多变体来获得这个,但只是xset有效。

顺便问一下,您会为每个发行版使用什么命令?例如,在一个脚本中,该脚本将执行它以根据发行版获取当前的键盘布局。或者,哪个命令将输出当前的Fedora、KDE ​​Neon、Ubuntu、Debian、Arch 或 Gentoo 等的切换布局?

答案1

您没有找到解决方案的原因是没有解决方案。如果您指的是“美国 QWERTY 布局”之类的内容,则不存在“当前键盘布局”之类的东西。键盘布局不必是任何特定的预定义布局。明确描述它的唯一方法是转储整个映射集(您可以使用xkbcomp :0 -)。

您可以查看在这个或那个配置界面中配置了哪种布局。所有这些都会告诉您在该特定界面中配置了哪种布局。它不会告诉您此布局是否是最新的。用户可能使用了不同的界面来更改布局,或者可能使用xmodmap或等工具设置了完全自定义的键盘映射xkbcomp

您得到的输出setxkbmap -query尽可能接近。它从 X 服务器获取信息,因此您不会遇到可能已应用或未应用的配置文件的问题。但是,有两种方法可以告诉 X 服务器更改键盘布局:通过给出布局名称(和选项),或通过设置单独的键。如果setxkbmap -queryus,则意味着上次有人成功请求 X 服务器加载特定布局时,该请求是加载该us布局。但如果随后请求更改各个按键的配置,那么布局现在可能会完全不同。

没有人做错事。只是系统中一般不存在“当前布局”的概念,因为键盘布局不一定是预定义的布局。

答案2

看来这更多地取决于当前的窗口管理器而不是发行版。在 GNOME 上(可能在所有使用 dconf 数据库的发行版上(GNOME、MATE/GNOME2、XFCE、Unity))您可以从返回的数组的第一个元素获取当前布局

gsettings get org.gnome.desktop.input-sources mru-sources

这可能是所有发行版/WM 脚本的开始。可以使用基于 的开关wmctrl -m,该开关将在EWMH/NetWM 兼容的 X Window Manager(示例包括 Enlightenment、icewm、kwin、metacity 和 sawfish)

相关信息

  • 获取图形图表我使用这个别名:

    alias current_keyboard_layout_chart=$'gkbd-keyboard-display -l $(localectl status | awk \'/X11 Layout/ {print $3}\')$\'\t\'$(localectl status | awk \'/X11 Variant/ {print $3}\')'
    
  • 生成布局的 PDF

    xkbprint -color "${DISPLAY}" - | ps2pdf - > current_keyboard_layout.pdf
    
  • 其他方法

    # systemd
    localectl status
    # GNOME
    gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval  "imports.ui.status.keyboard.getInputSourceManager().currentSource.id"
    # KDE
    qdbus org.kde.keyboard /Layouts getCurrentLayout
    # x11-xkb-utils (old)
    setxkbmap -query; setxkbmap -print
    

答案3

恐怕 Linux 中的 DE 环境是如此多样化,以至于您无法找到适用于的单一解决方案

Fedora,适用于 KDE Neon、Ubuntu、Debian、Arch 或 Gentoo 等?

但是,如果“当前键盘布局”是指检索 GNOME Shell 用户会话的当前键盘布局,那么我可能为您提供合适的解决方案:什里乌克(也可以@GitHub:疯子/shyriiwook)。这是一个 GNOME Shell 扩展,我是它的作者。

这是一个非常简单、简约的扩展。它没有任何 GUI。安装后,新的 D-Bus 接口将在您的 GNOME Shell 会话中公开。您可以查询它的当前配置或调用一个方法来激活所需的布局,就是这样:

$ gdbus introspect \
    --session \
    --dest org.gnome.Shell \
    --object-path /me/madhead/Shyriiwook \
    --only-properties

node /me/madhead/Shyriiwook {
  interface me.madhead.Shyriiwook {
    properties:
      readonly as availableLayouts = ['us', 'de', 'jp'];
      readonly s currentLayout = 'us';
  };
};

$ gdbus call \
    --session \
    --dest org.gnome.Shell \
    --object-path /me/madhead/Shyriiwook \
    --method me.madhead.Shyriiwook.activate "de"

相关内容