上記のように仮想ターミナルを循環するには、xbindkeys
Alt+左とAlt+右バインディングを使用します。chvt
ここ。使用可能な仮想端末数(6個)に関してアルゴリズムをモジュラーに修正しました。私はxbindkeys
ウィンドウマネージャの各インスタンスに対してデーモンを起動します(たとえば、tty1でdwmを起動する前に、tty2のopenboxでも同じです)。つまり、各ttyには独自のxbindkeys
インスタンスがあります。
明らかに、xbindkeys
新しいキーイベントのみを検出でき、残りのキーイベントは検出できません。したがって、Alt +右を押してtty1
からに切り替え、続行tty2
するには両方のtty3
キーを離し、前に移動するには両方のキーをもう一度押す必要があります。 ttyでない場合は、両方のキーを押しながら矢印キーをクリックX
できます。Altこの機能(キーメモリなど)をコピーできますかxbindkeys
?明らかに、複数のインスタンス(上記のようにWMごとに1つ)が必要であり、プログラム(xbindkeys
)が保持されているキーではなく初期キーイベントを検出しているように見えるため、これは不可能です。どんな解決策でも大変感謝します。
答え1
現在開発中の作業を続行するには、次を使用できます。エビムユーティリティプログラムevtest
とツールキットを使用してくださいevemu-event
。入力イベントデバイスを一覧表示し、sudo evtest
キーボードに対応する行を見つけます。特別なキーボードがあり、次のようになります。
/dev/input/event2: HID 05f3:0007
次に、その番号(私の場合は2)を選択し、識別したいキー(Alt)を押します。左シフトを使って
Event: time 15094562, -------------- SYN_REPORT ------------
Event: time 15094562, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e1
Event: time 15094562, type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1
ここで見ることができるのは、Shiftキーを押すと値が1のKEY_LEFTSHIFTコードを含むEV_KEYタイプイベントが発生し、それを放すと値が0の類似イベントが発生することです。
これで、いつでも(例えばchvt以降)、そのキーの状態を簡単に照会できます。私の場合
sudo evtest --query /dev/input/event2 EV_KEY KEY_LEFTSHIFT
値が0の場合、このコマンドの戻りコードは0、値が1の場合は戻りコードは10です。を使用してこの値を表示できますecho $?
。
これでキー押下の状態がわかりましたので、X11サーバーが「現在の」状態を表示できるようにキー押下イベントをシミュレートできます。私の立場ではそうします
sudo evemu-event /dev/input/event2 --type EV_KEY --code KEY_LEFTSHIFT --value 1
想像できるように、元の問題に対するより簡単な解決策があるかもしれません。 libeventを使用すると、ここで使用されているものとは異なるソリューションを確認し、xbindkeys
この問題を解決できます。 Cには例があります。Linux USB入力サブシステムそしてパート2Linuxマガジンから。システムにPythonライブラリがある可能性があります。evdevこれをより簡単にしてください。