これは私が欲しいものです:
Trisquel で動作する必要があります。
以前にいくつかのキーを再マップするために xkb を使用したことがあるので、おそらくxkbでこれを実行できると思いました。そしてそれはそれができるように見えます:
Pointer_Left
、Pointer_DownRight
、Pointer_Button_Dflt
、Pointer_Drag_Dflt
など。ISO_Level5_Lock
などのロックキーがあります。しかし、私はLinuxとxkbの両方に不慣れです。 xkbを使用して非常に単純なキーの再マッピングを行うことができましたが、残念ながら、上記のすべてをまとめる方法と、それをどのファイルに入れるかがわかりません。 xkbを含まないソリューションも、部分的なソリューションと同様に問題ありません。
以前は、Pointer_Left
keysymをいくつかのキーに割り当て、Pointer_EnableKeys
をスクロールロックに割り当ててみました。ただし、それではマウスポインタは左に移動しませんでした。代わりに、それはまったく何もしませんでした。
キーにkeysymを割り当てるだけでは不十分であることがわかりました。キーシムも解釈する必要があります。これは「compat」ファイルで行われます。私のシステムでは、それらは/ usr/share/X11/xkb/compatにあります。
この優れたガイドに従って、独自のキーボードレイアウトを作成しました: http://hack.org/mc/writings/xkb.html 。これは、「teck.xkb」ファイルがあることを意味します(レイアウトを「teck」と呼びます)。そのファイルには次の行が含まれています。
xkb_compat { include "complete" };
/ usr/share/X11/xkb/compat/completeを見ると、そのファイルの同じフォルダーに「mousekeys」というファイルが含まれていることがわかります。ビンゴ。
Mousekeysファイルには、マウスを制御するためのkeysymsの解釈が含まれています。 私の質問のリンクの1つ に記載されているPointer_EnableKeys
の必要な解釈が含まれています。ただし、Pointer_Left
(およびPointer_Right
など)の解釈は含まれていません。だから、以前はうまくいきませんでした。代わりに、多くのKP_*
キーシムが解釈されます。結局のところ、標準はキーパッドにマウスキーを置くことです。
幸い、mousekeysファイルの最後には、マウスキーのインジケーターを設定するためのコードがあります。完璧!
そこで、mousekeysファイルをteck.xkbファイルの横にある「compat」という新しいフォルダーにコピーし、名前を「teck_mousekeys」に変更しました。それに応じてteck.xkbファイルを更新しました。
xkb_compat { include "teck_mousekeys+complete" };
次に、teck_mousekeysファイルの編集を開始しました。 KP_*
keyymsを使用する代わりに、必要なもの(右側のホーム行の周りのキー)を使用しました。結果は次のとおりです。
default partial xkb_compatibility "mousekeys" {
interpret.repeat= True;
interpret m {
action = MovePtr(x=-1,y=+1);
};
interpret comma {
action = MovePtr(x=+0,y=+1);
};
interpret period {
action = MovePtr(x=+1,y=+1);
};
interpret j {
action = MovePtr(x=-1,y=+0);
};
interpret l {
action = MovePtr(x=+1,y=+0);
};
interpret u {
action = MovePtr(x=-1,y=-1);
};
interpret i {
action = MovePtr(x=+0,y=-1);
};
interpret o {
action = MovePtr(x=+1,y=-1);
};
interpret k {
action = PointerButton(button=default);
};
interpret semicolon {
action = PointerButton(button=3);
};
interpret space {
action = PointerButton(button=default,count=2);
};
interpret y {
action = SetPtrDflt(affect=defaultButton,button=3);
};
interpret h {
action = SetPtrDflt(affect=defaultButton,button=2);
};
interpret n {
action = SetPtrDflt(affect=defaultButton,button=1);
};
interpret p {
action = LockPointerButton(button=default,affect=lock);
};
interpret apostrophe {
action = LockPointerButton(button=default,affect=unlock);
};
indicator "Scroll Lock" {
indicatorDrivesKeyboard;
controls= MouseKeys;
};
};
(上記はQWERTYレイアウトを想定しています。)
カスタムキーボードレイアウトでは、マウスキーを切り替えるためのスクロールロックを定義しています。
key <SCLK> {[Pointer_EnableKeys]};
Xkbについてはよくわかりませんが、 xevdevserver ソース、/ dev/input/eventXデバイスからLinuxevdevイベントを読み取り、それらを使用してXサーバーに挿入するプログラムに基づいて何かを作成しました。 XTEST拡張。あなたはここでコードを見つけることができます:
https://bitbucket.org/brmtron/mouseemu/
主な欠点は、Sudo
を使用して何かを実行できる必要があることですが、そうではない場合があります。