任意の文字セットで仮想キーボードをシミュレートする方法は?

任意の文字セットで仮想キーボードをシミュレートする方法は?

キーボードの動作方法を変更するためにいくつかのアプリを書いています。 (1つはコードを押すことを可能にし、もう1つは音節を大きく話して個々の文字を入力することを可能にします。)これらのアプリの「レイアウト」がどのように処理されるかは、どのキーボードやタイプにも関連しません。プログラムを実行するときのキーボードレイアウトは、ユーザーが印刷するように指示した文字を印刷する必要があります。これがうまくいくようにするには多くの困難があり、一般的なLinuxコンピュータでキーボード入力が一般的にどのように機能するかを理解したと思います。

  • コンピュータが起動すると、XKBはevdevXF86キーコードに対応するスキャンコードテーブルを記憶します。
  • レイアウトをロードすると、XKBは入力するUnicode文字に対応するXF86キー記号を含む他のテーブルを主に読み取って記憶します/usr/include/X11/keysymdef.h。次に、キーシンボルに対応するXF86キーコードの他のテーブル(「レイアウト」)を覚えています。これは文字マッピングのキーコードに縮小できます。
  • キーボードがキーを押す音を聞くたびに、evdevスキャンコードがXKBに送信されます。
  • ...XKBはXに特定のUnicode文字を入力するように指示します。

私のアプリケーションのバックエンドはevdevあり、私が本当に欲しいものはXがすることであるため、その間のすべてをモックアップする必要があるため、非常に残念です。 Xに何をすべきか教えてもらえますか?明らかに、その地域に提供される管理者アクセスは必要ありません。私は、XKBが任意の幾何学的構造でキーボードをシミュレートできる場合、なぜ各Unicode文字のキーを持つキーボードであるかのように偽装することはできませんか?

私のアプリケーションはPythonで書かれていますが、他の言語でも書くことができます。

編集:キーストロークプロセスがXLookupString()キーストローク呼び出しで生成されたレポートを読むところにダムがあるようです。XKeyEventこのプロセスは、キー押下を返されたKeySym内容に対応すると解釈しますXLookupString()。これは悪いニュースです。なぜなら、XLookupString()キーコードとキーシムの対応に関する情報はXKBのレイアウトから得られるからです。したがって、任意のキーシンボルへの入力を偽造するには、XKBがレイアウトに対してうそをつくか、キーシンボルに対してXLookupString()うそをつく必要があります。

関連情報