You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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全局权限排查问题(测试后建议改回默认权限):
    sudo chmod 666 /dev/uinput
    
    重启Steam后重新检测设备

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工具验证输入响应:
    sudo pacman -S jstest-gtk
    
    确认设备能正常工作后,再尝试在Steam原生游戏中检测,逐步定位问题是否来自Proton

内容的提问来源于stack exchange,提问作者ThatCoolCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 08:03:55