游戏手柄如何控制鼠标?

关于这个主题有很多问题:

  • 将鼠标和键盘重新映射到游戏手柄
  • 如何配置操纵杆或游戏手柄?
  • 如何通过我的键盘控制鼠标指针?

但这些问题/答案的目的是能够使用游戏手柄来玩游戏。

我想要一个使用游戏手柄来控制鼠标的解决方案。
在所有应用程序中用游戏手柄替换鼠标。
这样我就可以在沙发上使用无线游戏手柄控制客厅里的电脑。

按照Grumbel的回答,我在他的链接的支持下尝试了xboxdrv解决方案,特别是这个页面 :

1.从Ubuntu软件中心安装xboxdrv 0.8.2

如果需要,还可以安装uinputjoydev 。 我这样做了sudo modprobe uinput + sudo modprobe joydev

2.需要知道游戏手柄的事件

启动udevadm monitor --udev ,然后插入游戏手柄:

 $ udevadm monitor --udev monitor will print the received events for: UDEV - the event which udev sends out after rule processing UDEV [6722.377700] add /devices/pci0000:00/0000:00:1d.3/usb5/5-1 (usb) UDEV [6722.383264] add /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0 (usb) UDEV [6722.383333] add /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/0003:046D:C218.0003 (hid) UDEV [6722.383389] add /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/0003:046D:C218.0003/hidraw/hidraw1 (hidraw) UDEV [6722.387123] add /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/input/input10 (input) UDEV [6722.399284] add /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/input/input10/event8 (input) UDEV [6722.412128] add /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/input/input10/js0 (input) 

我得出结论,我的游戏手柄的事件是/ dev / input / event8

3.显示游戏手柄的每个键,轴,按钮的名称。

我们的想法是启动xboxdrv并测试每个按钮并在纸上记录结果。

 $ sudo xboxdrv --evdev /dev/input/event8 --evdev-debug Your Xbox/Xbox360 controller should now be available as: /dev/input/js1 /dev/input/event9 Press Ctrl-c to quit, use '--silent' to suppress the event output EV_ABS ABS_X 128 EV_ABS ABS_Y 128 ... 

在我的情况下,结果是: 在此处输入图像描述

4.设置配置文件

创建一个xboxdrv-mouse.ini文件以设置XY轴和鼠标左键和右键。
在这里,我设置了鼠标左键的游戏手柄按钮2和鼠标右键的3

 [xboxdrv] evdev=/dev/input/event8 silent=true [evdev-absmap] ABS_X=x1 ABS_Y=y1 [ui-axismap] x1=REL_X:10 y1=REL_Y:-10 [evdev-keymap] BTN_THUMB=a BTN_THUMB2=b [ui-buttonmap] a=BTN_LEFT b=BTN_RIGHT # EOF # 

请注意,REl_X和REL_Y的值似乎定义了鼠标的速度,通过定义负值,它反转了轴(请参阅此处了解REL_Y)

另一个具有更多按钮定义的示例

 [xboxdrv] evdev=/dev/input/event8 silent=true [evdev-absmap] ABS_X=x1 ABS_Y=y1 ABS_HAT0X=x2 ABS_HAT0Y=y2 [ui-axismap] x1=REL_X:10 y1=REL_Y:-10 x2=KEY_LEFT:KEY_RIGHT y2=KEY_DOWN:KEY_UP [evdev-keymap] BTN_TRIGGER=x BTN_TOP=y BTN_THUMB=a BTN_THUMB2=b BTN_PINKIE=rt BTN_BASE2=rb BTN_TOP2=lt BTN_BASE=lb BTN_BASE3=back BTN_BASE4=start [ui-buttonmap] x=KEY_KPENTER y=KEY_SPACE a=BTN_LEFT b=BTN_RIGHT rt=KEY_KP8 rb=KEY_KP2 lt=KEY_KP6 lb=KEY_KP4 back=KEY_LEFTSHIFT start=KEY_RIGHTCTRL # EOF # 

5.启动它

 sudo xboxdrv --config xboxdrv-mouse.ini 

要避免使用sudo启动它,请创建一个udev规则 。

结论

它工作正常,对我来说是最好的解决方案。

