Python Виртуальное устройство не распознается Steam - PullRequest
1 голос
/ 08 января 2020

Я пытаюсь создать виртуальное устройство джойстика для использования в паровых играх на Linux (в частности, Manjaro). Я использую Python для этого проекта и пытался использовать библиотеки evdev и uinput с одинаковым результатом: система, кажется, распознает устройство (/ dev / input / files правильно создана, evdev и jscal все работают правильно, et c), но steam не принимает его в качестве действующего контроллера. Вот код, который я использую для его проверки:

#!/bin/python

import uinput
import time

def main():
    events = (
        uinput.BTN_JOYSTICK,
        uinput.ABS_X + (0, 255, 0, 0),
        uinput.ABS_Y + (0, 255, 0, 0),
        )

    with uinput.Device(events) as device:
        for i in range(20):
            device.emit(uinput.ABS_X, 5, syn=False)
            device.emit(uinput.ABS_Y, 5)
            time.sleep(2)
        device.emit_click(uinput.BTN_JOYSTICK)

if __name__ == "__main__":
    main()

Запустив пар в консоли, я получаю следующий вывод при подключении физического контроллера:

Local Device Found
  type: 046d ca04
  path: sdl://0
  serial_number:  - 0
  Manufacturer: 
  Product:      dev:xb1:Logitech Logitech Racing Wheel
  Release:      110
  Interface:    -1

!! Steam controller device opened for index 0.
Steam Controller reserving XInput slot 0
Controller 0 connected, configuring it now...
Installing breakpad exception handler for appid(steam)/version(1576908998)
Controller has an Invalid or missing unit serial number, setting to '46d-ca04-655a04e'
!! Controller 0 attributes:
  Type: 32
  ProductID: 51716
  Serial: 46d-ca04-655a04e
  Capabilities: 0018414f
  Firmware Version: 0
  Firmware Build Time: 2147483647 (Tue, 19 Jan 2038 03:14:07 GMT)
  Bootloader Build Time: 2147483647 (Tue, 19 Jan 2038 03:14:07 GMT)

Opted-in Controller Mask for AppId 413080: f
Loaded Config for Local Selection Path for App ID 413080, Controller 0
[413080]Non-Steam Controller Configs Enabled: 1
!! Controller 0 attributes:
  Type: 32
  ProductID: 51716
  Serial: 46d-ca04-655a04e
  Capabilities: 0018414f
  Firmware Version: 0
  Firmware Build Time: 2147483647 (Tue, 19 Jan 2038 03:14:07 GMT)
  Bootloader Build Time: 2147483647 (Tue, 19 Jan 2038 03:14:07 GMT)
Fetching Config Sets 0

Однако когда я Создавая виртуальное устройство, я получаю следующий вывод:

Local Device Found
  type: 0001 0001
  path: sdl://2
  serial_number:  - 0
  Manufacturer: 
  Product:      python-uinput
  Release:      0
  Interface:    -1

Local Device Found
  type: 0001 0001
  path: sdl://2
  serial_number:  - 0
  Manufacturer: 
  Product:      python-uinput
  Release:      0
  Interface:    -1

Таким образом, steam, похоже, правильно определяет устройство, но не распознает его как действующий игровой контроллер. Я попытался изменить все детали устройства (имя, тип, продукт и т. Д. c), чтобы соответствовать существующему физическому устройству, но безуспешно. Он выдает «Локальное устройство найдено» дважды для виртуального устройства и только один раз для физического, я не уверен, что это актуально или что его вызывает.

Заранее спасибо

...