
私は親指の下にトラックボールが付いたカスタム キーボードを作成しました。ショートカット (左 Alt など) を押してボールを回転させると、スクロールのように動作するようにスクロール動作をマップしたいと考えています。ここでは Xorg を使用していますが、X と Wayland の両方のソリューション (ソリューションにディスプレイ サーバーが含まれる場合) を知りたいです。
答え1
垂直スクロールと水平スクロールをエミュレートするlibinput
運転evdev
手はディルクトの回答は垂直スクロールのエミュレーションのみをサポートしています。(私のように)水平スクロールもしたい場合は、ドライバーlibinput
を使用してそれを実行できます。
詳細については、次のマニュアルページを参照してください
libinput(4)
。オプション「スクロールボタン」 "int"
ボタンをスクロールボタンとして指定します。スクロールメソッドはボタンボタンが論理的に押されたままの場合、x/y 軸の移動がスクロール イベントに変換されます。
オプション "ScrollMethod" "文字列"
スクロールメソッドを有効にします。許可される値はなし、2本指、エッジ、ボタンすべてのデバイスがすべてのオプションをサポートしているわけではありません。オプションがサポートされていない場合は、このデバイスのデフォルトのスクロールオプションが使用されます。
例えば:
Section "InputClass" Identifier "Some Trackball" # ... Stuff to match your trackball, see xorg.conf(5) Driver "libinput" Option "ScrollMethod" "button" Option "ScrollButton" "4" # Or whatever button suits your needs EndSection
答え2
トラックボールでマウスホイールをシミュレートする
必要な機能に似た機能を持つドライバーの既存の構成オプションを使用するか、独自のドライバーを作成することができます。
のロジクール M570USBレシーバー付きのワイヤレストラックボールです。つまり、 隠蔽デバイス、マウスイベントは、入力カーネル内のレイヤーであり、対応する/dev/event
デバイスから読み取ることができます。
X ドライバーは、evdev
ドライバーを使用してこのレイヤーからイベントを読み取り、それを X イベントに変換します。私は Wayland に詳しくありませんが、そこでも同様に動作すると思います。
1)evdev
ドライバーには、トラックボールでマウスホイールをエミュレートするオプションがすでに含まれていますman evdev
。を参照してください。最も重要なものは次のとおりです。
オプション「EmulateWheel」 「ブール値」
「ホイール」エミュレーションを有効/無効にします。ホイール エミュレーションとは、特定の実際のボタンを押しながらマウスを動かすと、ボタンの押下/解放イベントをエミュレートすることを意味します。ホイール ボタン イベント (通常はボタン 4 と 5) は通常、スクロールに使用されます。ホイール エミュレーションは、トラックボールでホイールのような動作を実現するのに便利です。
オプション "EmulateWheelButton" "integer"
ホイール エミュレーション モードを有効にするためにどのボタンを押し続ける必要があるかを指定します。このボタンが押されている間、X および/または Y ポインタの動きによって、XAxisMapping および YAxisMapping 設定で指定されたボタンの押下/解放イベントが生成されます。ボタンが 0 で EmulateWheel がオンの場合、デバイスの動きはすべてホイール イベントに変換されます。既定値: 4。
これはキーボードショートカットの代わりにトラックボールボタンを使用して動作します(ドライバーはキーボードではなくマウスからのイベントのみを認識するため)。動きホイールイベントではなく回転。
2) 既存のドライバーをいくつか変更して独自のドライバーを作成します。キーを押すことでホイール エミュレーションをトリガーできるように、キーボードとマウスのドライバーを組み合わせる必要があります。
ソースコードはカーネル入力層drivers/input
カーネルツリー内にあります。
ソースコードはエヴデヴXドライバーはxorg/driver/xf86-input-evdev/tree/src/evdev.c。
キーボード ドライバーは、使用したキーボードの種類によって異なります。