Logitech G400 マウスの DPI ボタン​​の無効化 / 再マッピング

Logitech G400 マウスの DPI ボタン​​の無効化 / 再マッピング

私はLogitech MX-518マウスを持っていましたが、反応に問題があったため、サポートに電話して交換品をもらいました。別の518ではなく、ロジクール G400 マウス518は製造中止になったため、問題が発生します。MX518はロモコ、G400 マウスはサポートされていません。 を実行すると$ lomoco -sが表示されます001.003: 046d:c245 Unsupported Logitech device: Unknown

私がやりたいのは、マウスの DPI を単一の値にロックし、DPI+ ボタンと DPI- ボタンをキーボードのPgUpとに再マップすることです。PgDn

どうすればこれを達成できるでしょうか?

ロジクール G400

ボタンは、次の順序で配置されています。

  1. ボタン1: 左クリック
  2. ボタン2: 中クリック
  3. ボタン3: 右クリック
  4. ボタン4: マウスホイールアップ
  5. ボタン5: マウスホイールを下へ
  6. ボタン6: なし
  7. ボタン7: なし
  8. ボタン8: 親指ボタン #1
  9. ボタン9: 親指ボタン #2
  10. ボタン10: タスクスイッチャーボタン
  11. ボタン11: なし
  12. ボタン12: なし

以前のマウス(MX 518)では、ボタン11と12はDPIキーでしたこれらのボタンが他のボタンと異なる点の 1 つは、 などのアプリケーションがxev、デフォルトではこれらのボタンの押下をイベントとして認識しないことです。MX 518 マウスでは、これらのボタンを変更/バインドできるようにするには、まず無効にする必要がありました。これはlomoco「Logitech SmartScroll / Cruise Control」と呼ばれていたと思います。G400 ではlomoco機能せず、代替手段も知りません。

xinputまた、参考になるかもしれないので、からの出力もいくつか示します。

user@localhost:~$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech Gaming Mouse G400                id=8    [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)]
    ↳ AT Translated Set 2 keyboard              id=9    [slave  keyboard (3)]
user@localhost:~$ xinput list-props 8
Device 'Logitech Gaming Mouse G400':
    Device Enabled (121):   1
    Coordinate Transformation Matrix (123): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (248): 0
    Device Accel Constant Deceleration (249):   2.000000
    Device Accel Adaptive Deceleration (250):   1.000000
    Device Accel Velocity Scaling (251):    1.000000
    Device Product ID (238):    1133, 49733
    Device Node (239):  "/dev/input/event4"
    Evdev Axis Inversion (252): 0, 0
    Evdev Axes Swap (254):  0
    Axis Labels (255):  "Rel X" (131), "Rel Y" (132), "Rel Vert Wheel" (247)
    Button Labels (256):    "Button Left" (124), "Button Middle" (125), "Button Right" (126), "Button Wheel Up" (127), "Button Wheel Down" (128), "Button Horiz Wheel Left" (129), "Button Horiz Wheel Right" (130), "Button Side" (242), "Button Extra" (243), "Button Forward" (244), "Button Back" (245), "Button Task" (246), "Button Unknown" (241), "Button Unknown" (241), "Button Unknown" (241), "Button Unknown" (241)
    Evdev Middle Button Emulation (257):    0
    Evdev Middle Button Timeout (258):  50
    Evdev Third Button Emulation (259): 0
    Evdev Third Button Emulation Timeout (260): 1000
    Evdev Third Button Emulation Button (261):  3
    Evdev Third Button Emulation Threshold (262):   20
    Evdev Wheel Emulation (263):    0
    Evdev Wheel Emulation Axes (264):   0, 0, 4, 5
    Evdev Wheel Emulation Inertia (265):    10
    Evdev Wheel Emulation Timeout (266):    200
    Evdev Wheel Emulation Button (267): 4
    Evdev Drag Lock Buttons (268):  0

答え1

@Koviko - 私も似たようなマウス(Logitech MX1100)を持っていますが、このマウスにも DPI ボタン​​があり、デフォルト モードで押すと USB に送信されません。自分でいくつかテストした結果、マウスを「ドライバー モード」に切り替える信号を送信するコードがわかり、easygestures/xev を使用してボタンを再割り当てできるようになりました。

