6.1. 简介

Linux 的操纵杆驱动程序为各种操纵杆和类似设备提供支持。它基于一个更大的项目,旨在支持 Linux 中的所有输入设备。

该项目的邮件列表是

发送 “subscribe linux-input” 到 majordomo@vger.kernel.org 以订阅它。

6.2. 用法

对于基本用法,您只需在内核配置中选择正确的选项,即可完成设置。

6.2.1. 实用程序

对于测试和其他目的(例如串行设备),有一组实用程序,例如 jstestjscalevtest,通常打包为 joystickinput-utilsevtest 等。

如果您的操纵杆连接到串行端口,则需要 inputattach 实用程序。

6.2.2. 设备节点

为了让应用程序能够使用操纵杆,应该在 /dev 中创建设备节点。通常它是由系统自动完成的,但也可以手动完成

cd /dev
rm js*
mkdir input
mknod input/js0 c 13 0
mknod input/js1 c 13 1
mknod input/js2 c 13 2
mknod input/js3 c 13 3
ln -s input/js0 js0
ln -s input/js1 js1
ln -s input/js2 js2
ln -s input/js3 js3

为了使用 inpututils 进行测试,创建这些也很方便

mknod input/event0 c 13 64
mknod input/event1 c 13 65
mknod input/event2 c 13 66
mknod input/event3 c 13 67

6.2.3. 需要的模块

为了使所有操纵杆驱动程序都能正常工作,您需要在内核中加载或编译用户空间接口模块

modprobe joydev

对于游戏端口操纵杆,您还必须加载游戏端口驱动程序

modprobe ns558

对于串行端口操纵杆,您需要加载串行输入行规程模块并启动 inputattach 实用程序

modprobe serport
inputattach -xxx /dev/tts/X &

除此之外,您还需要操纵杆驱动程序模块本身,最常见的情况是您会有一个模拟操纵杆

modprobe analog

对于自动模块加载,类似这样的方法可能会起作用 - 根据您的需要进行定制

alias tty-ldisc-2 serport
alias char-major-13 input
above input joydev ns558 analog
options analog map=gamepad,none,2btn

6.2.4. 验证它是否工作

为了测试操纵杆驱动程序的功能,实用程序包中有一个 jstest 程序。您可以通过键入来运行它

jstest /dev/input/js0

它应该显示一行带有操纵杆值的行,当您移动摇杆并按下其按钮时,这些值会更新。当操纵杆处于中心位置时,所有轴都应为零。它们不应自行抖动到其他接近的值,并且在摇杆的任何其他位置也应保持稳定。它们的范围应为 -32767 到 32767。如果满足所有这些条件,那就一切正常,您可以玩游戏了。 :)

如果不是这样,则可能存在问题。尝试校准操纵杆,如果仍然不起作用,请阅读此文件的驱动程序部分、故障排除部分和 FAQ。

6.2.5. 校准

对于大多数操纵杆,您不需要任何手动校准,因为操纵杆应该由驱动程序自动校准。但是,对于一些不使用线性电阻的模拟操纵杆,或者如果您想要更高的精度,您可以使用 jscal 程序

jscal -c /dev/input/js0

包含在操纵杆软件包中,以设置比驱动程序自身选择的更好的校正系数。

校准操纵杆后,您可以使用 jstest 命令验证是否喜欢新的校准,如果喜欢,您可以将校正系数保存到文件中

jscal -p /dev/input/js0 > /etc/joystick.cal

并在您的 rc 脚本中添加一行来执行该文件

source /etc/joystick.cal

这样,在下次重新启动后,您的操纵杆将保持校准。您也可以将 jscal -p 行添加到您的关闭脚本中。

6.3. 特定于硬件的驱动程序信息

在本节中,将介绍每个单独的特定于硬件的驱动程序。

6.3.1. 模拟操纵杆

analog.c 驱动程序使用游戏端口的标准模拟输入,因此支持所有标准操纵杆和游戏手柄。它为此使用了一个非常先进的例程,允许在任何其他系统上都找不到的数据精度。

它还支持扩展,例如与 CH Flightstick Pro、ThrustMaster FCS 或 6 和 8 按钮游戏手柄兼容的附加帽子和按钮。此驱动程序也支持 Saitek Cyborg “数字”操纵杆,因为它们基本上是经过改装的 CHF 操纵杆。

但是,唯一可以自动检测的类型是

  • 2 轴、4 按钮操纵杆

  • 3 轴、4 按钮操纵杆

  • 4 轴、4 按钮操纵杆

  • Saitek Cyborg “数字”操纵杆

对于其他操纵杆类型(更多/更少的轴、帽子和按钮)的支持,您需要在内核命令行或模块命令行上指定类型,将模拟插入内核时。参数是

