Composeキーが純粋なコンソールとXで異なる動作をするのはなぜですか?

Composeキーが純粋なコンソールとXで異なる動作をするのはなぜですか?

Xubuntu 20.04でキーボードレイアウトを設定しています。

私は通常、同じキーストロークを使用して通常のコンソールとXの両方でさまざまなUnicode文字を入力できるようにしたいです。私はコンソールがUnicode(512文字)を制限的にサポートしていることを知っているので、コンソールはこの限られた範囲内でのみ機能することに同意します。

xfce4-keyboard-settingsで「システムデフォルトの使用」をそのままにして、このオプションを「設定の使用」/etc/default/keyboardとして理解し、コンソールのみとXの単一構成を望んでいました。

私はsudo dpkg-reconfigure keyboard-configuration「AltGr Dead Keysを持つUS International」レイアウトバリアントを実行して選択しました。

私は純粋なコンソールbashで「(arg:x)」モードに入ると、いくつかのAltGrシーケンスがめちゃくちゃになることがわかりました。 bashで始まるこの動作を除外するのshが最も簡単です。

この時点で、キーボードレイアウトがコンソールとタイプX:AltGr + 2で同じように機能していると思います。², AltGr+` 次の e 入力金利

作成キーとしてCaps Lockを選択しました。

X では、次のような動作が予想されます。 oo型は角度表記法で作成され、e =型はユーロ表記法で作成されます。

しかし、コンソールでは、Composeシーケンスはほとんど機能しません。度もユーロもありません(ただし、完全に表示され、AltGrを介して入力することもできます)。 Composeキーは、Compose `e設定などの最も基本的な設定ではまだ機能するため、完全に役に立ちません。金利。しかし、これは512のグリフよりはるかに制限的です。

それでは、コンソールComposeがそのように異なる動作をするのはなぜですか。少なくとも学位やユーロのように、一見単純なものをサポートするように調整できますか?

ベストアンサー1

コンソールはまったく異なるコードで処理されるため、動作が異なります。/etc/default/keyboard以下の設定が含まれています。XKB、これはXのキーボード入力処理の一部です。これコンソールインストールパッケージこれらの設定をコンソールが実行できる操作にプログラム的に変換するsetupcon(読み取りと解析/etc/default/keyboard)とckbcomp(XKB設定をコンソール設定に変換します)。これらのツールはコンソールの機能によって制限されます。

Linuxコンソールはカーネル内に実装され、マルチバイト文字セットの部分的なサポートのみを提供します。特に、作成キーの場合、カーネルにハードコーディングされた制限があります。スキーム( accent_table)ハードコードされたサイズは次のとおりです。MAX_DIACRカーネルを再コンパイルしない場合は256です。これは、コンソール設定パッケージにUnicode作成テーブルがない理由を説明します。アイテムは256個しかないので、何をしても多くの文字は含まれません。私が知る限り、Unicode文字セットでコンソール設定を使用すると、最終的にカーネルの組み込み構成表これは、ASCIIではなくラテン1アクセント文字のみをリストします(°などの句読点を除く)。

独自の構成テーブルを定義できます。 2つのキャラクターの最大256の組み合わせを選択して3番目のキャラクターを形成し、コンソール作成マップファイルにリストします。

Compose 'o' 'o' to degree
Compose 0x6f 0x006f to 0xb0
Compose U+6F U+006f to U+00B0

上記の最初の行は、Compose o o挿入を表すさまざまな方法を示しています°。もちろん、1つだけが必要です。文字を指定する方法は次のとおりです。

  • 10進数、先行8進数0、または先行16進数です0x
  • シングルバイト中の文字です'。この文字の前にはバックスラッシュを付けることができ、バックスラッシュと一重引用符の前にはバックスラッシュを'\o'付ける'o'必要'\\'があります'\'
  • '\ooo'どこあ、あ最大255(\377)の値を指定する正確に3つの8進数です。
  • U+hhhhどこヘヘ正確に4桁の16進数です。
  • 右側にのみtoキャラクターの象徴的な名前があります。シンボル名は X11 キーシンボル名のサブセットです。より源泉( syms.*.h)シンボル名のリストを取得します。

自己作成マップをロードするには、次の手順を実行します。

loadkeys /path/to/my/compose.kmap

これは現在ロードされている組み合わせテーブルを置き換えます。

カスタム作成マップをロードするようにコンソール設定に指示する方法が見つかりません。 Unicode以外のエンコードの場合はckbcompロードされますが、Unicodeの場合はこのステップをスキップします。/etc/console-setup/compose.${charmap}.inc

1配列の要素数kbdiacrucstruct kbdiacrsucユーザーモードで設定できる項目の最大数。同じ値に設定する必要があります。
²ソース:ソースコード(kbdパッケージ、ファイルsrc/libkeymap/analyze.lsrc/libkeymap/parser.y。ドキュメントにこれらの詳細が見つかりません。

おすすめ記事