ご希望であれば、これをオフにする方法を決定するために使用した手順をご案内できます (非常にハック的な回避策として、起動時に実行するだけのスクリプトを作成しましたが、少なくとも機能しています)。ただし、VM の設定、セカンダリ マウスの使用、生の USB トラフィックのスニッフィングが必要であり、残念ながらマウスに非常に固有のものになると思われます。

私の手順(より良い手順が間違いなく存在します):

1) Windows VM (Logitech SetPoint ソフトウェアがインストールされたもの。私は、仕事で WinXP にすでにセットアップしていたため、VirtualBox を使用しました)、Wireshark、gcc をシステムにインストールします。2) 次に、ターミナルで次の手順を実行しました。

sudo modprobe usbmon
sudo wireshark &
sudo /usr/lib/virtualbox/VirtualBox &

3) Wireshark 内で、「利用可能なキャプチャ インターフェイスの一覧を表示...」を選択し、マウスを動かしたときに大量のパケットを生成する USB バス番号をメモします (私の場合は usbmon3 でしたが、これは受信機が接続されている USB ポートにのみ基づいていると思います)。

3) VirtualBox 内から (USB コントローラーを共有するには sudo として実行する必要がありました)、XP VM の設定を編集し、USB コントローラーと USB 2.0 (EHCI) コントローラーの両方を有効にしました。次に、既存のデバイスから取り込んだ新しい USB フィルターを追加し、Logitech マウスのレシーバー (ベンダー ID 046d、製品 c245) を選択して、VM を起動しました。

(注: この時点以降、2 つ目のマウスを接続する必要がありました。これは、通常のマウスの制御を Windows VM に渡して、SetPoint ソフトウェアがそれが一般的なマウス以上のものであることを認識できるようにする必要があったためです。)

4) VM で、SetPoint ソフトウェアを起動し、さまざまなボタンのカスタム アクションを設定できる画面に移動しました。その後、Wireshark に戻り、マウスの USB バスでキャプチャを開始し、すぐに VM/SetPoint に移動して、ボタンの割り当てを DPI +/- からキーストロークの割り当てに変更し、すぐに Wireshark に戻ってキャプチャを停止しました。(必要なデータ量がわからなかったため、設定をさまざまなモードに変更しながら、これをさらに 10 ~ 15 回繰り返しましたが、確認した後、実際に必要なのは最初の 1 ~ 2 回のキャプチャだけでした。)

あなたのマウスが私のマウスと大体同じように動作すると仮定すると、おそらくキャプチャには合計 16 フレーム、つまり 4x GET DESCRIPTOR、3x(2xURB_CONTROL 出力 + 2xURB_INTERRUPT 入力) が含まれることになります。探しているのは、3 つの長い URB_CONTROL 出力フレームです。私がキャプチャしたフレームの 1 つの例を以下に示します。

0000  c0 80 64 36 00 88 ff ff  53 02 00 03 03 00 00 00
0010  5e 4b 25 50 00 00 00 00  f4 d9 08 00 8d ff ff ff
0020  07 00 00 00 07 00 00 00  21 09 10 02 01 00 07 00
0030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
0040  10 01 80 65 82 85 ff

私たちが探しているのは、応答の最後の7バイト(上記では「10 01 80 65 82 85 ff」)で、それぞれの長い「URB_CONTROL out」フレームから取得します。最後に、「g_hack」のソースを以下からダウンロードしました。ギットそして、マウスの製品コードを先頭に組み込み、マウスを「ドライバー モード」または「DPI モード」に切り替える新しいオプション (非常に粗雑な概念実証であったため、if ステートメントを使用して 0/1 に設定しました) も組み込みました。

その後は、選択した再マッピング プログラムで新しく使用可能になったマウス ボタンを設定するだけで済みました (私が easygestures を使用したのは、これが私が見つけた最初の UI だったからです。より優れた代替品があるかどうかはわかりません)。

関連情報