Steam无法检测python-uinput虚拟输入设备问题求助
问题描述
- 用Arduino + python-uinput制作自定义输入设备,系统游戏杆管理器能识别为
/dev/input/js0,但Steam的Settings/Controller/General Controller Settings/界面完全检测不到该设备 - 六月用相同代码制作的原型曾正常工作,现在失效
- 测试时已拔掉原本连接的有线USB游戏杆,操作系统为Manjaro Linux(KDE Plasma,X11),目标游戏运行在Proton环境
最小示例代码:
import uinput import math import time events = (uinput.BTN_JOYSTICK, uinput.ABS_X + (0, 255, 0, 0), uinput.ABS_Y + (0, 255, 0, 0), uinput.ABS_Z + (0, 255, 0, 0)) device = uinput.Device(events) device.emit(uinput.ABS_X, 128, syn=False) device.emit(uinput.ABS_Y, 128, syn=False) device.emit(uinput.ABS_Z, 128, syn=False) total = 0 while True: device.emit(uinput.ABS_X, int(math.sin(total) * 128 + 127)) time.sleep(0.1) total += 0.1
可能的解决方法
1. 检查设备权限与Steam访问权限
- 将当前用户加入
input用户组,确保能正常访问输入设备:
执行后注销再重新登录生效sudo usermod -aG input $USER - 临时赋予
/dev/uinput全局权限排查问题(测试后建议改回默认权限):
重启Steam后重新检测设备sudo chmod 666 /dev/uinput
2. 补充uinput设备的完整描述信息
Steam对输入设备的识别依赖完整的HID元数据,当前代码缺少设备名称、厂商ID等关键信息,修改代码补充:
import uinput import math import time events = ( uinput.BTN_JOYSTICK, uinput.ABS_X + (0, 255, 0, 0), uinput.ABS_Y + (0, 255, 0, 0), uinput.ABS_Z + (0, 255, 0, 0), ) # 初始化设备时指定名称、厂商ID、产品ID device = uinput.Device( events, name="Custom Arduino Joystick", vendor=0x1234, product=0x5678 ) device.emit(uinput.ABS_X, 128, syn=False) device.emit(uinput.ABS_Y, 128, syn=False) device.emit(uinput.ABS_Z, 128, syn=False) total = 0 while True: device.emit(uinput.ABS_X, int(math.sin(total) * 128 + 127)) time.sleep(0.1) total += 0.1
3. 调整Steam Input兼容性设置
- 打开Steam的
Settings/Controller/General Controller Settings,勾选Generic Gamepad Configuration Support - 进入目标游戏的属性页面,在
Compatibility选项中,确认勾选Force the use of a specific Steam Play compatibility tool,并尝试切换到最新稳定版或曾经正常工作的Proton版本
4. 排查系统输入栈变化
- 重新安装uinput相关依赖:
sudo pacman -Syu python-uinput uinput - 检查
joydev和uinput内核模块是否加载:
若未加载,手动加载并设置开机自动加载:lsmod | grep -E "joydev|uinput"sudo modprobe joydev sudo modprobe uinput echo "joydev" | sudo tee -a /etc/modules-load.d/uinput.conf echo "uinput" | sudo tee -a /etc/modules-load.d/uinput.conf
5. 排除Proton环境影响
先在原生Linux环境中测试设备可用性:
- 安装
jstest-gtk工具验证输入响应:
确认设备能正常工作后,再尝试在Steam原生游戏中检测,逐步定位问题是否来自Protonsudo pacman -S jstest-gtk
内容的提问来源于stack exchange,提问作者ThatCoolCoder
相关产品推荐
相关产品推荐

