我正在尝试使用Arduino和python来制作一个定制的输入设备,但是蒸汽根本没有检测到它。如果我导航到Settings/Controller/General Controller Settings/,它就没有显示任何设备。虚拟设备在操作系统操纵杆管理器中以/dev/input/js0的形式显示得很好。奇怪的是,这过去是可行的--我在六月制作的一个原型使用了相同的代码。
here上发布了一个非常类似的问题,但一直没有得到答案。
最起码的例子:
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与KDE等离子,X11。我试图使用控制器的具体游戏是在Proton中运行。
发布于 2022-07-12 22:36:15
解决了!!
看起来,蒸汽对虚拟设备上缺少按钮并不满意。添加一堆未使用的按钮使其工作:
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)https://stackoverflow.com/questions/72949752
复制相似问题