6.1. 介绍¶
Linux 的摇杆驱动程序支持多种摇杆和类似设备。它基于一个旨在支持 Linux 中所有输入设备的更大项目。
该项目的邮件列表是
发送“subscribe linux-input”到 majordomo@vger.kernel.org 以订阅该邮件列表。
6.2. 使用¶
对于基本用法,您只需在内核配置中选择正确的选项即可。
6.2.1. 实用工具¶
出于测试及其他目的(例如串口设备),有一套实用工具,例如 jstest
、jscal
和 evtest
,通常打包为 joystick
、input-utils
、evtest
等。
如果您的摇杆连接到串口,则需要 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 为它们模拟按键。