您链接的脚本仅查找 Joydev 设备。在 Linux 上,joydev 是较旧的游戏手柄界面,不支持振动。 Joydev 设备节点的路径可能类似于 /dev/input/js0。
较新的基于 evdev 的界面支持力反馈。检查/proc/bus/input/devices,找到joydev节点对应的evdev节点。例如,我连接了有线 Xbox 360 游戏手柄并获得以下输出:
I: Bus=0003 Vendor=045e Product=028e Version=0110
N: Name="Microsoft X-Box 360 pad"
P: Phys=usb-0000:00:14.0-1.1/input0
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1.1/2-1.1:1.0/input/input27
U: Uniq=
H: Handlers=event16 js0
B: PROP=0
B: EV=20000b
B: KEY=7cdb000000000000 0 0 0 0
B: ABS=3003f
B: FF=107030000 0
以“H:”开头的行表示 /dev/input/js0 和 /dev/input/event16 均引用 Xbox 游戏手柄。 /dev/input/event16 是 evdev 节点。
要测试设备上的振动,请使用 fftest 命令和 evdev 节点的路径。如果它支持振动,它应该为尝试上传到设备的一种或多种效果提供良好的结果:
$ fftest /dev/input/event16
Force feedback test program.
HOLD FIRMLY YOUR WHEEL OR JOYSTICK TO PREVENT DAMAGES
Device /dev/input/event16 opened
Features:
* Absolute axes: X, Y, Z, RX, RY, RZ, Hat 0 X, Hat 0 Y,
[3F 00 03 00 00 00 00 00 ]
* Relative axes:
[00 00 ]
* Force feedback effects types: Periodic, Rumble, Gain,
Force feedback periodic effects: Square, Triangle, Sine,
[00 00 00 00 00 00 00 00 00 00 03 07 01 00 00 00 ]
* Number of simultaneous effects: 16
Setting master gain to 75% ... OK
Uploading effect #0 (Periodic sinusoidal) ... OK (id 0)
Uploading effect #1 (Constant) ... Error: Invalid argument
Uploading effect #2 (Spring) ... Error: Invalid argument
Uploading effect #3 (Damper) ... Error: Invalid argument
Uploading effect #4 (Strong rumble, with heavy motor) ... OK (id 1)
Uploading effect #5 (Weak rumble, with light motor) ... OK (id 2)
Enter effect number, -1 to exit
如果您收到“权限被拒绝”错误,则可能意味着设备未安装兼容的驱动程序或驱动程序不支持力反馈。您不需要以 root 身份运行此命令来测试力反馈。
我对SHANWAN Android游戏手柄不熟悉。我有一台在 Linux 上运行的 SHANWAN 设备,它是一样的吗?
https://www.amazon.com/Gaming-Controller-Gamepad-Windows-Android/dp/B00OAYHIRA
IIRC,振动功能要求设备处于 XInput 模式,这样才能与 xpad 内核驱动程序一起工作。如果您的游戏手柄具有类似的模式切换功能,请尝试 XInput 模式。
一旦您验证了力反馈功能适用于您的设备,您应该能够使用 python-evdev 发送 FF 命令:
http://python-evdev.readthedocs.io/en/latest/