analog.map=<type1>,<type2>,<type3>,....

“type” 是下表中操纵杆的类型,定义系统中游戏端口上存在的操纵杆,从 gameport0 开始,第二个“type”条目定义 gameport1 上的操纵杆,依此类推。

类型

含义

none

该端口上没有模拟操纵杆

auto

自动检测操纵杆

2btn

2 按钮 n 轴操纵杆

y-joy

Y 型电缆上的两个 2 按钮 2 轴操纵杆

y-pad

Y 型电缆上的两个 2 按钮 2 轴游戏手柄

fcs

Thrustmaster FCS 兼容操纵杆

chf

带有 CH Flightstick 兼容帽子的操纵杆

fullchf

CH Flightstick 兼容,带有两个帽子和 6 个按钮

gamepad

4/6 按钮 n 轴游戏手柄

gamepad8

8 按钮 2 轴游戏手柄

如果您的操纵杆不属于上述任何类别,您可以通过组合下表中的位来将类型指定为数字。除非您真的知道自己在做什么,否则不建议这样做。这不危险,但也不简单。

含义

0

轴 X1

1

轴 Y1

2

轴 X2

3

轴 Y2

4

按钮 A

5

按钮 B

6

按钮 C

7

按钮 D

8

CHF 按钮 X 和 Y

9

CHF 帽子 1

10

CHF 帽子 2

11

FCS 帽子

12

Pad 按钮 X

13

Pad 按钮 Y

14

Pad 按钮 U

15

Pad 按钮 V

16

Saitek F1-F4 按钮

17

Saitek 数字模式

19

游戏手柄

20

Joy2 轴 X1

21

Joy2 轴 Y1

22

Joy2 轴 X2

23

Joy2 轴 Y2

24

Joy2 按钮 A

25

Joy2 按钮 B

26

Joy2 按钮 C

27

Joy2 按钮 D

31

Joy2 游戏手柄

6.3.2. Microsoft SideWinder 操纵杆

sidewinder.c 模块支持 Microsoft “数字超速”协议。当前支持的所有操纵杆

  • Microsoft SideWinder 3D Pro

  • Microsoft SideWinder Force Feedback Pro

  • Microsoft SideWinder Force Feedback Wheel

  • Microsoft SideWinder FreeStyle Pro

  • Microsoft SideWinder GamePad(最多四个,链接在一起)

  • Microsoft SideWinder Precision Pro

  • Microsoft SideWinder Precision Pro USB

都是自动检测的,因此不需要模块参数。

3D Pro 有一个注意事项。报告了 9 个按钮,尽管操纵杆只有 8 个。第 9 个按钮是操纵杆后侧的模式开关。但是,移动它,您将重置操纵杆,并使其在约三分之一秒内无响应。此外,操纵杆还会重新居中,将这段时间内的位置作为新的中心位置。如果需要,可以使用它,但请先考虑清楚。

SideWinder Standard 不是数字操纵杆,因此由上述模拟驱动程序支持。

6.3.3. 罗技 ADI 设备

adi.c 模块支持罗技 ADI 协议。它应该支持任何使用此协议的罗技设备。这包括但不限于

  • 罗技 CyberMan 2

  • 罗技 ThunderPad Digital

  • 罗技 WingMan Extreme Digital

  • 罗技 WingMan Formula

  • 罗技 WingMan Interceptor

  • 罗技 WingMan GamePad

  • 罗技 WingMan GamePad USB

  • 罗技 WingMan GamePad Extreme

  • 罗技 WingMan Extreme Digital 3D

ADI 设备是自动检测的,并且该驱动程序支持单个游戏端口上的最多两个(任意组合)设备,使用 Y 型电缆或链接在一起。

罗技 WingMan 摇杆、罗技 WingMan Attack、罗技 WingMan Extreme 和罗技 WingMan ThunderPad 不是数字摇杆,而是由上述的模拟驱动程序处理。罗技 WingMan Warrior 和罗技 Magellan 由下面描述的串行驱动程序支持。罗技 WingMan Force 和罗技 WingMan Formula Force 由下面描述的 I-Force 驱动程序支持。罗技 CyberMan 尚不支持。

6.3.4. Gravis GrIP

grip.c 模块支持 Gravis GrIP 协议。它目前支持

  • Gravis GamePad Pro

  • Gravis BlackHawk Digital

  • Gravis Xterminator

  • Gravis Xterminator DualControl

所有这些设备都是自动检测的,您甚至可以使用最多两个这些手柄的任意组合,无论是串联在一起还是在单个游戏端口上使用 Y 型电缆。

GrIP MultiPort 尚不支持。Gravis Stinger 是一种串行设备,由 stinger 驱动程序支持。其他 Gravis 摇杆由模拟驱动程序支持。

