我意识到通过添加
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
两者都不。
答案1
您可以使用
localectl set-x11-keymap ***
这对于控制台和桌面来说将是永久的,更详细的配置可以在手册页上找到https://www.unix.com/man-page/centos/1/LOCALECTL/
答案2
@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 中,它位于/etc/
. 1 Strange 下。)
2. 在 的子节点末尾<layoutList>
添加这部分:
(根据需要修改,这只是一个模板)
<layout>
<configItem>
<name>symmetri</name>
<shortDescription>symmetri</shortDescription>
<description>Symmetri (CN, EN and ES)</description>
<languageList>
<iso639Id>us</iso639Id>
</languageList>
</configItem>
<variantList>
<variant>
<configItem>
<name>non-prog</name>
<shortDescription>non-prog</shortDescription>
<description>Symmetri for non-programmer (CN, EN and ES)</description>
<languageList>
<iso639Id>us</iso639Id>
</languageList>
</configItem>
</variant>
</variantList>
</layout>
如果您的键盘布局没有变体,<variantList>
则部分可以是自动关闭的,例如:<variantList />
。
注:iso639Id
应具有与 ISO 639-1 或 639-2 标准兼容的值。1参考文献 1 中也给出了完整的表格。并且,它必须符合您的区域设置。我设置English(U.S)
为我的系统语言,所以我us
在这里填写。
3.保存并打开.../X11/xkb/rules/evdev.lst
。
4. 在 的末尾! layout
添加布局的名称。喜欢:
symmetri Symmetri layout (CN, EN and ES)
5. 如果您的键盘布局有变体,请在 的末尾! variant
也添加它。
non-prog symmetri: non-programmer
变体的名称应与 xml 文件中的上述信息一致。 (当我测试时,localectl list-x11-keymap-variants
会仅有的读取此文件而不是读取 xml,应该是一个错误/bug。)
base.xml
6. 你可以对和执行同样的操作base.lst
,但我先这样做了,但不起作用。
7. 设置键盘布局:
setxkbmap symmetri
或者,要设置变体,请使用:
setxkbmap symmetri -variant non-prog
localectl
可以list-x11-keymap-layouts
和list-x11-keymap-variants
,但不能用它设置变体;只能setxkbmap
。
有了这个设置,现在重新启动后和首次登录前,你有了新的键盘布局(尽管该变体不会持续存在!只需要基本的布局就可以了!)但是,一旦成功登录,桌面管理器将接管,如果您没有在$HOME/.bashrc
/ $HOME/.profile
(对于单用户)/ /etc/profile.d/xxx.sh
/ /etc/profile
(对于所有用户)文件中配置新的键盘布局,您将不是注销并重新登录后即可获取新的键盘布局!!!!所以这些改变将仅有的在第一次成功登录之前坚持...您必须使用.bashrc
或配置文件脚本来告诉X服务器:“不仅在登录之前,而且在登录之后我希望所有用户都可以使用它!”注意:通过此更改,即使您注销并更改用户,布局也将是更改后的布局,而不是qwerty(us)
.
真的令人沮丧......一定有一个更简单的方法,但我找不到它。
参考资料:(必读)