在 CentOS 7 中首次成功登录之前如何设置登录屏幕的键盘布局?

在 CentOS 7 中首次成功登录之前如何设置登录屏幕的键盘布局?

我意识到通过添加

setxkbmap xxx

我们可以更改 X 服务器中的键盘布局。它无法在注销/重新启动后继续存在,因此我们可以添加此行$HOME/.profile以使其在登录时可用,如下所示这个问题描述。

但是,当我们这样做时,在登录之前,键盘布局仍然不可用。如果我们现阶段想要使用它,该怎么走呢?我在 Centos7 上使用 GDM。

我尝试过的:

  1. 定义一个新的键盘布局,命名为symmetri,并将其放在 下/usr/share/X11/xkb/symbols/。为了测试,你可以下载它这里注意:我只定义了 X11 服务器的布局,尚未定义虚拟控制台的布局。也许这就是为什么我不能列出它locatectl list-keymaps,既不loadkeys,也不触摸/etc/vconsole.conf

  2. setxkbmap symmetri使用它。已应用更改。将其放入/etc/profile.d/symmetri.sh用户配置文件中以使用它。

  3. 注销,当我尝试登录时,它停止工作并显示 QWERTY。

  4. 我使用 QWERTY 登录,然后我现在使用 Symmetri,因为脚本是在成功登录后获取的。

  5. 打开终端,我切换回usby setxkbmap 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.xml6. 你可以对和执行同样的操作base.lst,但我先这样做了,但不起作用。

7. 设置键盘布局:

setxkbmap symmetri

或者,要设置变体,请使用:

setxkbmap symmetri -variant non-prog 

localectl可以list-x11-keymap-layoutslist-x11-keymap-variants,但不能用它设置变体;只能setxkbmap

有了这个设置,现在重新启动后和首次登录前,你有了新的键盘布局(尽管该变体不会持续存在!只需要基本的布局就可以了!)但是,一旦成功登录,桌面管理器将接管,如果您没有在$HOME/.bashrc/ $HOME/.profile(对于单用户)/ /etc/profile.d/xxx.sh/ /etc/profile(对于所有用户)文件中配置新的键盘布局,您将不是注销并重新登录后即可获取新的键盘布局!!!!所以这些改变将仅有的在第一次成功登录之前坚持...您必须使用.bashrc或配置文件脚本来告诉X服务器:“不仅在登录之前,而且在登录之后我希望所有用户都可以使用它!”注意:通过此更改,即使您注销并更改用户,布局也将是更改后的布局,而不是qwerty(us).

真的令人沮丧......一定有一个更简单的方法,但我找不到它。

参考资料:(必读)

  1. http://people.uleth.ca/~daniel.odonnell/Blog/custom-keyboard-in-linuxx11

相关内容