GNU/Linux >> Linux の 問題 >  >> Linux

コンソール(tty)とXの両方でX /コンソールに依存しない方法でキーボードレイアウト/マッピングを変更しますか?

~/.Xmodmapを使用して、XWindowSystemの実行中にキーボードのレイアウト/マッピングを変更することができました。 (Xプロトコル呼び出しのラッパーとしてlibxcbを使用するなど、Xプロトコルを介して直接実行することもできると思います)。

loadkeysを使用して、console / ttyで(つまり、Xが実行されていないときに)同じことを(ある程度)行うことができました。 。

キーボードレイアウトを同様にカスタマイズする方法はありますが、単一のソース 、Xとコンソールの両方に影響を与えるような方法で。 「Xとコンソールにとらわれない」方法で?

(私が考えることができる唯一の方法は、カーネルの入力インターフェイスevdevと通信する「キーボードドライバー」を作成することです。 、必要な入力を送信します(uinputを介して) ?)、または何かですが、これが理にかなっているのか、それとももっと簡単な方法があるのか​​わかりません。)

承認された回答:

はい、方法はあります。これは、Debianのconsole-setupパッケージが実際に行う方法です。

  • キーボードレイアウトは、管理者がkeyboardという名前のファイルでXKB用語(モデル、レイアウト、バリアント、およびオプション)で指定します。 、通常は/etc/default/keyboard 。これは単一のソースです。テキストエディタで編集できます。
  • setxkbmap プログラムにはこれらと同じXKB設定が与えられ、それに応じてX11サーバーが構成されます。
    • キーボード構成パッケージのインストール後のメンテナスクリプトは、setxkbmapを実行します 直接、/etc/default/keyboardを使用 X11ディスプレイで検出された場合の設定。したがって、dpkg-reconfigure keyboard-configuration X11 GUIターミナルエミュレータから実行すると、X11キーボードのレイアウトに影響します。
  • setupcon スクリプトはこれらのXKB設定を取得し、ckbcompに渡します。 キーボードマップを生成するユーティリティ。そのキーボードマップをloadkeysを使用してカーネル仮想端末にロードします。 / kbdcontrol
    • このスクリプトは、サービスによってシステムのブートストラップで実行されます。
    • それ以外の場合は手動で実行することもできます。

他のsystemdオペレーティングシステムは動作が異なりますが、単一のソースもあります。

  • XKBレイアウト、バリアント、およびオプションは、/etc/X11/xorg.conf.d/00-keyboard.confに保存されます。 。これは単一のソースです。
    • このファイルは、起動時にX11サーバーによって直接読み取られ、X11キーボードマップを直接設定します。
    • このファイルはsystemd-localedによって解析されます 起動時。 systemd-localedの間は、ファイルをテキストエディタで便利に編集することはできません。 サービスが独自のメモリ内情報で簡単に上書きするため、が実行されています。
    • XKB情報を変更するには、localectlを実行します。 、別のサーバーと通信し、別のサーバーはsystemd-localedと通信します 。
  • systemd-localed /usr/share/systemd/kbd-model-mapのマッピングを使用して、XKB設定を仮想端末のキーボードマップ名に変換します 、次に/etc/vconsole.confに書き込みます 。 Debianシステムとは異なり、XKB情報からその場でマップを生成するのではなく、マップファイルにリストされている事前に提供された静的マップのみを選択します。
  • systemd-vconsole-setup ブートストラップで実行され、/etc/vconsole.confを読み取ります 、loadkeysを実行して、キーボードマップをカーネル仮想端末にロードします。 。

さらに読む

  • keyboardconsole-setupユーザーズマニュアル 。 Debian。
  • ckbcompconsole-setupユーザーズマニュアル 。 Debian。
  • アンドリューT.ヤング(2011)。 キーボード構成
  • Xkbはどこで構成を取得しますか?
  • https://unix.stackexchange.com/a/326804/5132
関連:スクリプトはループを1回だけ実行しますか?
Linux
  1. コンソールで大きなファイルをチェックする方法

  2. テキストモードコンソールのフォントを変更しますか?

  3. Lightdmでキーボードレイアウトを変更しますか?

  1. 再起動後も保持されるようにコンソールのTtyフォントタイプを永続的に変更するにはどうすればよいですか?

  2. キーボードレイアウトとXmodmapの関係?

  3. printk およびコンソール ログ レベル

  1. 現在印刷されているコンソール行を消去します

  2. コンソールで入力キーボード レイアウトを変更するにはどうすればよいですか?

  3. Linux:/dev/console 、 /dev/tty 、 /dev/tty0 の違い