6.3.5. FPGaming A3D 和 MadCatz A3D

由 FPGaming 创建的 Assassin 3D 协议,既被 FPGaming 自己使用,也授权给 MadCatz。a3d.c 模块支持 A3D 设备。它目前支持

  • FPGaming Assassin 3D

  • MadCatz Panther

  • MadCatz Panther XL

所有这些设备都是自动检测的。由于 Assassin 3D 和 Panther 允许将模拟摇杆连接到它们,您还需要加载模拟驱动程序来处理连接的摇杆。

轨迹球应该可以与 USB mousedev 模块作为普通鼠标一起工作。有关如何设置 USB 鼠标,请参阅 USB 文档。

6.3.6. ThrustMaster DirectConnect (BSP)

tmdc.c 模块支持 TM DirectConnect (BSP) 协议。这包括但不限于

  • ThrustMaster Millennium 3D Interceptor

  • ThrustMaster 3D Rage Pad

  • ThrustMaster Fusion Digital Game Pad

不直接支持但有望工作的设备是

  • ThrustMaster FragMaster

  • ThrustMaster Attack Throttle

如果您有其中一个,请与我联系。

TMDC 设备是自动检测的,因此不需要模块的参数。最多可以将两个 TMDC 设备连接到一个游戏端口,使用 Y 型电缆。

6.3.7. Creative Labs Blaster

cobra.c 模块支持 Blaster 协议。它仅支持

  • Creative Blaster GamePad Cobra

最多可以在单个游戏端口上使用两个此类设备,使用 Y 型电缆。

6.3.8. Genius 数字摇杆

gf2k.c 模块支持 Genius 数字通信摇杆。这包括

  • Genius Flight2000 F-23 摇杆

  • Genius Flight2000 F-31 摇杆

  • Genius G-09D 游戏手柄

其他 Genius 数字摇杆尚不支持,但可以相当容易地添加支持。

6.3.9. InterAct 数字摇杆

interact.c 模块支持 InterAct 数字通信摇杆。这包括

  • InterAct HammerHead/FX 游戏手柄

  • InterAct ProPad8 游戏手柄

其他 InterAct 数字摇杆尚不支持,但可以相当容易地添加支持。

6.3.10. PDPI Lightning 4 游戏卡

lightning.c 模块支持 PDPI Lightning 4 游戏卡。加载模块后,可以使用模拟驱动程序来处理摇杆。数字通信摇杆仅在端口 0 上工作,在使用 Y 型电缆时,您可以将最多 8 个模拟摇杆连接到单个 L4 卡,如果您在系统中安装了两张卡,则可以连接 16 个模拟摇杆。

6.3.11. Trident 4DWave / Aureal Vortex

带有 Trident 4DWave DX/NX 或 Aureal Vortex/Vortex2 芯片组的声卡提供“增强型游戏端口”模式,其中声卡处理轮询摇杆。pcigame.c 模块支持此模式。加载后,模拟驱动程序可以使用这些游戏端口的增强功能。

6.3.12. Crystal SoundFusion

带有 Crystal SoundFusion 芯片组的声卡提供“增强型游戏端口”,与上面的 4DWave 或 Vortex 非常相似。cs461x.c 模块支持此模式以及 SoundFusion 端口的正常模式。

6.3.13. SoundBlaster Live!

Live! 有一个特殊的 PCI 游戏端口,虽然它不提供像 4DWave 和朋友一样的任何“增强”功能,但它比其 ISA 对应端口快得多。它还需要特殊的支持,因此使用 emu10k1-gp.c 模块代替普通的 ns558.c 模块。

6.3.14. SoundBlaster 64 和 128 - ES1370 和 ES1371、ESS Solo1 和 S3 SonicVibes

这些 PCI 声卡具有特定的游戏端口。它们由声音驱动程序本身处理。请确保在摇杆菜单中选择游戏端口支持,并在声音菜单中为您的相应卡选择声卡支持。

6.3.15. Amiga

连接到 Amiga 的 Amiga 摇杆由 amijoy.c 驱动程序支持。由于它们无法自动检测,因此驱动程序有一个命令行

amijoy.map=<a>,<b>

a 和 b 定义连接到 Amiga 的 JOY0DAT 和 JOY1DAT 端口的摇杆。

摇杆类型

0

1

1 按钮数字摇杆

现在不支持更多摇杆类型,但如果我能接触到 Amiga,这种情况应该会在将来发生变化。

6.3.16. 游戏机和 8 位手柄和摇杆

这些手柄和摇杆不是为 PC 和其他运行 Linux 的计算机设计的,通常需要一个特殊的连接器才能通过并行端口连接它们。

有关更多信息,请参阅 并行端口摇杆驱动程序

