web-dev-qa-db-ja.com

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

その後、

localectl set-x11-keymap symmetri

今回はレイアウトを切り替えません。 localectl set-keymap symmetriどちらでもない。

1
WesternGun

@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を開きます。

(ディストリビューションによって異なるため、最初の部分は省略します。CentOS7では/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 />のように自動で閉じることができます。

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

6. base.xmlbase.lstにも同じことができますが、最初に実行したので機能しません。

7.次のコマンドでキーボードレイアウトを設定します。

setxkbmap symmetri

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

setxkbmap symmetri -variant non-prog 

localectllist-x11-keymap-layoutslist-x11-keymap-variantsを実行できますが、バリアントを設定することはできません。 setxkbmapのみが可能です。

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

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

参考文献:(必読)

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

あなたが使用することができます

localectl set-x11-keymap ***

これはコンソールとデスクトップで永続的になります。より詳細な構成はmanページにあります https://www.unix.com/man-page/centos/1/LOCALECTL/

3
Tim Brandrick