X Window System が~/.Xmodmap
を使用して実行されているときに、キーボードのレイアウト/マッピングを変更できました(そして Xプロトコル)を使用して行うこともできると思います 直接、たとえば libxcb をXプロトコル呼び出しのラッパーとして使用)。
loadkeys
を使用して、コンソール/ ttyで(つまり、Xが実行されていないときに)同じことを(ある程度)行うことができました。
同様にキーボードレイアウトをカスタマイズする方法はありますが、単一のソースから、Xとコンソールの両方に影響を与えるような方法で、つまり「Xとコンソールにとらわれない」方法で?
(私が考えることができる唯一の方法は、カーネルの入力インターフェースevdev
とやり取りし、必要な入力を(uinput
?を介して)送信する「キーボードドライバ」、または何かを書くことです、でもこれが理にかなっているのか、もっと簡単な方法があるのかはわかりません。)
はい、方法があります。これが、Debianのconsole-setupパッケージが実際に行う方法です。
keyboard
、通常は/etc/default/keyboard
という名前のファイルでXKB用語(モデル、レイアウト、バリアント、オプション)で指定します。これは単一のソースです。テキストエディタで編集できます。setxkbmap
プログラムには、これらと同じXKB設定が与えられ、それに応じてX11サーバーが構成されます。/etc/default/keyboard
設定でsetxkbmap
を直接実行します。したがって、X11 GUI端末エミュレータからdpkg-reconfigure keyboard-configuration
を実行すると、X11キーボードレイアウトに影響します。setupcon
スクリプトはこれらのXKB設定を受け取り、それらをckbcomp
ユーティリティに渡してキーボードマップを生成し、そのキーボードマップをloadkeys
/kbdcontrol
。を使用してカーネル仮想端末にロードします。他のsystemdオペレーティングシステムは動作が異なりますが、ソースも1つです。
/etc/X11/xorg.conf.d/00-keyboard.conf
に格納されます。これは単一のソースです。systemd-localed
によって解析されます。 systemd-localed
の実行中は、サービスがそのメモリ内の情報で穏やかにファイルを上書きするため、ファイルをテキストエディタで効果的に編集することはできません。localectl
を実行します。これは、systemd-localed
と通信する別のサーバーと通信します。systemd-localed
は、/usr/share/systemd/kbd-model-map
のマッピングを使用してXKB設定を仮想端末のキーボードマップ名に変換し、/etc/vconsole.conf
に書き込みます。 Debianシステムとは異なり、XKB情報からオンザフライでマップを生成せず、マップファイルにリストされている事前に提供された静的マップのみを選択します。systemd-vconsole-setup
はブートストラップで実行され、/etc/vconsole.conf
を読み取り、loadkeys
を実行してキーボードマップをカーネル仮想端末にロードします。keyboard
。 console-setupユーザーズマニュアル。 Debian。ckbcomp
。 console-setupユーザーズマニュアル。 Debian。