游戏手柄如何控制鼠标?


9

关于此主题有很多问题:

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

我想使用游戏手柄来控制鼠标的解决方案。
在所有应用程序中用游戏手柄替换鼠标。
这样,我可以通过无线游戏手柄在沙发上控制客厅中的计算机。

Answers:


8

遵循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规则

结论

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


这仅适用于XBOX控制器吗?
Gman Smith

@gmansmith不,我将其用于Logitec游戏手柄
Boris

4

在ubuntu上未经测试,但是该简单的配方在Debian Jessie上有效(使用我的iBuffalo经典USB游戏手柄):

  1. 安装正确的xorg模块:

$ sudo apt install xserver-xorg-input-joystick

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

在Raspbian Buster-Raspberry Pi 3 B +上运行良好。xbox 360兼容模式下的8bitdo游戏手柄和通用snes风格的USB游戏手柄效果很好。谢谢。
思想上

3

xboxdrv应该能够执行您想要的操作。但是,它需要一些配置才能与非Xbox游戏手柄配合使用,类似以下操作(有关详细信息,请参见手册页,使用--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 #

困难,我只会得到“无效的论点”
鲍里斯(Boris)

一些更多的信息将有所帮助,您的配置如何,xboxdrv的确切输出是什么,使用的版本是什么,等等。同样,以上只是一个示例,您必须为控制器自定义它才能使用它工作。
Grumbel

谢谢格鲁贝尔!尽量不要偷懒,我阅读了文档,最后设置了xboxdrv配置,详细说明了我的答案
鲍里斯(Boris)

2

与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 Game 007-GoldenEye上的高级游戏手柄模式那样进行操作。

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

我的选择

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

希望这会对其他玩家有所帮助。

Todo 如果有人知道该怎么做,我很想知道如何设置一种“中心区域”,即使光标不在中间,鼠标光标也不会移动。当您不使用游戏板但仍处于启用状态时,这将避免光标移动一点。


1

我已经尝试过xboxdrv了,但是它对我来说从来都不是完美的,我不得不手动配置配置文件。更好的解决方案似乎是AntiMicro项目:https : //github.com/Ryochan7/antimicro ,配置非常简单(尽管GUI相当基本),只需单击几下,我就能:

  • 将我的键盘(F710 Wireless)配置为鼠标-只需将一组适当的按钮/操纵杆分配给所需功能即可;
  • 获得中央“ Logitech徽标”键以在鼠标和键盘操作之间切换-我只是简单地进行了第二组设置,其中未分配任何键,并且中央键在这两种模式之间切换,因此我可以使用“鼠标模式”启动游戏,然后切换到“ Pad Mode”播放;
  • AntiMicro似乎也自动自动应用“死区”-当我使用xboxdrv时,我必须在配置文件中手动执行此操作,因为光标一直在一个方向上缓慢移动,这一切都很好。

我认为该项目是一个相当新的项目,但对我而言,到目前为止,它似乎可以完美地运行。一个小问题是,它创建了“托盘”图标,该图标允许在左上角切换配置文件,该图标不太适合Ubuntu全局菜单方案。


谢谢你 AntiMicro非常不错。我能够使旧的Sixaxis(即Dualshock 3减去隆隆声)发送键盘和鼠标事件。设置非常简单,从我所见,开发人员对错误报告的响应非常迅速。
劳伦斯·贡萨尔维斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.