如何从命令行更改键盘?


64

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

Answers:



51

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

/usr/share/keymaps/i386/
/usr/share/kbd/keymaps/i386/
/usr/share/X11/xkb/symbols/

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

loadkeys es

对于X:

setxkbmap es

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

sudo dpkg-reconfigure console-setup

这对tty1,tty2等有影响,但在X中没有影响。我想在X中做,就像lightdm中的键盘切换器一样。
2012年

我在答案中添加了一条命令,这就是您想要的吗?
Dr_Bunsen

是!谢谢。另外,您是否可以更新答案以提及带有“ s”的负载键?
2012年

2
是的,我会的,不用了,谢谢。只需标记为已解决,以便所有人都知道。
Dr_Bunsen

对于Redhat用户而言,以下是有价值的部分:/usr/share/X11/xkb/symbols/setxkbmap es
Peter Butkovic

13

Ubuntu 13.10或更高版本

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

gsettings set org.gnome.desktop.input-sources current 0

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

为了易于使用,请创建一个别名。


2
这个答案是优越的,因为它实际上改变了指标。正是我一直在寻找的东西。
Ainar-G

1
谢谢。在这里也使用了您的答案:askubuntu.com/a/984981/6193
Alexey

3
这在GNOME 3.26上不起作用。它说:“此密钥已被弃用和忽略”。
hugomg '18

@hugomg,现在我还没有访问新的gnome。但您可以尝试使用dconf-editor工具并检查/org/gnome/desktop/。他们可能只是将其重命名。
user.dz

12
setxkbmap us,il -option "lv3:ralt_alt,grp:alt_shift_toggle"

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


3

似乎没有标准的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
$

这看起来比其他解决方案更好,因为会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

那么xkb-switch只会让您在当前组的布局之间切换。


调用屏幕锁定

我注意到您的评论:

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

这正是我的目标,因此,这就是答案:
为此,您只需要将其包装到一个脚本中即可,dbus-monitor就像这里讨论的那样。


3

在Gnome中使用18.04+中的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')]

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')]

3.从命令行更改当前键盘布局:

$ gsettings set org.gnome.desktop.input-sources current 1

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

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

cat //usr/share/X11/xkb/rules/base.lst

5.使用键盘快捷键更改键盘布局:

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

$ gsettings get org.gnome.desktop.wm.keybindings switch-input-source
['<Super>space']

可以使用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']
...

这是最全面的答案,对此表示敬意。
朱利安·查普伊斯

1

对于Ubuntu 18.04 + Gnome,其他答案对我不起作用,但这确实可行:

gdbus call --session --dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval \
 "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"

“ inputSources [0]”中的参数是键盘布局的索引,与gsettings解决方案相同。

Linux StackExchange上找到它。


-1

出于好奇,您为什么要这样做?当您可以通过简单的键盘快捷键进行操作时,为什么还要打开终端并输入命令来切换键盘布局!假设您使用Ubuntu,它会变成Windows+Space


2
这似乎更多是评论,而不是答案。
WinEunuuchs2Unix

我的屏幕打开右键之前,我想切换到英语,所以,这将是容易输入我的密码,当我回去。
的Eyal

这对于制作自定义键盘快捷键也很有用
Vassilis

这在virtualbox上的Ubuntu 16.04中不起作用。
Juha Untinen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.