Arch Linux Steam Proton PXN V10 Pro 力反馈问题
本文最后更新于 2026年3月29日 下午
背景
最近想在 linux 中玩一些开车游戏,比如 尘埃2(Dirt Rally 2.0)和 神力科莎(Assetto Corsa),但是接上方向盘后发现没有力反馈
环境
宿主机:Proxmox VE 9.1
虚拟机:EndeavourOS
内核版本:6.19.9-arch1-1
方向盘:莱仕达(PXN)V10 Pro
分析
之前安装的 欧卡2 有力反馈,查看 Steam 库发现 欧卡2 支持原生 linux,而在 Windows 中,尘埃2 和 神力科莎 支持力反馈,所以应该是 Proton 的问题。尘埃2 还有特殊的问题,因为在 Windows 中要替换 device_defines.xml 才能让 PXN V10 Pro 的力反馈正常工作,但这个文件不一定能在 Proton 中正常工作。
过程
一、修改游戏启动参数,显式指定 Proton 访问 hidraw 设备
获取 PXN V10 Pro 的 USB 设备 ID
可以看到设备 ID 是 36e6:400b1
2lsusb | grep -i -E 'pxn'
Bus 009 Device 005: ID 36e6:400b PXN PXN V10 Pro修改游戏启动参数,添加环境变量 PROTON_ENABLE_HIDRAW=0x36e6/0x400b,强制 Proton 访问这个设备的 hidraw 接口 在 Steam 游戏库中右键点击游戏,选择“属性”,在“启动选项”中添加以下内容:
1
PROTON_LOG=1 WINEDEBUG=+timestamp,+hid,+plugplay,+joystick,+winebus SDL_JOYSTICK_WHEEL_DEVICES=0x36e6/0x400b PROTON_ENABLE_HIDRAW=0x36e6/0x400b %command%- PROTON_LOG=1:生成 ~/steam-690790.log 这类 Proton 日志
- WINEDEBUG=+timestamp,+hid,+plugplay,+joystick,+winebus:把 HID、即插即用、摇杆、winebus 这些输入相关日志打出来
- SDL_JOYSTICK_WHEEL_DEVICES=0x36e6/0x400b:告诉 SDL 这个设备是个方向盘
- PROTON_ENABLE_HIDRAW=0x36e6/0x400b:强制 Proton 访问这个设备的 hidraw 接口
运行游戏后获取日志
1
grep -Ei 'hidraw|winebus|joystick|plugplay|36e6|400b|pxn' ~/steam-690790.log | tail -n 400可以看到 Proton 在枚举 /dev/hidraw* 时提示没有权限访问 hidraw 设备1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
184312.688:00b8:trace:hid:maybe_add_devnode Considering /dev/hidraw9...
4312.688:00b8:trace:hid:maybe_add_devnode Unable to open "/dev/hidraw9", ignoring: Permission denied
4312.688:00b8:trace:hid:maybe_add_devnode Considering /dev/hidraw2...
4312.688:00b8:trace:hid:maybe_add_devnode Unable to open "/dev/hidraw2", ignoring: Permission denied
4312.688:00b8:trace:hid:maybe_add_devnode Considering /dev/hidraw1...
4312.688:00b8:trace:hid:maybe_add_devnode Unable to open "/dev/hidraw1", ignoring: Permission denied
4312.688:00b8:trace:hid:maybe_add_devnode Considering /dev/hidraw8...
4312.688:00b8:trace:hid:maybe_add_devnode Unable to open "/dev/hidraw8", ignoring: Permission denied
4312.688:00b8:trace:hid:maybe_add_devnode Considering /dev/hidraw7...
4312.688:00b8:trace:hid:maybe_add_devnode Unable to open "/dev/hidraw7", ignoring: Permission denied
4312.688:00b8:trace:hid:maybe_add_devnode Considering /dev/hidraw6...
4312.688:00b8:trace:hid:maybe_add_devnode Unable to open "/dev/hidraw6", ignoring: Permission denied
4312.688:00b8:trace:hid:maybe_add_devnode Considering /dev/hidraw5...
4312.688:00b8:trace:hid:maybe_add_devnode Unable to open "/dev/hidraw5", ignoring: Permission denied
4312.688:00b8:trace:hid:maybe_add_devnode Considering /dev/hidraw4...
4312.688:00b8:trace:hid:maybe_add_devnode Unable to open "/dev/hidraw4", ignoring: Permission denied
4312.688:00b8:trace:hid:maybe_add_devnode Considering /dev/hidraw3...
4312.688:00b8:trace:hid:maybe_add_devnode Unable to open "/dev/hidraw3", ignoring: Permission denied
hidraw 是 Linux 给 HID (Human Interface Device) 设备提供的一种“原始访问接口”可以看到 PXN V10 Pro 的 hidraw 设备是 hidraw5、hidraw6、hidraw7,但是 Proton 无法访问这些设备,所以没有力反馈1
2
3
4ls -l /dev/input/by-id/
usb-PXN_PXN_V10_Pro_4171200542288672-hidraw -> ../../hidraw5
usb-PXN_PXN_V10_Pro_4171200542288672-if01-hidraw -> ../../hidraw6
usb-PXN_PXN_V10_Pro_4171200542288672-if02-hidraw -> ../../hidraw7
二、修改 udev 规则,给 PXN V10 Pro 的 hidraw 设备添加访问权限
查看当前 hidraw 设备的权限
可以看到这些设备的权限是 root 用户独占的,所以普通用户无法访问1
2
3
4ls -l /dev/hidraw5 /dev/hidraw6 /dev/hidraw7
crw------- 1 root root 242, 5 3月28日 18:57 /dev/hidraw5
crw------- 1 root root 242, 6 3月28日 18:57 /dev/hidraw6
crw------- 1 root root 242, 7 3月28日 18:57 /dev/hidraw7创建 udev 规则文件
这条 udev 规则会匹配所有 hidraw 设备节点,并将其权限设置为 0666,也就是允许所有用户读写;1
2
3sudo tee /etc/udev/rules.d/99-pxn-v10pro-hidraw.rules >/dev/null <<'EOF'
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess"
EOF
同时添加 uaccess 标签,以便系统在支持的会话环境下,为当前本地登录用户自动授予设备访问权限。
注意这条规则是比较宽泛的,如果担心安全问题,可以改成更具体的规则。重新加载 udev 规则并触发
1
2sudo udevadm control --reload-rules
sudo udevadm trigger重插方向盘后再看
可以看到这些设备的权限已经变成了 0666,普通用户可以访问1
2
3
4ls -l /dev/hidraw5 /dev/hidraw6 /dev/hidraw7
crw-rw-rw- 1 root root 242, 5 3月28日 20:25 /dev/hidraw5
crw-rw-rw- 1 root root 242, 6 3月28日 20:25 /dev/hidraw6
crw-rw-rw- 1 root root 242, 7 3月28日 20:25 /dev/hidraw7
三、修改 device_defines.xml
经过上面的修改后,尘埃2 虽然还没有力反馈,但是
神力科莎已有力反馈,说明 Proton 已经能够访问到方向盘。
尘埃2 的问题可能是因为 device_defines.xml 没有正确识别 PXN V10
Pro,Windows 下能用的 device_defines.xml 可能在 Proton
中不兼容,所以需要修改一下。
路径:path_to_steam/steamapps/common/DiRT Rally
2.0/input/devices/device_defines.xml
给从莱仕达《尘埃2.0》设置教程获取的
device_defines.xml 中增加以下内容: 1
<device id="{400B36E6-0000-0000-0000-504944564944}" name="PXN-V10PRO" priority="100" type="wheel" ffb="enabled" />
完整的 device_defines.xml: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146<?xml version="1.0" encoding="utf-8"?>
<device_list>
<!--
Device configuration file.
This file is used to define device definitions and their usage in the game.
To add a new device add a device node with following attributes:
id - The hardware id for PC devices is essentially '{PID#VID#-0000-0000-0000-504944564944}' where PID# and VID# is replaced with the Product ID and Vender ID of the device.
You can get these ID's by looking in Devices & Printers, Properties on the required device, Hardware tab, USB Input Device, Properties. In 'Information' you should see VID_#### and PID_####.
Take the hex values proceeding the underscore and replace into the above sample.
e.g.
'Device USB\VID_045E&PID_028E&IG_00\8&3afa0edf&0&00 was configured.'
{028E045E-0000-0000-0000-504944564944}
name - The name of the device matching the name used in the action maps.
priority - The higher the priority the more likely the device is used in automatic selection mode as the steering device over other devices.
{
0 - reserved for not_supported devices
1-5, 99 - reserved for library defaults
6-98 - pads
100+ - wheels
}
version (Optional) - Hardware version of the device, used in conjunction with action map device versioning
type (Optional) - The type of device, if set to 'unknown' will use the type returned from the driver, otherwise it will overwrite with the selection.
{
wheel
pad
joystick
keyboard
mouse
pedal
shifter
handbreak
unknown - Default
not_supported
}
ffb (Optional)
{
default - Default - Uses the value returned from the drivers
enabled - Force enables the ffb even if the drivers return disabled.
disabled - Force disables the ffb even if the drivers return enabled.
}
ffb_force (Optional)
{
1.0 - Default
}
ffb_friction (Optional)
{
1.0 - Default
}
ffb_high_pass (Optional)
{
0.0 - Default
}
default (Optional)
{
false - Default
true - Used only by input library defaults
}
collections_max (Optional) - A collection limit >1 or 0 will allow new devices to be created with the postfix '_col##' to the hardware id.
These devices can be used to extend functionality with additional device id's if the device supports them.
e.g.
<device id="{00050EB7-0000-0000-0000-504944564944}" name="ftec_csl_p1" priority="100" type="wheel" collections_max="2" />
You can now setup an optional collection id to give the second collection it's own action map.
<device id="{00050EB7-0000-0000-0000-504944564944}_col02" name="ftec_csl_p1_col02" priority="100" type="wheel" ffb="disabled" />
{
0 - No collection limit
1 - Default
>1
}
Unknown devices fallback to default libraries defined below in 'Library Default (fallbacks)' if not manually defined.
Unsupported devices that are not compatible with the game can be added to the 'Not Supported' list to prevent initialisation.
-->
<device id="{038E0EB7-0000-0000-0000-504944564944}" name="ftec_clubsport_v1" priority="100" type="wheel" />
<device id="{00010EB7-0000-0000-0000-504944564944}" name="ftec_clubsport" version="2" priority="100" type="wheel" />
<device id="{00040EB7-0000-0000-0000-504944564944}" name="ftec_clubsport" version="3" priority="100" type="wheel" />
<device id="{0E030EB7-0000-0000-0000-504944564944}" name="ftec_csl" priority="100" type="wheel" />
<device id="{00050EB7-0000-0000-0000-504944564944}" name="ftec_csl_ps4" priority="100" type="wheel" />
<device id="{18390EB7-0000-0000-0000-504944564944}" name="ftec_clubsport_pedal" priority="100" type="pedal" />
<device id="{183B0EB7-0000-0000-0000-504944564944}" name="ftec_clubsport_pedal_v3" version="3" priority="100" type="pedal" />
<device id="{1A920EB7-0000-0000-0000-504944564944}" name="ftec_clubsport_shifter" priority="100" type="shifter" />
<device id="{1A930EB7-0000-0000-0000-504944564944}" name="ftec_clubsport_handbrake" priority="100" type="handbrake" />
<device id="{B65A044F-0000-0000-0000-504944564944}" name="tm_f430" priority="100" type="wheel" official="false" />
<device id="{B677044F-0000-0000-0000-504944564944}" name="tm_t150" priority="100" type="wheel" />
<device id="{B66E044F-0000-0000-0000-504944564944}" name="tm_t300_rs" priority="100" type="wheel" ffb_force="0.9" />
<device id="{B689044F-0000-0000-0000-504944564944}" name="tm_ts_pc" priority="100" type="wheel" ffb_force="0.9" ffb_friction="1.5" />
<device id="{B667044F-0000-0000-0000-504944564944}" name="tm_t80" priority="100" type="wheel" />
<device id="{B67F044F-0000-0000-0000-504944564944}" name="tm_tmx" priority="100" type="wheel" />
<device id="{B671044F-0000-0000-0000-504944564944}" name="tm_f458" priority="100" type="wheel" official="false" />
<device id="{45030738-0000-0000-0000-504944564944}" name="mc_pro_r" priority="100" type="wheel" official="false" />
<device id="{B65E044F-0000-0000-0000-504944564944}" name="tm_t500_rs" priority="100" type="wheel" ffb_force="0.9" />
<device id="{B662044F-0000-0000-0000-504944564944}" name="tm_t500_rs_f1" priority="100" type="wheel" ffb_force="0.9" />
<device id="{B660044F-0000-0000-0000-504944564944}" name="tm_shifter" priority="100" type="shifter" />
<device id="{C262046D-0000-0000-0000-504944564944}" name="lg_g920" priority="100" type="wheel" />
<device id="{C24F046D-0000-0000-0000-504944564944}" name="lg_g29" priority="100" type="wheel" />
<device id="{10201DD2-0000-0000-0000-504944564944}" name="sim_steering" version="1" priority="100" type="wheel" ffb_force="0.5" />
<device id="{22301DD2-0000-0000-0000-504944564944}" name="sim_steering" version="2" priority="100" type="wheel" ffb_force="0.5" />
<device id="{22331DD2-0000-0000-0000-504944564944}" name="sim_steering" version="3" priority="100" type="wheel" ffb_force="0.5" />
<device id="{05220483-0000-0000-0000-504944564944}" name="simagic ddw" priority="100" type="wheel" />
<device id="{324511FF-0000-0000-0000-504944564944}" name="PXN-V10 Wheel" priority="100" type="wheel" />
<device id="{121211FF-0000-0000-0000-504944564944}" name="PXN-V12 Wheel" priority="100" type="wheel" />
<device id="{111211FF-0000-0000-0000-504944564944}" name="PXN-V12lite Wheel" priority="100" type="wheel" />
<device id="{121111FF-0000-0000-0000-504944564944}" name="PXN-V12lite Wheel" priority="100" type="wheel" />
<device id="{400B36E6-0000-0000-0000-504944564944}" name="PXN-V10 Wheel" priority="100" type="wheel" ffb="enabled" />
<device id="{804C1FC9-0000-0000-0000-504944564944}" name="simxperience_accuforce_pro" priority="100" type="wheel" />
<device id="{00110EB7-0000-0000-0000-504944564944}" name="ftec_csr_elite" priority="100" type="wheel" official="false" />
<device id="{01970EB7-0000-0000-0000-504944564944}" name="ftec_porsche_wheel" priority="100" type="wheel" official="false" />
<device id="{C294046D-0000-0000-0000-504944564944}" name="lg_driving_force_ex" priority="97" type="wheel" official="false" />
<device id="{C29A046D-0000-0000-0000-504944564944}" name="lg_driving_force_gt" priority="96" type="wheel" official="false" />
<device id="{C298046D-0000-0000-0000-504944564944}" name="lg_driving_force_pro" priority="98" type="wheel" ffb_friction="0.15" official="false" />
<device id="{C216046D-0000-0000-0000-504944564944}" name="lg_dual_action" priority="94" type="pad" official="false" />
<device id="{C218046D-0000-0000-0000-504944564944}" name="lg_f510" priority="94" type="pad" official="false" />
<device id="{C219046D-0000-0000-0000-504944564944}" name="lg_f710_and_cordless_rumblepad_2" priority="94" type="pad" official="false" />
<device id="{C299046D-0000-0000-0000-504944564944}" name="lg_g25" priority="100" type="wheel" />
<device id="{C29B046D-0000-0000-0000-504944564944}" name="lg_g27" priority="100" type="wheel" />
<device id="{CA03046D-0000-0000-0000-504944564944}" name="lg_momo_racing" priority="100" type="wheel" ffb_friction="0.15" official="false" />
<device id="{0034045E-0000-0000-0000-504944564944}" name="ms_sidewinder_ffb" priority="100" type="wheel" ffb="enabled" official="false" />
<device id="{00030E8F-0000-0000-0000-504944564944}" name="sl_strikefx" priority="94" type="pad" />
<device id="{910511C0-0000-0000-0000-504944564944}" name="sl_torid" priority="94" type="pad" />
<device id="{B323044F-0000-0000-0000-504944564944}" name="tm_dual_trigger_3_in_1" priority="94" type="pad" official="false" />
<device id="{B655044F-0000-0000-0000-504944564944}" name="tm_fgt_3_in_1" priority="100" type="wheel" official="false" />
<device id="{B653044F-0000-0000-0000-504944564944}" name="tm_rgt_ffb_pro" priority="100" type="wheel" official="false" />
<device id="{B669044F-0000-0000-0000-504944564944}" name="tm_tx" priority="100" type="wheel" />
<device id="{00080E8F-0000-0000-0000-504944564944}" name="grid2_pad" priority="100" type="wheel" official="false" />
<device id="{05C4054C-0000-0000-0000-504944564944}" name="ps4_pad" priority="100" type="pad" />
<device id="{0BA0054C-0000-0000-0000-504944564944}" name="ps4_pad" priority="100" type="pad" />
<device id="{B678044F-0000-0000-0000-504944564944}" name="tm_usb_adapter" priority="100" type="pedal" />
<device id="keyboard" name="keyboard" priority="2" type="keyboard" default="true" />
<device id="mouse" name="mouse" priority="1" type="mouse" default="true" />
<device id="xinput_pad" name="xinput_pad" priority="5" type="pad" default="true" />
<device id="xinput_wheel" name="xinput_wheel" priority="99" type="wheel" ffb_force="10" default="true" />
<device id="pad_virtual" name="pad_virtual" priority="0" type="pad" default="true" />
<device id="lib_direct_input" name="lib_direct_input" priority="5" type="unknown" default="true" />
<device id="lib_direct_input_pad" name="lib_direct_input_pad" priority="5" type="pad" default="true" />
<device id="lib_direct_input_wheel" name="lib_direct_input_wheel" priority="99" type="wheel" default="true" />
<device id="{C626046D-0000-0000-0000-504944564944}" name="space_navigator" priority="0" type="not_supported" />
<device id="{046DBEEF-0000-0000-0000-504944564944}" name="space_navigator_driver" priority="0" type="not_supported" />
<device id="{B695044F-0000-0000-0000-504944564944}" name="tm_tss_hb" priority="100" type="handbrake" />
<device id="{B692044F-0000-0000-0000-504944564944}" name="tm_ts_xw" priority="100" type="wheel" ffb_force="0.9" ffb_friction="1.5" />
<device id="{B684044F-0000-0000-0000-504944564944}" name="tm_t_gt" priority="100" type="wheel" ffb_force="0.9" ffb_friction="1.5" />
<device id="{B681044F-0000-0000-0000-504944564944}" name="tm_t_gt" priority="100" type="not_supported" />
<device id="{62040EB7-0000-0000-0000-504944564944}" name="ftec_csl_pedals" priority="100" type="pedal" />
</device_list>
注意:必要时可能要重建 Proton 前缀,ID 是 690790,也可能要重启 Steam 客户端
后记
后来发现之前在 Windows 上装的 尘埃2,内部的 device_defines.xml 里面有
V10 Pro 的定义,且 ID 是正确的,但是莱仕达官网上下载的
device_defines.xml 确实没有这一项
可能是 Windows 对 PXN V10 Pro
的识别比较好,运行游戏后就自动添加了这一条配置?