Можно ли объединить два (или более) джойстика в один виртуальный?

Вопрос или проблема

С более мощным графическим адаптером появляется возможность играть в игры на Linux (в основном используя Lutris/Wine).

У меня классический набор джойстиков CH Products (Fighterstick, Pro Throttle и Pro Pedals), в основном для авиасимуляторов. Большинство современных игр поддерживают несколько джойстиков, и в этом плане все хорошо. Однако эта довольно старая игра поддерживает только один джойстик. Поэтому я подумал объединить их (как в старые добрые времена с CH Control Manager), чтобы создать один, но мощный джойстик для использования в игре.

К сожалению, попытка установить упомянутое программное обеспечение внутри префикса Wine ни к чему не привела (джойстики не были распознаны программным обеспечением). Поэтому я задумался о другом подходе: привязать джойстики с платформы хоста (то есть, из Linux). Все равно я почти всегда использую их вместе.

Это возможно? Если да, то как? В поисках в интернете я нашел несколько статей по переназначению кнопок и тому подобного (главным образом для Ubuntu), но ничего новее 2016 года, и все они, похоже, заброшенные проекты.

Если, с другой стороны, у кого-то есть опыт запуска CH Control Manager в Wine, это было бы тоже полезно.

https://sourceforge.net/projects/linuxjoymap/

Эта программа может вам помочь. (Я отвечаю на это сообщение, несмотря на его возраст, потому что, похоже, есть и другие сайты с похожими вопросами.)

Ответ или решение

Объединение нескольких джойстиков в один виртуальный на платформе Linux становится все более актуальной задачей, особенно с учетом увеличения мощности графических адаптеров, что позволяет запускать более требовательные игры через такие инструменты как Lutris или Wine. В частности, возникает потребность объединить классический набор джойстиков от CH Products, таких как Fighterstick, Pro Throttle и Pro Pedals, в один виртуальный контроллер для игр, которые поддерживают только одно устройство управления.

Теоретические основы (Theory)

Возможность объединения нескольких физических устройств ввода в одно виртуальное – это задача, которая чаще всего решается путем создания программного уровня абстракции входных данных. Простейший способ достижения этого – использование программного обеспечения, которое способно перехватывать и преобразовывать потоки данных от нескольких устройств в единый поток, маскируя его как данные от одного устройства. На Windows эта функция реализовывалась при помощи Control Manager от CH Products. На платформе Linux аналогов, к сожалению, значительно меньше, и их сложнее использовать из-за узкой направленности и ограниченной поддержки.

С точки зрения архитектуры операционной системы Linux, данная задача должна решаться на уровне пользовательского программного обеспечения, которое взаимодействует с модулем ядра evdev, обрабатывающим событийные устройства. Поток данных от каждого джойстика должен быть перехвачен, переинтерпретирован и передан на выход как от единого устройства.

Примеры использования (Example)

Один из подходов к решению данной задачи – использование утилит и скриптов для создания виртуальных устройств. Например, uinput – это интерфейс ядра Linux, который позволяет создавать виртуальные устройства, и можно потенциально использовать его для объединения нескольких исходных устройств. При помощи этого интерфейса возможно написать скрипт, который управляет объединением данных от всех джойстиков в одно виртуальное устройство.

Рассмотрим пример использования uinput в сочетании с Python. Библиотеки, такие как evdev и python-uinput, позволяют перехватывать события джойстика, обрабатывать их и передавать обработанные данные в созданное виртуальное устройство через uinput. Это возможно благодаря тому, что каждая из библиотек предоставляет доступ к низкоуровневым событиям устройств входа и позволяет манипулировать ими в пользовательском программном обеспечении.

Применение (Application)

Для реализации идеи объединения джойстиков в одно устройство на Linux, следует предпринять следующие шаги:

  1. Установка необходимых библиотек и утилит:

    • Установите необходимые библиотеки для работы с evdev и uinput. Это можно сделать через менеджер пакетов вашей системы, например, используя apt на дистрибутивах, основанных на Debian:
      sudo apt-get install python3-evdev python3-uinput
  2. Создание скрипта для объединения данных:

    • Напишите Python скрипт, который использует библиотеки evdev и uinput для захвата данных от всех используемых джойстиков и обработки этих данных до объединения их в одно виртуальное устройство.
    import evdev
    import uinput
    
    devices = [evdev.InputDevice(path) for path in evdev.list_devices()]
    
    # Identify your devices
    stick = devices[0]  # Предположим, что это ваш джойстик
    throttle = devices[1]  # Это Throttle
    pedals = devices[2]  # Это Pedals
    
    # Configure the virtual device
    capabilities = {
        uinput.ABS_X: (0, 255, 0, 0),
        uinput.ABS_Y: (0, 255, 0, 0),
        # Добавьте остальные элементы управления, например кнопки
    }
    
    with uinput.Device(events=capabilities.keys()) as virtual_device:
        async for event in devices[0].async_read_loop():
            # Обработка события и отправка в виртуальное устройство
            if event.type in (evdev.ecodes.EV_ABS, evdev.ecodes.EV_KEY):
                virtual_device.emit(event.code, event.value)
  3. Запуск и тестирование:

    • Проверьте работу виртуального устройства в вашей игровой среде для проверки его функциональности.
  4. Устранение ошибок и оптимизация:

    • Убедитесь, что ваш скрипт обрабатывает все важные события всех устройств, и отлаживайте его для учета любых нештатных ситуаций.

Несмотря на сложность, данный метод предоставляет гибкость в определении, какие именно уязвимости любого из джойстиков вы хотите использовать. Однако стоит помнить, что отсутствие общего GUI инструментария делает данный подход сложным в начале для неподготовленных пользователей, и скорее всего потребует специфического подтягивания навыков у пользователя. Впрочем, это может быть вынужденной мерой, так как софт для Windows, такой как Control Manager от CH Products, возможно потребует более сложных ухищрений для запуска через Wine из-за проблем с обнаружением оборудования.

Оцените материал
Добавить комментарий

Капча загружается...