禁用/重新映射Logitech G400鼠标DPI按钮

我使用的是Logitech MX-518鼠标,但它一直存在响应问题,导致我要求更换支持。 而不是另外518,他们发给我一个罗技G400鼠标,因为518已经停产。 这会导致问题,因为虽然lomoco支持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 

@Koviko – 我有一个类似的鼠标 – 罗技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)控制器。 然后我添加了一个从现有设备填充的新USBfilter,并选择了我的Logitech鼠标接收器(供应商ID 046d,产品c245,为您),然后启动了VM。

(注意:在此之后,我需要插入第二个鼠标,因为我必须控制我的常规鼠标到Windows VM,以便SetPoint软件可以看到它存在的东西不仅仅是通用鼠标。)

4)在VM中,我随后启动了SetPoint软件,然后转到允许您为各种按钮设置自定义操作的屏幕。 然后回到Wireshark,我开始在USB总线上捕获鼠标,然后立即进入VM / SetPoint,并将按钮分配从DPI +/-更改为Keystroke Assignment,然后立即返回Wireshark并停止捕获。 (我重复了大约10-15次,将设置更改为不同的模式,主要是因为我不确定我需要多少数据,但在审核之后,我真的只需要前1-2次捕获。)

假设你的鼠标工作模糊地类似于我的,我猜它会,你的捕获可能总共有16帧,4x GET DESCRIPTOR,然后3x(2xURB_CONTROL输出+ 2xURB_INTERRUPT输入)。 您正在寻找的是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 

我们要寻找的是来自响应的最后7个字节(在上面,’10 01 80 65 82 85 ff’),来自每个较长的’URB_CONTROL out’帧。 最后,我从Git下载了“g_hack”的源代码,并在顶部拼写了我的鼠标产品代码和一个新选项(我将它设置为0/1,其中包含if语句,因为它只是一个非常粗略的概念certificate)将我的鼠标切换到“驱动模式”或“DPI模式”。

之后,所需要的只是在您选择的重映射程序中设置新的鼠标按钮(我使用了easygestures,因为这是我找到的第一个带有UI的东西 – 它可能有也可能没有更好的替代品)。