2つのキーボードに異なるレイアウトを割り当てることはできますか?

2つのキーボードに異なるレイアウトを割り当てることはできますか?

私はDvorakレイアウトを好むので、素晴らしいUSB Dasキーボードを持っていて、Virtual ConsoleとX11で私に合ったレイアウトを割り当てました。起動時に適用されるように使用してloadkeys予約install-keymapしましたが、とても満足しています。

しかし、ほとんどの同僚はQwertyレイアウトを好み、これはペアプログラミングに干渉します。これを行うために接続できるUSBキーボードはいくつかありますが、接続するとすべて私のDvorakレイアウトを採用します。

追加のキーボードでQwertyレイアウトを使用するようにudev(またはX11)に指示する方法はありますか?これを区別するために使用できるさまざまなUSBベンダーとデバイス識別子があります。

私のシステムはDebianのベータ版で、udevのバージョンは232です。ディスク障害後に再インストールしたところ、systemdに感染して既存に慣れていた標準(SysVスタイル)方式が機能しませんでした。

エマルジョンキーボードごとにキーボードレイアウトが異なります私には何の助けも与えられませんでした。

答え1

一般的な背景:キーには3つの異なる「コード」セットが割り当てられます。最初はスキャンコード(ハードウェアによるすべての数字はキーボードのキーを表します。)キーコードshift(またはなどの特定のキーを表すより抽象的な数字1 / !)、最後にキーボードのシンボルá(キーシンボル、キー、またはキーの組み合わせによって生成される実際のシンボル)。

私は最近、各/dev/input/event*デバイスにキーコードマッピング用の独自のスキャンコードがあることに気づきました。これらのマッピングはEVIOCGKEYCODE_V2iotcls(、、)を介して読み込んで変更することができますが、EVIOCSKEYCODE_V2興味深いことに、これらのマッピングにアクセスするための一般的なツールはないようです(疑問に思ってこれをダンプするための簡単なCプログラムをすばやく作成しました)。

これにより、LinuxカーネルとXの両方がキーコードをキーシンボルにマップします。カーネル、kbdハンドラへのグローバルマッピングは1つだけです(または非常に仮想コンソールへのグローバルマッピングは1つ以上です。異なる仮想コンソールが異なるマッピングを持つことができるかどうかはわかりません)。 Xは各デバイスのマップを維持します。

したがって、仮想コンソールでキーボード間の違いを望む場合、唯一のオプションはスキャンコードをキーコードマッピングとして使用することです。 Dvorak対Qwertyの場合と同様に、文字キーのみを再マッピングし、移動された状態と移動されていない状態のシンボルを別の方法で再マッピングしたくない限り、実際に機能できます。

最新バージョンのudevは、ハードウェアデータベース(/etc/udev/hwdb.d)を使用して特別なスキャンコードをキーコードマッピングに初期化します。独自のマッピングを追加できます。カスタムバージョン

別の方法は、仮想コンソールでDvorakまたはQwertyを使用することです。しかし、設定はこのバリエーションを望んでいません)。このアプローチの利点は、シンボル、デッドキー、構成などをさまざまな方法でマッピングできることです。

関連情報