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 设备

  1. 获取 PXN V10 Pro 的 USB 设备 ID

    1
    2
    lsusb | grep -i -E 'pxn'
    Bus 009 Device 005: ID 36e6:400b PXN PXN V10 Pro
    可以看到设备 ID 是 36e6:400b

  2. 修改游戏启动参数,添加环境变量 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
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    4312.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
    可以看到 Proton 在枚举 /dev/hidraw* 时提示没有权限访问 hidraw 设备
    hidraw 是 Linux 给 HID (Human Interface Device) 设备提供的一种“原始访问接口”

    1
    2
    3
    4
    ls -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
    可以看到 PXN V10 Pro 的 hidraw 设备是 hidraw5、hidraw6、hidraw7,但是 Proton 无法访问这些设备,所以没有力反馈

二、修改 udev 规则,给 PXN V10 Pro 的 hidraw 设备添加访问权限

  1. 查看当前 hidraw 设备的权限

    1
    2
    3
    4
    ls -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
    可以看到这些设备的权限是 root 用户独占的,所以普通用户无法访问

  2. 创建 udev 规则文件

    1
    2
    3
    sudo tee /etc/udev/rules.d/99-pxn-v10pro-hidraw.rules >/dev/null <<'EOF'
    KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess"
    EOF
    这条 udev 规则会匹配所有 hidraw 设备节点,并将其权限设置为 0666,也就是允许所有用户读写;
    同时添加 uaccess 标签,以便系统在支持的会话环境下,为当前本地登录用户自动授予设备访问权限。
    注意这条规则是比较宽泛的,如果担心安全问题,可以改成更具体的规则。

  3. 重新加载 udev 规则并触发

    1
    2
    sudo udevadm control --reload-rules
    sudo udevadm trigger

  4. 重插方向盘后再看

    1
    2
    3
    4
    ls -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
    可以看到这些设备的权限已经变成了 0666,普通用户可以访问

三、修改 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" />
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 的识别比较好,运行游戏后就自动添加了这一条配置?


Arch Linux Steam Proton PXN V10 Pro 力反馈问题
https://term-inator.github.io/2026/03/29/arch-linux-steam-proton-force-feedback/
作者
Sicong Chen
发布于
2026年3月29日
更新于
2026年3月29日
许可协议