如何从命令行更改键盘?

Eya*_*yal 74 keyboard internationalization

如何从命令行更改键盘布局?例如,我想从英语切换到希伯来语。我可以从 lightdm 使用屏幕角落的小图标来完成它。

Dr_*_*sen 61

您可以在以下位置找到所有不同的键盘映射:

/usr/share/keymaps/i386/
/usr/share/kbd/keymaps/i386/
/usr/share/X11/xkb/symbols/
Run Code Online (Sandbox Code Playgroud)

要在 Linux 命令行中更改键盘布局(例如,更改为西班牙语),请键入以下命令:

loadkeys es
Run Code Online (Sandbox Code Playgroud)

对于 X:

setxkbmap es
Run Code Online (Sandbox Code Playgroud)

要在系统范围内进行这些更改,假设您使用的是 Ubuntu,您可以使用以下命令:

sudo dpkg-reconfigure console-setup
Run Code Online (Sandbox Code Playgroud)

  • 是的,我会的,不用了,谢谢。只需标记为已解决,以便每个人都知道。 (2认同)

Nic*_*Tux 49

从终端

英语到希伯来语,反之亦然Alt+Shift

setxkbmap -option grp:alt_shift_toggle us,il
Run Code Online (Sandbox Code Playgroud)

您可以使用此命令查看所有语言环境别名

cat /etc/locale.alias
Run Code Online (Sandbox Code Playgroud)

手册中有关 setxkbmap 的更多信息

man setxkbmap
Run Code Online (Sandbox Code Playgroud)


use*_*.dz 13

Ubuntu 13.10 或更高版本

这比带有 Gnome/Unity 键盘布局指示器的 setxkbmap 效果更好。

gsettings set org.gnome.desktop.input-sources current 0
Run Code Online (Sandbox Code Playgroud)

0 是布局索引(0 默认或顶部布局)。从 0 开始索引的布局。

为方便使用,请创建别名。

  • 这在 GNOME 3.26 上不起作用。它说“此密钥已被弃用并被忽略”。 (4认同)
  • 这个答案是优越的,因为它实际上改变了指标。正是我一直在寻找的。 (3认同)

小智 12

setxkbmap us,il -option "lv3:ralt_alt,grp:alt_shift_toggle"
Run Code Online (Sandbox Code Playgroud)

此命令使您只能通过right alt+在英语和希伯来语之间切换,并shiftleft alt+ 中拯救您shift


ElT*_*966 6

在 18.04+ 中与 Gnome 一起使用gsettings,您可以添加键盘布局并从命令行桌面上的键盘布局切换器在它们之间进行切换。

  1. 当前键盘布局和选项:

    $ gsettings list-recursively org.gnome.desktop.input-sources
    org.gnome.desktop.input-sources show-all-sources false
    org.gnome.desktop.input-sources xkb-options ['terminate:ctrl_alt_bksp']
    org.gnome.desktop.input-sources per-window false
    org.gnome.desktop.input-sources current uint32 1
    org.gnome.desktop.input-sources mru-sources @a(ss) []
    org.gnome.desktop.input-sources sources [('xkb', 'es'), ('xkb', 'no')]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加键盘布局:

    $ gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us'), ('xkb', 'no'),('xkb','gr')]"
    $ gsettings get org.gnome.desktop.input-sources sources
    [('xkb', 'es'), ('xkb', 'no'), ('xkb', 'gr')]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从命令行更改当前键盘布局:

    $ gsettings set org.gnome.desktop.input-sources current 1
    
    Run Code Online (Sandbox Code Playgroud)

    由于我们现在有 3 种不同的语言,因此我们有从 0 到 2 的 3 个选择,其中 1 是西班牙语,2 是挪威语,3 是希腊语。因此,将上面的current设置为 1 会使挪威语成为当前的键盘布局。

  4. 列出所有可能的键盘布局:

    cat //usr/share/X11/xkb/rules/base.lst
    
    Run Code Online (Sandbox Code Playgroud)
  5. 使用键盘快捷键更改键盘布局:

    预先配置了键盘快捷键,用于更改键盘布局。目前的快捷方式:

    $ gsettings get org.gnome.desktop.wm.keybindings switch-input-source
    ['<Super>space']
    
    Run Code Online (Sandbox Code Playgroud)

可以使用 来设置新的快捷方式gsetting set,但请注意不要使用已在使用的快捷方式。列出所有正在使用的快捷方式:

$ gsettings list-recursively org.gnome.desktop.wm.keybindings
org.gnome.desktop.wm.keybindings cycle-windows-backward ['<Shift><Alt>Escape']
org.gnome.desktop.wm.keybindings minimize ['<Super>h']
org.gnome.desktop.wm.keybindings move-to-workspace-7 @as []
org.gnome.desktop.wm.keybindings move-to-workspace-8 @as []
org.gnome.desktop.wm.keybindings move-to-workspace-9 @as []
org.gnome.desktop.wm.keybindings move-to-monitor-left ['<Super><Shift>Left']
...
Run Code Online (Sandbox Code Playgroud)


byt*_*ter 5

似乎没有标准的 CLI 工具,但xkb-switch是一个小型的开源工具来完成这项工作。刚刚用 Ubuntu 16.04.4 LTS 对其进行了测试,它完美无缺。

$ xkb-switch       # display current group
ua
$ xkb-switch -l    # list groups
us
ua
$ xkb-switch -s us # switch to a named group
$
Run Code Online (Sandbox Code Playgroud)

这看起来比其他解决方案更好,因为它setxkbmap <name>破坏了所有选项,并且setxkbmap -layout <name>,虽然它保留了选项,但它仍然无法更改任务栏指示器或grp_ledif 设置。


警告

如果您~/.config/kxkbrc使用LayoutLoopCount(例如,它设置为小于 中列出的布局总数LayoutList),如下所示:

LayoutList=us,ua,th,de
LayoutLoopCount=2
Options=grp_led:scroll,grp:rwin_switch,compose:menu,lv3:ralt_switch,
        nbsp:level2,grp:rctrl_toggle,misc:typo
Run Code Online (Sandbox Code Playgroud)

然后xkb-switch只会让您在当前组中的布局之间切换。


在屏幕锁定时调用

我注意到你的评论:

就在我的屏幕保护程序打开之前,我想切换到英语,以便在我重新进入时可以轻松输入密码。

这正是我的目标,所以答案如下:
要做到这一点,您只需要将它包装成一个脚本钩子,dbus-monitor就像这里讨论的一样。