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。如果满足所有这些条件,那就一切正常,您可以玩游戏了。 :)
如果不是这样,则可能存在问题。尝试校准操纵杆,如果仍然不起作用,请阅读此文件的驱动程序部分、故障排除部分和 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 为它们模拟按键操作。