Linux 游戏杆在 SDL 游戏中似乎校准错误(Freespace 2 Open)

Chr*_*yle 4 linux sdl game-controller

我有一个 USB 游戏杆(Saitek Cyborg 3D),它在我最近安装的 Ubuntu 9.04 盒子上显示为/dev/input/js0,并且jstest正如我所期望的那样显示 +-32767 范围内的值。我刚刚找到了FreeSpace Open的副本,这是一款使用 SDL 的游戏,大约一年前在之前的 Ubuntu 安装上没有问题,而且操纵杆似乎校准得很差。所有轴(X、Y、扭曲、油门)似乎至少偏离中心 20%。X 轴和 Y 轴至少肯定没有到达终点。

一个相关的消息,在2009年1月SDL邮件列表上没有收到任何具体的答案。

这是来自项目源的joy-unix.cpp。我并没有完全运行主干,但是正如您从那里的修订日志中看到的那样,该文件已经超过 3 年没有发生实际的代码更改。

Chr*_*yle 5

我注意到d2x(一个下降端口)中的问题,它也使用 SDL,所以我去挖掘 SDL。testjoystick从 SDL 来源也显示了这个问题。查看SDL linux joystick driver,提到了这个问题。joydev_pattern在那个文件中搜索,你会看到他们在做什么;搜索calibrate,他们确实提到了这个问题。基本上,他们/dev/input/event6优先使用(或以任何方式)/dev/input/js0,除非使用 编译--disable-input-events,甚至知道无法校准事件设备(即设置的校准js0将被忽略)。

找到所有这些之后,涉及该configure选项的Google 搜索显示隐藏在 Linux howto for 的评论中fs2_open实际上已经有人遇到了这个问题

我已经向 Ubuntu报告了这个错误。要解决此问题,请选择以下任何一项:

  • 设置SDL_JOYSTICK_DEVICE=/dev/input/js0(您可以将其放入/etc/environment并重新启动以将其应用到任何地方)。编辑: SDL 仍会将evdev设备作为第二个操纵杆,因此在类似的游戏中d2x,默认情况下也会响应第二个操纵杆,请访问选项屏幕并删除那些额外的绑定。
  • 重新编译 libSDL --disable-input-events
  • rmmod evdev (很可能会丢失您拥有的任何不寻常的输入设备)。