禁用/重新映射 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- 按鈕重新映射PgUpPgDn鍵盤上。

我將如何實現這個目標?

羅技 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 鍵。這些按鈕與其他按鈕不同的原因之一是,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 重新分配按鈕。

如果您願意,我可以引導您完成我用來確定如何關閉它的步驟(我現在有一個腳本,我只需要在啟動時運行,作為一種非常黑客的解決方法,但它至少可以工作),但它涉及設置虛擬機器、擁有輔助滑鼠以及嗅探原始USB 流量,不幸的是,它似乎非常特定於滑鼠。

我的步驟(幾乎肯定有更好的步驟):

1) 在系統上安裝 Windows VM(安裝了 Logitech SetPoint 軟體;我使用 VirtualBox,因為這是我在 WinXP 中設定的工作環境)、Wireshark 和 gcc。 2)然後我在終端機中運行以下步驟:

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

3) 在 Wireshark 中,選擇“列出可用的捕獲介面...”,並記下當您移動滑鼠時哪個 USB 總線編號會產生大量資料包(我的是 usbmon3,但我想這純粹是基於您的接收器插入哪個USB 連接埠)。

3) 在 VirtualBox 中(我需要以 sudo 身份運行才能共享 USB 控制器),我編輯了 XP VM 的設置,並啟用了 USB 控制器和 USB 2.0 (EHCI) 控制器。然後,我新增了一個從現有裝置填充的新 USB 過濾器,並選擇了 Logitech 滑鼠的接收器(供應商 ID 046d,產品 c245),然後啟動虛擬機器。

(注意:此後,我需要插入第二個滑鼠,因為我必須將對常規滑鼠的控制權交給 Windows VM,以便 SetPoint 軟體可以看到它的存在不僅僅是普通滑鼠。)

4) 在虛擬機器中,我啟動了 SetPoint 軟體,然後前往可讓您為各種按鈕設定自訂操作的畫面。然後回到 Wireshark,我開始捕獲滑鼠的 USB 總線,然後立即進入 VM/SetPoint,將按鈕分配從 DPI +/- 更改為按鍵分配,然後立即返回 Wireshark 並停止捕獲。 (我又重複了大約 10-15 次,將設定更改為不同的模式,主要是因為我不確定需要多少數據,但經過檢查,我實際上只需要前 1-2 個捕獲。)

假設您的滑鼠運作方式與我的滑鼠運作方式大致相似(我猜是這樣),您的捕獲可能總共有 16 幀,4x GET DESCRIPTOR,然後是 3x(2xURB_CONTROL out + 2xURB_INTERRUPT in)。您正在尋找的是 3 個較長的 URB_CONTROL 輸出幀。我捕獲的幀之一的示例是:

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

我們正在尋找的是來自每個較長“URB_CONTROL out”幀的響應的最後 7 個位元組(在上面,“10 01 80 65 82 85 ff”)。最後,我從以下位置下載了“g_hack”的源代碼:git,並在頂部拼湊出我的滑鼠產品程式碼和一個新選項(我將其設定為0/1,並在其中使用if 語句,因為這只是一個非常粗略的概念證明),這會將我的滑鼠切換為“驅動程式”模式”或“DPI 模式”。

之後,所需要做的就是在您選擇的重新映射程序中設置新可用的滑鼠按鈕(我使用了easygestures,因為這是我發現的UI 的第一件事- 它可能有也可能沒有更好的替代品)。

相關內容