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 的完整范围。如果所有这些都满足,那么一切都正常,您可以玩游戏了。:)

如果不是,则可能存在问题。尝试校准摇杆,如果仍然无法工作,请阅读本文档的驱动程序部分、故障排除部分和常见问题解答。

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 模块插入内核时,在内核命令行或模块命令行上指定类型。参数是

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

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

类型

含义

该端口无模拟摇杆

自动

自动检测摇杆

2键

2键 n轴摇杆

Y型摇杆

Y型线缆上的两个2键2轴摇杆

Y型手柄

Y型线缆上的两个2键2轴游戏手柄

fcs

Thrustmaster FCS 兼容摇杆

chf

带 CH Flightstick 兼容方向帽的摇杆

fullchf

CH Flightstick 兼容,带两个方向帽和6个按钮

游戏手柄

4/6键 n轴游戏手柄

8键手柄

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

手柄按钮 X

13

手柄按钮 Y

14

手柄按钮 U

15

手柄按钮 V

16

Saitek F1-F4 按钮

17

Saitek 数字模式

19

游戏手柄

20

摇杆2 轴 X1

21

摇杆2 轴 Y1

22

摇杆2 轴 X2

23

摇杆2 轴 Y2

24

摇杆2 按钮 A

25

摇杆2 按钮 B

26

摇杆2 按钮 C

27

摇杆2 按钮 D

31

摇杆2 游戏手柄

6.3.2. Microsoft SideWinder 摇杆

Microsoft ‘数字超速’ 协议由 sidewinder.c 模块支持。所有当前支持的摇杆

  • Microsoft SideWinder 3D Pro

  • Microsoft SideWinder 力反馈 Pro

  • Microsoft SideWinder 力反馈方向盘

  • Microsoft SideWinder FreeStyle Pro

  • Microsoft SideWinder 游戏手柄(最多四个,可链式连接)

  • Microsoft SideWinder 精准 Pro

  • Microsoft SideWinder 精准 Pro USB

均可自动检测,因此无需模块参数。

3D Pro 有一个注意事项。尽管摇杆只有8个按钮,但报告有9个按钮。第9个按钮是摇杆背面上的模式开关。然而,移动它会重置摇杆,并使其在大约三分之一秒内无响应。此外,摇杆也会重新居中,将此时的位置作为新的中心位置。如果您想使用它,请三思。

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

6.3.3. Logitech ADI 设备

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

  • Logitech CyberMan 2

  • Logitech ThunderPad 数字版

  • Logitech WingMan Extreme 数字版

  • Logitech WingMan Formula

  • Logitech WingMan Interceptor

  • Logitech WingMan 游戏手柄

  • Logitech WingMan 游戏手柄 USB

  • Logitech WingMan 极限游戏手柄

  • Logitech WingMan Extreme 数字 3D

ADI 设备可自动检测,该驱动程序支持在单个游戏端口上连接多达两个设备(任意组合),可使用 Y 型线缆或链式连接。

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

6.3.4. Gravis GrIP

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

  • Gravis GamePad Pro

  • Gravis BlackHawk 数字版

  • 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 设备由 a3d.c 模块支持。它目前支持

  • FPGaming Assassin 3D

  • MadCatz Panther

  • MadCatz Panther XL

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

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

6.3.6. ThrustMaster DirectConnect (BSP)

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

  • ThrustMaster Millennium 3D Interceptor

  • ThrustMaster 3D Rage 手柄

  • ThrustMaster Fusion 数字游戏手柄

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

  • ThrustMaster FragMaster

  • ThrustMaster Attack Throttle

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

TMDC 设备可自动检测,因此无需模块参数。最多两个 TMDC 设备可以使用 Y 型线缆连接到单个游戏端口。

6.3.7. Creative Labs Blaster

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

  • Creative Blaster 游戏手柄 Cobra

最多两个此设备可以使用 Y 型线缆连接到单个游戏端口。

6.3.8. Genius 数字摇杆

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

  • Genius Flight2000 F-23 摇杆

  • Genius Flight2000 F-31 摇杆

  • Genius G-09D 游戏手柄

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

6.3.9. InterAct 数字摇杆

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

  • InterAct HammerHead/FX 游戏手柄

  • InterAct ProPad8 游戏手柄

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

6.3.10. PDPI Lightning 4 游戏卡

PDPI Lightning 4 游戏卡由 lightning.c 模块支持。模块加载后,模拟驱动程序可用于处理摇杆。数字通信摇杆仅在端口 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 非常相似。SoundFusion 端口的此模式以及普通模式均由 cs461x.c 模块支持。

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. Logitech SWIFT 设备

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

  • Logitech WingMan Warrior

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

inputattach --warrior /dev/tts/x &

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

6.3.19. Magellan / Space Mouse

由 LogiCad3d(前身为 Space Systems)为许多其他公司(Logitech、HP 等)制造的 Magellan(或 Space Mouse)由 joy-magellan 模块支持。它目前仅支持

  • Magellan 3D

  • Space Mouse

型号;‘Plus’ 版本上的附加按钮尚不受支持。

要使用它,您需要使用以下命令将串口连接到驱动程序

inputattach --magellan /dev/tts/x &

命令。之后 Magellan 将被检测、初始化,会发出蜂鸣声,并且 /dev/input/jsX 设备应该变得可用。

6.3.20. I-Force 设备

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

  • AVB Mag Turbo Force

  • AVB Top Shot Pegasus

  • AVB Top Shot 力反馈方向盘

  • Boeder 力反馈方向盘

  • Logitech WingMan Force

  • Logitech WingMan Force 方向盘

  • Guillemot Race Leader 力反馈

  • Guillemot 力反馈赛车方向盘

  • Thrustmaster Motor Sport GT

要使用它,您需要使用以下命令将串口连接到驱动程序

inputattach --iforce /dev/tts/x &

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

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

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

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

6.3.21. Gravis Stinger 游戏手柄

Gravis Stinger 串口游戏手柄,设计用于笔记本电脑,由 stinger.c 模块支持。要使用它,请使用以下命令将串口连接到驱动程序

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

哦,别忘了阅读常见问题解答!:)

6.5. 常见问题

:

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

:

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

:

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

:

是的,有可能,但这会烧坏您的串口或手柄。当然,它也无法工作。

:

我的摇杆不适用于 Quake / Quake 2。原因是什么?

:

Quake / Quake 2 不支持摇杆。使用 joy2key 为它们模拟按键。