xboxdrv应该能够做你想要的。 然而,它需要一些配置来使用非Xbox游戏手柄,这有点像(详情请查看man-page,使用–evdev-debug查找按钮和轴名称):

 #!/bin/sh xboxdrv \ --evdev /dev/input/event9 \ --evdev-absmap ABS_X=X1,ABS_Y=y1 \ --evdev-absmap ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y \ --evdev-keymap BTN_BASE=LB,BTN_BASE2=RB \ --evdev-keymap BTN_BASE3=guide,BTN_TOP2=start,BTN_PINKIE=back \ --evdev-keymap BTN_THUMB=x,BTN_TOP=a,BTN_THUMB2=b,BTN_TRIGGER=y \ \ --ui-clear \ --ui-buttonmap rb=BTN_LEFT,lb=BTN_RIGHT,start=KEY_ESC,back=KEY_F1 \ --ui-buttonmap a=KEY_SPACE \ --ui-axismap X1=REL_X:20,Y1=REL_Y:20 \ --ui-axismap DPAD_X=KEY_A:KEY_D:1,DPAD_Y=KEY_W:KEY_S:1 \ -s "$@" # EOF # 

在ubuntu上未经测试,但这个简单的配方适用于Debian Jessie(使用我的iBuffalo经典usb游戏手柄 ):

  1. 安装正确的xorg模块:

$ sudo apt install xserver-xorg-input-joystick

  1. 重启显示管理器(或重启)

同样适用于Nintendo 64游戏手柄

 [xboxdrv] evdev=/dev/input/event9 silent=true [evdev-absmap] ABS_X=x1 ABS_Y=y1 ABS_RZ=x2 ABS_Z=y2 ABS_HAT0X=dpad_x ABS_HAT0Y=dpad_y [axismap] -X2=X2 [ui-axismap] x1=REL_X:30 y1=REL_Y:30 x2=KEY_Q:KEY_D y2=KEY_DOWN:KEY_UP dpad_x=KEY_LEFT:KEY_RIGHT dpad_y=KEY_DOWN:KEY_UP [evdev-keymap] BTN_THUMB2=b BTN_THUMB=a BTN_BASE3=back BTN_BASE4=start BTN_BASE=lb BTN_BASE2=rb [ui-buttonmap] start=KEY_KPENTER rb=BTN_RIGHT lb=void a=REL_WHEEL:-1:150 b=REL_WHEEL:1:150 back=BTN_LEFT 

一些细节

我的目标是将其设置为第一人称射击游戏,因为我不习惯使用鼠标和键盘。 然而,GNU / Linux上的大多数游戏都不支持非常好的游戏手柄。 我试着像着名的N64游戏007 – GoldenEye上的高级游戏手柄模式那样做。

这样,您还可以使用游戏手柄来替换鼠标。

我的选择

  • 在主棒上模拟鼠标
  • 黄色C(x2 y2)按钮设置为UP,DOWN键盘键和azerty键盘上的键,用于横向移动(Q和D;更改键盘布局的字母)
  • 向右下方分配到十字架
  • 鼠标左键单击Z(后退)进行拍摄,右键单击R(rb)。 您可能希望将R按钮更改为KEY_SPACE以跳转,具体取决于您玩的游戏。
  • A和B位于鼠标滚轮上,因此您可以轻松更换武器。
  • L按钮(lb)未设置

希望这会有助于其他玩家。

Todo如果有人知道怎么做,我会很有兴趣知道如何设置一种“中心区域”,即使鼠标光盘不完全在中间,鼠标光标也不会移动。 当您不使用游戏手柄但仍然启用时,这将避免光标移动一点。

我已经尝试了xboxdrv它有点工作,但它对我来说永远不会完美,我不得不手动配置配置文件。 更好的解决方案似乎是AntiMicro项目: https : //github.com/Ryochan7/antimicro配置非常简单(虽然GUI相当基本),只需点击几下我就可以:

  • 将我的打击垫(F710无线)配置为鼠标 – 只需在一组中为所需function分配合适的按钮/按钮;
  • 得到中央“罗技标志”键,在鼠标和键盘操作之间切换 – 我只需要第二组,其中没有任何键分配,中央键在这两种模式之间切换,因此我可以使用“鼠标模式”启动游戏,然后切换到“打击垫模式”进行播放;
  • AntiMicro似乎也自动应用“死区” – 当我使用xboxdrv时,我必须在配置文件中手动执行此操作,因为光标一直缓慢向一个方向漂移,这里一切都很好。

我认为这个项目很新,但对我来说,它似乎到目前为止几乎完美。 小问题是它创建了“托盘”图标,允许切换左上角的配置文件,这不适合Ubuntu全局菜单方案。