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. usターミナルを開き、に切り替えますsetxkbmap us

その後、

localectl set-x11-keymap symmetri

今回はレイアウトは切り替わりませlocalectl set-keymap symmetriん。

答え1

使用できます

localectl set-x11-keymap ***

これはコンソールとデスクトップで永続的になります。より詳細な設定はマニュアルページにあります。参考文献

答え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奇妙です。)

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 />

注: iso639IdISO 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 を読み取る代わりにこのファイルを読み取ると、エラー/バグが発生するはずです。

base.xml6.およびにも同じことを行うことができますbase.lstが、私は最初にこれを実行しましたが、機能しません。

7. キーボードレイアウトを次のように設定します。

setxkbmap symmetri

または、バリアントを設定するには、次を使用します。

setxkbmap symmetri -variant non-prog 

localectllist-x11-keymap-layoutsおよび は可能ですlist-x11-keymap-variantsが、 ではバリアントを設定することはできません。 のみsetxkbmap可能です。

この設定により、再起動後、初回ログイン前、新しいキーボードレイアウトが完成しました(ただし、バリアントは保持されません。基本レイアウトのみが保持されます。) しかし、ログインに成功するとデスクトップマネージャーが引き継ぎ、$HOME/.bashrc/ $HOME/.profile(単一ユーザー用)/ /etc/profile.d/xxx.sh/ /etc/profile(全ユーザー用)ファイルで新しいキーボードレイアウトを設定しないと、ないログアウトして再度ログインすると、新しいキーボードレイアウトが表示されます。これらの変更により、のみ最初のログイン成功前は持続します... またはプロファイル スクリプトを使用して、X サーバーに「ログイン前だけでなく、ログイン後にもすべてのユーザーに対してこれを希望します」と伝える必要があり.bashrcます。注意: この変更により、ログアウトしてユーザーを変更した場合でも、レイアウトは変更されたレイアウトになり、 にはなりませんqwerty(us)

本当にイライラします...もっと簡単な方法があるはずですが、見つけることができません。

参考文献:(必読)

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

関連情報