6.3.17. SpaceTec/LabTec 设备

SpaceTec 串行设备使用 SpaceWare 协议进行通信。它由 spaceorb.c 和 spaceball.c 驱动程序支持。spaceorb.c 当前支持的设备是

  • SpaceTec SpaceBall Avenger

  • SpaceTec SpaceOrb 360

spaceball.c 当前支持的设备是

  • SpaceTec SpaceBall 4000 FLX

除了内核中的 spaceorb/spaceball 和 serport 模块之外,您还需要将其连接到串行端口。为此,请运行 inputattach 程序

inputattach --spaceorb /dev/tts/x &

inputattach --spaceball /dev/tts/x &

其中 /dev/tts/x 是连接设备的串行端口。执行此操作后,将报告该设备,并且将开始工作。

SpaceOrb 有一个需要注意的地方。按钮 #6,即球体底侧的按钮,虽然报告为一个普通的按钮,但会导致 SpaceOrb 的内部重新居中,将零点移动到按下按钮时球所在的位置。因此,在将其绑定到其他功能之前,请先考虑清楚。

SpaceTec SpaceBall 2003 FLX 和 3003 FLX 尚不支持。

6.3.18. 罗技 SWIFT 设备

warrior.c 模块支持 SWIFT 串行协议。它目前仅支持

  • 罗技 WingMan Warrior

但在未来,也可能支持罗技 CyberMan(原始版本,而不是 CM2)。要使用该模块,您需要在将模块插入/编译到内核后运行 inputattach

inputattach --warrior /dev/tts/x &

/dev/tts/x 是您的 Warrior 所连接的串行端口。

6.3.19. Magellan / Space Mouse

由 LogiCad3d(以前称为 Space Systems)为许多其他公司(罗技、惠普等)制造的 Magellan(或 Space Mouse)由 joy-magellan 模块支持。它目前仅支持

  • Magellan 3D

  • Space Mouse

型号;“Plus”版本上的其他按钮尚不支持。

要使用它,您需要使用

inputattach --magellan /dev/tts/x &

命令将串行端口连接到驱动程序。之后,将检测到 Magellan,对其进行初始化,它会发出蜂鸣声,并且 /dev/input/jsX 设备应该变得可用。

6.3.20. I-Force 设备

iforce 模块支持所有 I-Force 设备。这包括

  • AVB Mag Turbo Force

  • AVB Top Shot Pegasus

  • AVB Top Shot 力反馈赛车方向盘

  • Boeder 力反馈方向盘

  • 罗技 WingMan Force

  • 罗技 WingMan 力反馈方向盘

  • Guillemot Race Leader 力反馈

  • Guillemot 力反馈赛车方向盘

  • Thrustmaster Motor Sport GT

要使用它,您需要使用

inputattach --iforce /dev/tts/x &

命令。之后,将检测到 I-Force 设备,并且 /dev/input/jsX 设备应该变得可用。

如果您通过 USB 端口使用该设备,则不需要 inputattach 命令。

I-Force 驱动程序现在通过事件接口支持力反馈。

请注意,此模块_不_支持罗技 WingMan 3D 设备,而是由 hid 支持。这些设备不支持力反馈。罗技游戏手柄也是 hid 设备。

6.3.21. Gravis Stinger 游戏手柄

stinger.c 模块支持为笔记本电脑设计的 Gravis Stinger 串行端口游戏手柄。要使用它,请使用

inputattach --stinger /dev/tty/x &

其中 x 是串行端口的编号。

6.4. 故障排除

您很可能会遇到一些问题。为了测试驱动程序是否工作,如有疑问,请使用 jstest 实用程序的一些模式。最有用的模式是“normal” - 用于 1.x 接口,以及 “old” - 用于 “0.x” 接口。您可以通过输入以下命令来运行它:

jstest --normal /dev/input/js0
jstest --old    /dev/input/js0

此外,您还可以使用 evtest 实用程序进行测试

evtest /dev/input/event0

哦,还有阅读 FAQ!:)

6.5. 常见问题解答

:

运行 ‘jstest /dev/input/js0’ 导致 “找不到文件” 错误。原因是什么?

:

设备文件不存在。创建它们(请参阅第 2.2 节)。

:

是否可以将我的旧 Atari/Commodore/Amiga/游戏机操纵杆或使用 9 针 D 型 Cannon 连接器的游戏手柄连接到我 PC 的串行端口?

:

是的,这是可能的,但是它会烧毁您的串行端口或游戏手柄。当然,它也不会工作。

:

我的操纵杆在 Quake / Quake 2 中不起作用。原因是什么?

:

Quake / Quake 2 不支持操纵杆。请使用 joy2key 为它们模拟按键操作。