Steam未检测到python-uinput



我试图使用Arduino和python-uinput制作自定义输入设备,但Steam根本没有检测到它。如果我导航到Settings/Controller/General Controller Settings/,它没有显示任何设备。虚拟设备在操作系统操纵杆管理器中显示为/dev/input/js0。奇怪的是,这曾经有效-我在6月份制作的一个原型使用相同的代码。

一个非常类似的问题被张贴在这里,但从来没有得到答案。

最小的例子:

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

我在这台电脑上也使用了一个有线USB操纵杆,但在测试时它是拔掉的。操作系统是Manjaro Linux与KDE Plasma, X11。我正在尝试使用控制器的特定游戏是在Proton中运行。

解决! !

看来Steam对虚拟设备上缺少按键并不满意。添加一堆未使用的按钮使其工作:

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),
uinput.ABS_RX,
uinput.BTN_0, uinput.BTN_1, uinput.BTN_2, uinput.BTN_3, uinput.BTN_4, uinput.BTN_5, uinput.BTN_6, uinput.BTN_7, uinput.BTN_8, uinput.BTN_9)
device = uinput.Device(events)
time.sleep(1) # give device some time to set up
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

如果这仍然不起作用,试着在主代码之前发送一些假的按钮按钮:

device.emit(uinput.ABS_RX, 0)
device.emit(uinput.BTN_JOYSTICK, 0)
device.emit(uinput.BTN_0, 0)
device.emit(uinput.BTN_1, 0)
device.emit(uinput.BTN_2, 0)
device.emit(uinput.BTN_3, 0)
device.emit(uinput.BTN_4, 0)
device.emit(uinput.BTN_5, 0)
device.emit(uinput.BTN_6, 0)
device.emit(uinput.BTN_7, 0)
device.emit(uinput.BTN_8, 0)
device.emit(uinput.BTN_9, 0)

最新更新