Debianでマウスホイールの解像度を制御する方法はありますか?

Debianでマウスホイールの解像度を制御する方法はありますか?

を使用していますDebian 6.0.4。マウスホイールがスクロールしすぎて使用できません。マウスホイールを一度回したときに「スクロール」回数を設定する方法はありますか?

修正する:

私のキーボードとマウスはワイヤレスで、KVMのUSBポートに接続されており、USB経由でコンピュータに接続されています(それでも機能します)。

xinput --list出力:

⎡Virtual core pointer                       id=2    [master pointer  (3)]
⎜↳ Virtual core XTEST pointer               id=4    [slave  pointer  (2)]
⎜↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0 id=9    [slave  pointer  (2)]
⎜↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0 id=10   [slave  pointer  (2)]
⎜↳ Justcom Technology USB KVM Switch        id=12   [slave  pointer  (2)]
⎣Virtual core keyboard                      id=3    [master keyboard (2)]
↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
↳ Power Button                              id=6    [slave  keyboard (3)]
↳ Power Button                              id=7    [slave  keyboard (3)] 
↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0  id=8    [slave  keyboard (3)]
↳ Justcom Technology USB KVM Switch         id=11   [slave  keyboard (3)]

xinput --list-props 9出力:

Device 'Microsoft Microsoft® 2.4GHz Transceiver v8.0':
    Device Enabled (128):   1
    Device Accel Profile (254): 0
    Device Accel Constant Deceleration (255):   1.000000
    Device Accel Adaptive Deceleration (257):   1.000000
    Device Accel Velocity Scaling (258):    10.000000
    Evdev Reopen Attempts (246):    10
    Evdev Axis Inversion (259): 0, 0
    Evdev Axes Swap (261):  0
    Axis Labels (262):  "Rel X" (136), "Rel Y" (137), "Rel Misc" (263)
    Button Labels (264):    "Button Left" (129), "Button Middle" (130), "Button Right" (131), "Button Wheel Up" (132), "Button Wheel Down" (133), "Button Horiz Wheel Left" (134), "Button Horiz Wheel Right" (135), "Button Side" (249), "Button Extra" (250), "Button Unknown" (247), "Button Unknown" (247), "Button Unknown" (247), "Button Unknown" (247)
    Evdev Middle Button Emulation (265):    2
    Evdev Middle Button Timeout (266):  50
    Evdev Wheel Emulation (267):    0
    Evdev Wheel Emulation Axes (268):   0, 0, 4, 5
    Evdev Wheel Emulation Inertia (269):    10
    Evdev Wheel Emulation Timeout (270):    200 
    Evdev Wheel Emulation Button (271): 4
    Evdev Drag Lock Buttons (272):  0

ベストアンサー1

次の機能が正しく機能するには、xteおよびxbindkeysプログラムが必要です。 Debianおよびほとんどの派生製品(Ubuntuなど)の場合、それぞれxautomationパッケージとxbindkeysパッケージに含まれています。別のディストリビューションを使用している場合は、パッケージマネージャを検索して正しいパッケージを見つけてください。

これのアイデアは、実際にマウスホイールの動きを加速するのではなく、ホイールを回転させるたびに複数のボタンイベントを生成することです。これにより、複数のボタンイベントが生成されるたびに外部プログラムが実行されるため、CPUが節約されません。ホイールをスクロールするたびに。これは少し考える必要があるかもしれませんが、ハッカーはハッカーです。

まず、入力デバイスのIDを取得する必要があります。使用しているマウスです。の出力からこれを得ることができますxinput list

その後、デバイスのボタンマッピングを取得する必要があります。の出力からこれを得ることができますxinput get-button-map <device>

スクロールホイールにマップされたボタンを確認するには、実行して上下にxinput test <device>数回スクロールします。これにより、指定したデバイスから端末にイベントが出力され、どのボタンがスクロールホイールにマップされているかを確認できます。

たとえば、2つの一般的なボタンとスクロールホイールを持つ古いMicrosoft USBマウスを使用します。車輪を上に転がすことはボタン4にマッピングされ、車輪を下に転がすことはボタン5にマッピングされる。幸い、デバイスのボタンマップには未使用のボタン2つ(6と7)があるので、これを使います。

まず、ボタン4と5を未使用のボタンに再マップします。

xinput set-button-map <devid> 1 2 3 6 7 4 5

これにより、ホイールイベントにボタン6と7のイベントを使用でき、これらのボタンのイベントを受信したときに必要な操作を実行できます。この場合、単一のマウスホイールスクロール(つまり、どちらの方向でもクリック)に対して複数のマウスイベントを生成します。

たとえば、3を乗算(加速)するには、次のように入力します~/.xbindkeysrc

"/usr/bin/xte 'mouseup 6' 'mouseclick 4' 'mouseclick 4' 'mouseclick 4' &"
b:6 
"/usr/bin/xte 'mouseup 7' 'mouseclick 5' 'mouseclick 5' 'mouseclick 5' &"
b:7 

実際には、ボタン6のリリースイベントとボタン4の3つのクリックイベントにバインドされています。ボタン 4 のドロップイベントに直接バインドすると、ボタン 4 を離すたびに同じタイプの 3 つの新しいイベントが生成されるため、無限ループが生成されます。ボタンが作成されました。これが私たちが以前にボタンを再マップした理由です。

設定をテストするにはxbindkeys -n -v:

user@host:~$ xbindkeys -n -v
displayName = :0
rc file = /home/sjl/.xbindkeysrc
rc guile file = /home/sjl/.xbindkeysrc.scm

min_keycode=8     max_keycode=255 (ie: know keycodes)
"/usr/bin/xte 'mouseup 6' 'mouseclick 4' 'mouseclick 4' 'mouseclick 4' &"
    m:0x0 + b:6   (mouse)
"/usr/bin/xte 'mouseup 7' 'mouseclick 5' 'mouseclick 5' 'mouseclick 5' &"
    m:0x0 + b:7   (mouse)
starting loop...
Button press !
e.xbutton.button=6
e.xbutton.state=0
"/usr/bin/xte 'mouseup 6' 'mouseclick 4' 'mouseclick 4' 'mouseclick 4' &"
    m:0x0 + b:6   (mouse)
got screen 0 for window ae
Start program with fork+exec call
Button release !
e.xbutton.button=6
e.xbutton.state=0
Button press !
e.xbutton.button=7
e.xbutton.state=0
"/usr/bin/xte 'mouseup 7' 'mouseclick 5' 'mouseclick 5' 'mouseclick 5' &"
    m:0x0 + b:7   (mouse)
got screen 0 for window ae
Start program with fork+exec call
Button release !
e.xbutton.button=7
e.xbutton.state=0

これで、スクロール可能なウィンドウ(Firefoxなど)にフォーカスを移動すると、ホイールのスクロール速度が3倍速くなることがわかります。

xbindkeys今残っているのは、Xセッションの開始時にバックグラウンドで開始するだけです。これは読者に練習問題として残す。

おすすめ記事