我按照此页面上的指南进行操作 ->https://steamcommunity.com/app/221410/discussions/0/558748653738497361/让我的通用 USB 有线游戏手柄在我的笔记本上运行。但正如指南中提到的,每次重启时都必须进行初始化。此外,正如指南中提到的,初始化命令必须包含在“/etc/rc.local 或您的发行版所称的任何内容”中,我引用了这些内容。我需要这个“rc.local”在基于 Ubuntu 18.04 的发行版中的位置。
另外,这是我第一次连接游戏手柄,因此我在此过程中犯了一些错误,例如没有为游戏手柄分配正确的按键组合。这导致了多个“js”文件,如“js0”、“js1”……“js5”输入设备,其中“js5”是成功的游戏手柄输入。这些额外的输入“js”设备可以删除吗?
此外,还有其他方法可以永久将我的游戏手柄注册为输入设备吗?
如果有帮助的话,我上次(也是成功)使用的命令是:sudo xboxdrv --evdev /dev/input/event21 --evdev-absmap ABS_Z=x1,ABS_Y=y1,ABS_RX=x2,ABS_RZ=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --axismap -Y1=Y1,-Y2=Y2 --evdev-keymap BTN_TOP=x,BTN_TRIGGER=y,BTN_THUMB2=a,BTN_THUMB=b,BTN_BASE3=back,BTN_BASE4=start,BTN_TOP2=lb,BTN_PINKIE=rb,BTN_BASE=lt,BTN_BASE2=rt,BTN_BASE5=tl,BTN_BASE6=tr --mimic-xpad --silent &
此命令向我显示了一个输出:您的 Xbox/Xbox360 控制器现在应该可以用作:/dev/input/js5 /dev/input/event22
请帮忙。
答案1
好的,我差不多已经把这件事整理好了。
我也在其他两个论坛问过这个问题,我得到的唯一答案是使用 SDL2 Gamepad Tool (http://generalarcade.com/gamepadtool/)。此工具原本应该在不使用 xboxdrv 命令的情况下注册我的游戏手柄。此工具确实识别了我的游戏手柄,将我的游戏手柄命名为“DragonRise_Inc. Generic USB Joystick”,而不是之前显示的“Generic USB Joystick”,这样我就可以在游戏中使用我的游戏手柄了。但映射是错误的,即右侧方向键会加速我的玩家和其他异常。即使通过手动映射此工具中的按钮,也会发现相同的行为。
所以,这个工具在某种程度上还是有点帮助的(也许正如它的名字所暗示的,它对基于 SDL2 的游戏更有帮助,也许我想要用游戏手柄玩的游戏不是基于 SDL2 的。)我想要用游戏手柄玩的游戏是 Steam Linux 上的“Teddy Floppy Ear - The Race”。
接下来,我又遇到了同样的问题。我搜索了又搜索,在这个网站上找到了一个对我有帮助的问题。页面链接是如何在 Ubuntu 16.10 上启动时执行命令(rc.local 替代方案)根据此页面,Ubuntu >= 16.10 没有 rc.local 文件,但一位好心人给出了制作一个的说明。所以我继续创建了这个文件。
该页面上给出的创建 rc.local 文件的命令是:
printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local
sudo chmod +x /etc/rc.local
sudo reboot
接下来,我对附加的 js 输入设备不满意,因此我进行了更多搜索。我的搜索将我带到了以下两个页面:https://github.com/RetroPie/RetroPie-Setup/wiki/Universal-Controller-Calibration-&-Mapping-Using-xboxdrv和https://retropie.org.uk/forum/topic/7096/xboxdrv-guidance-needed这些页面对 xboxdrv 命令进行了非常专门的讨论。从这些页面中我得到了命令“sudo killall xboxdrv”。此命令删除了所有额外的 js 输入设备。并表明使用游戏手柄的名称调用 xboxdrv 初始化命令比使用事件编号更好。我还发现,如果连接到笔记本电脑的 USB 设备更多/更少,事件编号会发生变化。在这里,通过 SDL2 Gamepad Tool 注册的游戏手柄名称派上了用场。
现在,我有一个可以工作的设置。我有一个包含以下内容的 rc.local 文件:
#!/bin/bash
sudo killall xboxdrv
sudo killall xboxdrv
sudo xboxdrv --evdev /dev/input/by-id/usb-DragonRise_Inc._Generic_USB_Joystick-event-joystick --silent --mimic-xpad --evdev-absmap ABS_Z=x1,ABS_Y=y1,ABS_RX=x2,ABS_RZ=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --axismap -Y1=Y1,-Y2=Y2 --evdev-keymap BTN_THUMB2=a,BTN_THUMB=b,BTN_TOP=x,BTN_TRIGGER=y,BTN_TOP2=lb,BTN_PINKIE=rb,BTN_BASE=lt,BTN_BASE2=rt, BTN_BASE5=tl,BTN_BASE6=tr,BTN_BASE3=back,BTN_BASE4=start &
exit 0
我的设置中需要双重“sudo killall xboxdrv”命令,我不知道确切的原因,但如果没有这个双重命令,就会出现列出附加 js 输入设备的问题。
唯一的问题是,我必须在启动笔记本电脑之前将游戏手柄连接到笔记本电脑上。如果我在启动笔记本电脑后连接游戏手柄,游戏手柄就不会初始化。我可以在连接游戏手柄后手动运行命令,但对于使用我的笔记本电脑的每个人来说,这是不可能的。
我的下一步是找到一种方法来创建一个包含命令的脚本文件,这样我就可以在连接游戏手柄后双击该脚本文件,这将初始化游戏手柄。但我还没有找到一种方法将 sudo 命令合并到一个简单的脚本中。
编辑(2018年8月14日): 好的,所以我现在有一种方法可以调用初始化脚本而不使用 rc.local 文件。这是一个更好的解决方案,并且每次我想连接游戏手柄时都可以使用。(我从另一个我问过这个问题的论坛上得到了这种方法)。
我在 /home/mark/.my-controller.sh 创建了初始化脚本(这里,将“mark”替换为您的用户名)
这个.my-controller.sh文件有以下代码:
#!/bin/bash
sudo killall xboxdrv
sudo killall xboxdrv
sudo xboxdrv --evdev /dev/input/by-id/usb-DragonRise_Inc._Generic_USB_Joystick-event-joystick --silent --mimic-xpad --evdev-absmap ABS_Z=x1,ABS_Y=y1,ABS_RX=x2,ABS_RZ=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --axismap -Y1=Y1,-Y2=Y2 --evdev-keymap BTN_THUMB2=a,BTN_THUMB=b,BTN_TOP=x,BTN_TRIGGER=y,BTN_TOP2=lb,BTN_PINKIE=rb,BTN_BASE=lt,BTN_BASE2=rt, BTN_BASE5=tl,BTN_BASE6=tr,BTN_BASE3=back,BTN_BASE4=start &
exit 0
接下来,在 /etc/sudoers 文件中添加以下文本(将 /home/mark 替换为您的家庭名称):
# Added manually
mark ALL = NOPASSWD: /home/mark/.my-controller.sh
接下来,创建将调用此脚本的 .desktop 文件(将“/home/mark”替换为您的主目录名称)(并且,如果使用“gnome-terminal”,则将“sakura”替换为“gnome-terminal”):
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Name=StartMyGamepad
Comment=To initialize my gamepad
Exec=sakura -e "bash -c 'sudo /home/mark/.my-controller.sh;$SHELL'"
Icon=utilities-terminal
Terminal=false
Type=Application
Categories=Application;
现在,当您想要使用游戏手柄时,首先将游戏手柄连接到 PC,然后打开 .desktop 文件。这将打开一个终端,要求您输入密码。输入您的密码,然后运行初始化游戏手柄的脚本。