我意识到通过添加
setxkbmap xxx
我们可以更改 X 服务器中的键盘布局。它无法在注销/重新启动后继续存在,因此我们可以添加这一行$HOME/.profile
以使其在登录时可用,正如这个问题所描述的那样。
但是,当我们这样做时,在登录之前,键盘布局仍然不可用。如果我们想在这个阶段使用它,那么要走的路是什么?我在 Centos7 上使用 GDM。
我试过的:
定义一个新的键盘布局,命名为
symmetri
,并将其放在/usr/share/X11/xkb/symbols/
. 要测试,您可以在此处下载。注意:我只定义了 X11 服务器的布局,还没有定义虚拟控制台的布局。也许这就是为什么我不能用locatectl list-keymaps
,既不loadkeys
,也不感人的方式列出它/etc/vconsole.conf
。setxkbmap symmetri
使用它。已应用更改。将其放入/etc/profile.d/symmetri.sh
用户配置文件中使用。注销,当我尝试登录时,它停止工作,我得到 QWERTY。
我使用 QWERTY 登录,然后我现在使用 Symmetri,因为脚本是在成功登录后获取的。
打开终端,我切换回
us
bysetxkbmap us
,
接着,
localectl set-x11-keymap symmetri
这一次,布局没有切换。localectl set-keymap symmetri
两者都不。
您可以使用
这对于控制台和桌面将是永久的,更详细的配置可以在手册页https://www.unix.com/man-page/centos/1/LOCALECTL/中找到
@terdon 您的解决方案不起作用,但感谢您帮助我,我学到了更多;一开始我也怀疑是不是和Gnome有关,结果发现只有X11。而且@TimBrandrick,您的解决方案应该在大多数情况下都有效,但在我的情况下,不是在将我的键盘布局添加到之前
.../X11/xkb/rules/evdev.xml
(并且以防万一.../X11/xkb/rules/evdev.lst
,因为根据某些消息来源,该lst
文件是的编译版本xml
,但我怀疑是否所有依赖这些文件的进程都只会读取xml
文件;所以我都添加了。实际上,xml
信息比lst
, 但lst
更容易理解。)所以,我是这样做的:
1. 打开
.../X11/xkb/rules/evdev.xml
。(我省略了开头部分,因为它在发行版之间有所不同。在 CentOS 7 中,它在
/usr/share/
; 在 Ubuntu <= 8.08 中,它在.1 Strange 之下。/etc/
)2. 在 的子节点末尾
<layoutList>
添加这部分:(根据需要更改,它只是一个模板)
如果您的键盘布局没有变体,
<variantList>
则部分可以自动关闭,例如:<variantList />
.注意:
iso639Id
应该具有与 ISO 639-1 或 639-2 标准兼容的值。1参考文献 1 中也给出了完整的表格。而且,它必须符合您的区域设置。我设置English(U.S)
为我的系统语言,所以我us
在这里填写。3. 保存,打开
.../X11/xkb/rules/evdev.lst
。4. 在末尾
! layout
,添加您的布局名称。喜欢:5. 如果您的键盘布局有变体,请在 的末尾也
! variant
添加它。变体的名称应与上述 xml 文件中的信息一致。(正如我测试的那样,只会
localectl list-x11-keymap-variants
读取这个文件而不是读取 xml,应该是一个错误/错误。)6.你可以对
base.xml
and做同样的事情base.lst
,但我先做了,它不起作用。7. 设置您的键盘布局:
或者,要设置变体,请使用:
localectl
可以list-x11-keymap-layouts
和list-x11-keymap-variants
,但不能用它设置变体;只能setxkbmap
。有了这个设置,现在在重新启动之后和第一次登录之前,你就有了新的键盘布局(虽然变体不会保留!!只有基本布局会保留!)但是,一旦成功登录,桌面管理器将接管,如果你不要在
$HOME/.bashrc
/$HOME/.profile
(for single user)//etc/profile.d/xxx.sh
//etc/profile
(for all users) 文件中配置新的键盘布局,一旦注销并重新登录,您将无法获得新的键盘布局!!!!所以这些更改只会在第一次成功登录之前持续存在......你必须使用.bashrc
或配置文件脚本告诉 X 服务器:“不仅在登录之前,而且在登录后我希望所有用户都使用它!” 小心:通过此更改,即使您注销并更改用户,布局也将是更改后的布局,而不是qwerty(us)
.真令人沮丧....必须有一个更简单的方法,但我找不到它。
参考资料:(必读)