スクロールホイール水平ボタンを無効にする(戻る/前方)

スクロールホイール水平ボタンを無効にする(戻る/前方)

最近Logitech M500を購入しました。

バス 002 デバイス 004: ID 046d: c069 Logitech, Inc. M500レーザーマウス

私が認識できるボタンは9つです。

  • 左側に2つあります。
  • ~について
  • ホイールプレス
  • ホイールが上にスクロールし、ホイールが下にスクロールします。
  • ホイールは左にスライドし、ホイールは右にスライドします

最後の2つは私を狂わせます。ホイールをクリックしようとするたびに、誤って左のホイールボタンをクリックしてFirefoxが最後に訪問したページに移動します。これは非常に迷惑なことです。

簡単ですか? xevがどのボタンを表示するかを見つけて無効にします。間違った! xevは "ButtonPress / ButtonRelease"イベントを生成しませんが、代わりに奇妙な "LeaveNotify / EnterNotify / KeymapNotify"ペアを生成します。

LeaveNotifyイベント、シーケンス番号40、合成NO、ウィンドウ0x4a00001、
    ルート0x94、下位0x0、時間2344319、(104,86)、ルート:(113,207)、
    モード NotifyGrab, 詳細 NotifyAncestor, same_screen YES,
    フォーカスはい、ステータス0

EnterNotifyイベント、シーケンス番号40、合成NO、ウィンドウ0x4a00001、
    ルート0x94、下位0x0、時間2344319、(104,86)、ルート:(113,207)、
    モード NotifyUngrab, 詳細 NotifyAncestor, same_screen YES,
    フォーカスはい、ステータス0

KeymapNotifyイベント、シーケンス番号40、合成NO、ウィンドウ0x0、
    キー:4294967188 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   
           0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   

これで、4294967188(32ビット整数の2の補数 - 役に立つ場合は108)が確かにキーコードになります。そうですか?また間違っています!水平ホイールの左/右ボタンと側面背面/前ボタンの番号は同じです。

これは私のデバイスxinputのリストです。

ロジクールUSBレーザーマウスID=15 [スレーブポインタ(2)]
    7つのクラスに登録してください:
        次から派生したクラス: 15. タイプ:XIButtonClass
        サポートされるボタン: 16
        ボタンラベル:「ボタン左」「ボタン中央」「ボタン右」「ボタンホイール上」「ボタンホイール下」「ボタン水平ホイール左」「ボタン水平ホイール右」「ボタン側面」「ボタン追加」「ボタン前」 「戻るボタン」「操作ボタン」「不明なボタン」「不明なボタン」「不明なボタン」「不明なボタン」
        ボタンの状態:
        次から派生したクラス: 15. タイプ: XIValuatorClass
        評価者0の詳細:
          タグ:RelX
          範囲: -1.000000 - -1.000000
          分解能: 1つの単位/メートル
          モード:相手
        次から派生したクラス: 15. タイプ: XIValuatorClass
        評価者1の詳細:
          タグ:Rel Y
          範囲: -1.000000 - -1.000000
          分解能: 1つの単位/メートル
          モード:相手
        次から派生したクラス: 15. タイプ: XIValuatorClass
        評価者2の詳細:
          タグ:相対水平ホイール
          範囲: -1.000000 - -1.000000
          分解能: 1つの単位/メートル
          モード:相手
        次から派生したクラス: 15. タイプ: XIValuatorClass
        評価者3の詳細:
          タグ:相対垂直ホイール
          範囲: -1.000000 - -1.000000
          分解能: 1つの単位/メートル
          モード:相手
        次から派生したクラス: 15. タイプ: XIScrollClass
        ローリング評価者2情報
          タイプ: 2(横)
          増分: 1.000000
          フラグ:0x0
        次から派生したクラス: 15. タイプ: XIScrollClass
        ローリング評価者3情報
          タイプ:1(垂直)
          増分: -1.000000
          フラグ:0x2(優先)

ボタンマッピングは通常と同じように見えます。それでは、ループで "xinput query-state $DEVNO"を呼び出す小さなスクリプトを書いて怖いボタンを押すとどうなりますか?あなたはそれを推測した:

カテゴリ2:
ボタンクラス
    ボタン[1] =上
    ボタン[2] =上
    ボタン[3] =上
    ボタン[4] =上
    ボタン[5] =上
    ボタン[6] =上
    ボタン[7] =上
    ボタン[8] =上
    ボタン[9] =上
    ボタン[10] =上
    ボタン[11] =上
    ボタン[12] =上
    ボタン[13] =上
    ボタン[14] =上
    ボタン[15] =上
    ボタン[16] =上
ValuatorClassモード=相対的な親密度=In
    評価者[0]=538
    評価者[1]=456
    評価者[2]=-2
    評価者[3]=-464

明らかに「下」と表示されていますが、常に「上」と表示されます。正しいButtonPressイベント(左/右など)を生成するマウスボタンは、期待どおりに広告を「下」と表示します。

ベストアンサー1

ボタン8と9を使用してホイールを左右に傾けるLogitech M325があります。このスクリプトを使用して無効にします。

#!/bin/bash

set -eu

MOUSE_ID=$(xinput --list | grep Logitech | sed -r 's/.*id=([0-9]+).*/\1/')

if [ -n "$MOUSE_ID" ]; then
    xinput set-button-map $MOUSE_ID 1 2 3 4 5 6 7 0 0
fi

おすすめ記事