Joy to key linux

Gamepad (Русский)

Перевод этой статьи или раздела не отражает оригинальное содержание.

Работа с джойстиками в Linux подразумевает некоторые сложности. Не потому что они плохо поддерживаются, а потому, что вам нужно определить, какие модули подключить, чтобы ваш геймпад заработал, а это не всегда очевидно.

Contents

Системы ввода для геймпадов

Вообще, в Linux имеется две различных системы ввода для джойстиков. Оригинальный интерфейс ‘Joystick’ и более новый, основанный на ‘evdev’.

/dev/input/jsX указывают на интерфейс API ‘Joystick’, а /dev/input/event* — на варианты с ‘evdev'(то же относится и к другим устройствам, таким, как мыши и клавиатуры). Символические ссылки на эти устройства также находятся тут: /dev/input/by-id/ и тут: /dev/input/by-path/ , где традиционные названия, использующие API ‘Joystick’ заканчиваются на -joystick , в то время, как использующие’evdev’ — на -event-joystick .

Большинство новых игр используют по умолчанию интерфейс ‘evdev’, так как он поддерживает более детализированную информацию о доступных кнопках и аналоговых стиках, а также поддерживает функцию обратной связи.

Хотя SDL1.x по умолчанию использует интерфейс ‘evdev’, вы можете принудительно заставить ее использовать старый API ‘Joystick’, установив переменную окружения SDL_JOYSTICK_DEVICE=/dev/input/js0 . Это может помочь во многих играх, таких, как X3. SDL2.x поддерживает только новый интерфейс ‘evdev’.

Также стоит упомянуть, что существует еще драйвер xorg xf86-input-joystick . Он лишь позволяет вам контролировать клавиатуру и мышь при помощи джойстика в xorg, что не актуально для большинства пользователей. Отключение этой функции описано ниже в #Отключение управления мышью при помощи джойстика, но в большинстве случаев вам нужно просто-напросто удалить этот пакет.

Определение нужных модулей

Если вы не используете совсем старый джойстик, который использует гейм-порт или собственный USB-протокол, вам понадобятся только стандартные USB HID модули.

Для подробного изучения модулей, связанных с джойстиками в Linux, вам нужно получить доступ к исходным кодам ядра Linux — в особенности к секции Documentation. К сожалению, пакеты ядра pacman не содержат необходимой информации. Если у вас есть скачанные исходные коды ядра, посмотрите в Documentation/input/joydev/ . Вы также можете просматривать дерево ядра на сайте kernel.org, нажав ссылку «browse» для ядра, которые вы используете, а затем нажав на ссылку «tree» вверху. Вот ссылка на документацию по последней версии ядра.

Некоторые геймпады требуют специфических модулей. Например, такие, как контроллер Microsoft Sidewinder ( sidewinder ) или цифровые контроллеры Logitech ( adi ). Множество старых моделей джойстиков будут работать с простым модулем analog . Если ваш джойстик подключается к гейм-порту звуковой карты, вам понадобятся драйверы для вашей звуковой карты, однако, для некоторых из них, например для SoundBlaster Live, имеется специальный драйвер гейм-порта ( emu10k1-gp ). Старинные карты с интерфейсом ISA могут потребовать модуль ns558 , который является стандартным модулем для гейм-порта.

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

Подключение модулей для аналоговых устройств

Вам нужно подключить модуль для вашего гейм-порта ( ns558 , emu10k1-gp , cs461x , и т.д. . ), модуль джойстика ( analog , sidewinder , adi , и т.д. ) и в конце концов — драйвер джойстика для ядра ( joydev ). Создайте новый файл с названиями этих модулей в /etc/modules-load.d/ , либо просто используйте modprobe. Модуль gameport должен подключиться автоматически, т.к. является зависимым от других.

Джойстики USB

Просто используйте modprobe для драйвера джойстика ( usbhid и joydev ). Если у вас мышь и клавиатура USB, модуль usbhid уже подключен, и вам остается только подключить модуль joydev .

Проверка конфигурации

Когда все модули подключены, вы должны увидеть новое устройство /dev/input/js0 и файл, заканчивающийся на -event-joystick в папке /dev/input/by-id . Просто используйте cat на этих файлах устройств, чтобы понять, что джойстик работает — покрутите стики, понажимайте кнопки, вы увидите кракозябры, выводимые на экран при взаимодействии с джойстиком.

Оба интерфейса также поддерживаются wine и определяются как отдельные устройства. Это можно проверить при помощи wine control joy.cpl .

Joystick API

Существует много приложений, которые позволяют проверить работу джойстика с использованием этого старого API, наиболее простое — jstest из пакета joyutils . Если вывод программы сложно прочитать из-за того, что строка слишком длинная, вы можете воспользоваться графическими средствами. В KDE4 есть встроенная утилита в панели Input Devices системных настроек. Также можно воспользоваться пакетом jstest-gtk-git AUR .

Читайте также:  Error 1722 the windows installer package

Пользоваться jstest очень просто — просто запустите jstest /dev/input/js0 , и программа начнет выводить строку с состоянием всех осей стиков (нормализованных к <-32767,32767>) и кнопок.

При запуске jstest-gtk , программа покажет список всех доступных геймпадов, и вам нужно будет только выбрать один из них и нажать кнопку «Properties»

evdev API

Новый API ‘evdev’ может быть проверен с использованием программы проверки геймпада SDL2, либо при помощи программы evtest из репозитория community. Установите sdl2-jstest-git AUR , а затем запустите sdl2-jstest —test 0 . Если у вас подключено несколько контроллеров, используйте sdl2-jstest —list , чтобы вывести список их ID.

Для проверки обратной связи геймпада, используйте fftest из пакета linuxconsole :

Настройка «мертвых зон» и калибровка

Если вы хотите настроить «мертвые зоны» (или вовсе убрать их) для ваших аналоговых устройств ввода, вы должны сделать это отдельно для xorg (для эмуляции клавиатуры и мыши), Joystick API и evdev API.

«Мертвые зоны» в wine

Добавьте следующую запись в реестр и пропишите ей строковое значение от 0 до 10000 (затрагивает все оси стиков)

«Мертвые зоны» в Xorg

Добавьте примерно такую строку в /etc/X11/xorg.conf.d/50-joystick.conf перед EndSection :

1000 — это значение по умолчанию, но вы можете сделать его любым между 0 и 30 000. Чтобы узнать номер оси, смотрите раздел «Проверка конфигурации» этой статьи. Если вы знаете номер конкретной оси, просто допишите deadzone=value после пробела в конце параметра.

«Мертвые зоны» Joystick API

Самый простой способ — использовать jstest-gtk из пакета jstest-gtk-git AUR . Выберите контроллер, который вы хотите отредактировать, нажмите кнопку «Calibration» внизу диалогового окна (не нажимайте «Start Calibration» в этом окне!). Теперь вы можете установить значения параметров CenterMin и CenterMax (которые отвечают за центральную «мертвую зону»), RangeMin и RangeMax, которые отвечают за крайние точки «мертвых зон». Учтите, что настройки калибровки применяются, когда приложение подключается к геймпаду, так что вам придется перезапустить игру или приложение, чтобы увидеть изменения в калибровке.

После настройки «мертвых зон», используйте jscal , чтобы создать новый шелл-скрипт с нужными значениями.

Теперь вам нужно создать правило для udev, например /etc/udev/rules.d и назвать его 85-jscal.rules , чтобы скрипт автоматически выполнялся, когда вы подключаете контроллер:

Для получения idVendor и idProduct, используйте udevadm info —attribute-walk —name /dev/input/jsX . Если у вас несколько джойстиков, используйте названия `/dev/input/by-id/*-joystick`.

«Мертвые зоны» evdev API

В данный момент не существует отдельного приложения, позволяющего откалибровать джойстик для evdev API, но есть G25manage , распространяемое вместе с игрой VDrift, которое позволяет настраивать центральные «мертвые зоны».

Самый простой способ получить VDrift — скачать его (github) и скомпилировать при помощи make .

После этого вы сможете изменить конфигурацию при помощи:

Для изменения «мертвых зон» любых осей, используйте следующую команду:

Используйтесь файлом правил udev для установки новых значений автоматически при подключении джойстика.

Учтите, что внутри ядра этот параметр называется flatness и устанавливается при помощи EVIOCSABS ioctl .

Конфигурация по умолчанию будет выглядеть примерно так:

В то время, как более удачная настройка может быть достигнута примерно так (повторить для каждой оси):

Настройка кривых

Если ваша игра использует ограниченное количество кнопок или поддерживает несколько контроллеров, можно достичь хороших результатов используя xboxdrv для изменения кривых джойстика.

Ниже приведены настройки, которые я использовал для Saitek X-55 HOTAS:

Это привязывает событие EV_ABS с id 40 и 41 (используйте xboxdrv с параметром —evdev-debug для просмотра списка зарегистрированных событий), которое является обычно недоступным «курсором мыши» на гашетке, на первый геймпад и гашетку второго геймпада, а также закрепляет верхние и нижние границы, потому что они не всегда полностью обрабатываются.

Немного интереснее настройка для стика:

Здесь осуществляется привязка трех осей джойстика к осям геймпада и меняется их калибровка (минимальное значение, среднее значение, максимальное значение), «мертвые зоны» (отрицательная сторона, положительная сторона, флаг для включения сглаживания) и, наконец, смена кривой джойстика на более плоскую в середине.

Вы также можете изменить отзывчивость, установив значение ‘sen’ (sensitivity). Установка этого значения в 0 даст вам линейную чувствительность, значение -1 — очень неотзывчивую ось, а значение 1 — очень отзывчивую. Можно использовать средние значения, чтобы сделать ее более или менее отзывчивой. Xboxdrv использует квадратичную формулу для подсчета финального значение, так что установка значения этого параметра даст более «гладкий» эффект, чем установка значения ‘rest’, приведенная выше.

Еще одна полезная функция xboxdrv — программа может работать как со старым Joystick API, так и с новым evded, так что она должна быть совместима практически с каждым приложением.

Отключение управления мышью при помощи джойстика

Если вы хотите играть в игры при помощи контроллера, вы, возможно, захотите отключить управление курсором мыши при помощью джойстика. Чтобы сделать это, отредактируйте файл /etc/X11/xorg.conf.d/50-joystick.conf примерно так:

Использование джойстика для отправки нажатия клавиш

Существует несколько программ, позволяющих отправлять нажатия клавиш при помощи джойстика, таких, как, например, qjoypad AUR или antimicrox-git AUR . Все они не требуют дополнительной настройки X.org.

Читайте также:  Users user appdata local microsoft windows temporary internet files

при помощи X.org

Это хорошее решение для систем, где перезагрузка Xorg случается очень редко, потому что это статическая конфигурация, загружаемая только при запуске X. Я использую его на моем медиа-сервере под управлением XBMC с Logitech Cordless RublePad 2. Из-за проблемы с тем, что «крестовина» распознается как еще одна ось, мне приходилось запускать Joy2key в качестве обходного пути. Когда я обновился до XBMC 11.0 с joy2key 1.6.3-1, эта настройка перестала работать. Так что в конце-концов я решил заставить Xorg обрабатывать события джойстика.

Для начала, убедитесь, что у вас установлен xf86-input-joystick AUR . Затем создайте файл /etc/X11/xorg.conf.d/51-joystick.conf примерно такого вида:

Отключение управления мышью при помощи джойстика

Специфические устройства

В то время, как большинство джойстиков, особенно USB-совместимые, просто должны работать, некоторые могут потребовать альтернативные драйверы (или будут лучше работать при их использовании). Если ничего не заработало с первого раза, не отчаивайтесь и еще раз вдумчиво прочитайте документацию!

Танцевальные платформы

Большинство танцевальных платформ просто работают. Однако, некоторые платформы, особенно от игровых консолей, которые подключаются через адаптер, частенько грешат тем, что привязывают кнопки направлений к осям. Это приводит к тому, что «влево-вправо» или «вверх-вниз» нажимаются одновременно. Для устройств, распознанных xpad, это можно поправить при помощи модулей:

Logitech Thunderpad Digital

В Logitech Thunderpad Digital не будут отображаться все кнопки, если вы используете модуль analog . Воспользуйтесь специальным модулем adi для этого контроллера.

Контроллер Nintendo Gamecube

Отключение управления мышью при помощи джойстика У Dolphin Emulator есть вики-страница, на которой объясняется, как пользоваться официальным USB-адаптером Nintendo с контроллером от Gamecube. Эта конфигурация также работает с адаптером контроллера Mayflash, если установить переключатель в положение «Wii U».

По умолчанию контроллер будет зарегистрирован udev, но будет доступен только для пользователя root. Вы можете исправить это, добавив правило для udev:

Это свяжет устройство USB с определенными ID изготовителя и продукта, а также установит разрешения для файла устройства в 0666, чтобы программы, запущенные не из-под root, могли получить доступ к контроллеру.

Перезагрузить udev и применить новую конфигурацию можно при помощи

Контроллер PlayStation 3/4

Отключение управления мышью при помощи джойстика Контроллеры Dualshock 3, Dualshock 4 и Sixaxis будут работать прямо «из коробки», будучи подключенными к USB (для начала работы необходимо нажать кнопку PS). Также возможна работа с ними через Bluetooth.

Steam корректно распознает их как геймпады от PS3, так что можно включить режим Big Picture, нажав кнопку PS. В режиме Big Picture и в некоторых играх, эти геймпады могут вести себя как контроллеры от Xbox 360. Управление курсором мыши при помощи геймпада по умолчанию включено. Если вы хотите выключить его, см. #Отключение управления мышью при помощи джойстика

Подключение через Bluetooth

Установите пакеты bluez-plugins и bluez-utils , в состав которого входит плагин sixaxis. Затем запустите bluetooth.service , подключите контроллер по USB, и плагин автоматически пошлет адрес вашего адаптера bluetooth в контроллер.

Теперь можно отключить контроллер, в следующий раз, когда вы нажмете кнопку PS, он подключится без дополнительных действий. Только не забывайте отключать контроллер, когда закончите, иначе, он будет оставаться подключенным, включенным и будет разряжаться батарея.

Steam Controller

Пакет steam (начиная с версии 1.0.0.51-1) позволяет распознать контроллер и предоставляет эмуляцию клавиатуры/мыши/геймпада пока запущен Steam. Для работы эмуляции геймпада, нужно включить внутриигровое наложение в Steam. Вам, возможно, понадобится запустить udevadm trigger от root или отключить и вновь подключить донгл, если контроллер не работает сразу же после установки и запуска Steam. Если ничего не помогает, попробуйте перезагрузить компьютер, когда донгл подключен.

Если вы не можете заставить Steam Controller работать, см. #Не работает Steam Controller.

В качестве альтернативы, можете установить python-steamcontroller-git AUR , чтобы заработала эмуляция контроллера и мыши без Steam.

The factual accuracy of this article or section is disputed.

Вы можете также использовать python-steamcontroller-git AUR для работы со Steam Controller в играх, запущенных из-под Wine. Вам нужно найти и скачать файл xbox360cemu.v.3.0.rar (например, отсюда: ссылка с 2shared). Затем скопируйте файлы dinput8.dll , xbox360cemu.ini , xinput1_3.dll и xinput_9_1_0.dll в папку с файлом запуска игры. Отредактируйте xbox360cemu.ini , изменив только следующие значения в разделе [PAD1] , чтобы корректно переназначить конфигурацию Steam Controller в XBox Controller.

Теперь запустите python-steamcontroller в режиме Xbox360 ( sc-xbox.py start ). Возможно, вы также захотите скопировать XInputTest.exe из xbox360cemu.v.3.0.rar в ту же папку и запустить этот файл при помощи Wine, чтобы проверить работу геймпада. Однако, эмуляция клавиатуры и мыши при помощи этого метода не работает.

Контроллер Xbox 360

Как проводные, так и беспроводные (с модулем Xbox 360 Wireless Receiver for Windows) модели поддерживаются модулем ядра xpad и должны работать без установки дополнительных пакетов.

Имеются сообщения о проблемах с некоторыми новыми моделями проводных и беспроводных контроллерах при использовании стандартного драйвера xpad, такие, как:

  • некорректное назначение кнопок. (обсуждение на баг-трекере Steam)
  • неработающая синхронизация. Все четыре зеленых индикатора моргают, но контроллер работает. (обсуждение на форуме Arch Linux)
Читайте также:  Планшетная клавиатура для windows 10

Если вы испытываете подобные проблемы, можете использовать либо #SteamOS xpad [ссылка недействительна: раздел не найден] , либо #xboxdrv вместо стандартного драйвера xpad .

Если вы хотите управлять мышью при помощи контроллера, либо назначить кнопки клавишам, используйте пакет xf86-input-joystick AUR (дополнительную информацию о настройке см. man joystick ). Если курсор мыши блокируется в углу экрана, может помочь изменение параметра MatchDevicePath в файле /etc/X11/xorg.conf.d/50-joystick.conf с /dev/input/event* на /dev/input/js* .

xboxdrv

xboxdrv — это альтернатива xpad , которая предоставляет бОльший функционал и может лучше работать с некоторыми контроллерами. Xboxdrv работает в пользовательском окружении и может быть запущен как системная служба. Установите его при помощи пакета xboxdrv AUR . Затем запустите/включите xboxdrv.service .

Несколько контроллеров

xboxdrv поддерживает несколько контроллеров, но они должны быть сконфигурированы в /etc/default/xboxdrv . Для каждого дополнительного контроллера добавьте строку next-controller = true . Например, при использовании четырех контроллеров, добавьте ее три раза:

Имитация контроллера XBox360 другими контроллерами

xboxdrv может использоваться для регистрации любого контроллера в качестве контроллера Xbox 360 с помощью —mimic-xpad . Это может помочь в играх, которые поддерживают контроллеры Xbox360, но имеют проблемы с обнаружением или работой с другими геймпадами.

Для начала вам нужно выяснить, как называется каждая кнопка вашего контроллера. Для этого можно использовать evtest . Выполните evtest и выберите ID события устройства ( /dev/input/event* ), относящийся к вашему контроллеру. Нажимайте кнопки на контроллере и двигайте стики, чтобы прочитать их названия.

В данном случае BTN_THUMB , BTN_THUMB2 и BTN_PINKIE являются кнопками, а ABS_RX — это ось Х аналогового стика. Теперь можно имитировать контроллер Xbox360 следующей командой:

Приведенный выше пример является неполным. Он привязывает только одну ось стика и три кнопки в качестве примера. Используйте xboxdrv —help-button , чтобы узнать названия кнопок и осей стиков контроллера Xbox360 и привязать их в соответствии с командой выше. Привязки осей стиков должны следовать после —evdev-absmap , а привязки кнопок — после —evdev-keymap (список, разделенный запятыми; без пробелов).

По умолчанию xboxdrv выводит все события в терминал. Таким образом, можно понять, что все привязки являются корректными. Используйте опцию —silent , чтобы отключить вывод в терминал.

Logitech Dual Action

Геймпад Logitech Dual Action очень похож (в контексте привязки кнопок) на геймпад от PS2, но некторые кнопки и гашетки нужно поменять местами, чтобы имитировать контроллер Xbox.

Контроллер PlayStation 2 через адаптер USB

Чтобы исправить назначение кнопок адаптеров PS2 и имитировать контроллер Xbox, выполните следующую команду:

Контроллер PlayStation 2 через USB

Если взять контроллер PS3 и подключить его по USB, xboxdrv не нужно указывать никаких привязок (они встроены). Просто запустите программу (и отключите текущий запущенный драйвер), и все заработает.

Контроллер PlayStation 2 через Bluetooth

Подключив контроллер по Bluetooth, найдите его адрес при помощи bluetoothctl . Затем создайте новое правило для udev следующего содержания:

Адрес контроллера пишется строчными буквами, например 06:9a:b4:c8:ef:8b .

Теперь запустите xboxdrv:

Контроллер PlayStation 4

Чтобы исправить привязяки кнопок контроллера PS4, воспользуйтесь следующей командой xboxdrv (или попробуйте программу ds4drv):

Решение проблем

Перемещение курсора мыши джойстиком

Иногда USB-геймпад может быть распознан как HID-совместимая мышь (только в сеансе X, несмотря на то, что он установлен как устройство /dev/input/js0 ). Известная проблема — когда курсоры мыши передвигается стиками джойстика или блокируется на краю экрана. Если ваша программа может определить геймпад сама, можете удалить пакет xf86-input-joystick. Более элегантное решение — #Отключение управления мышью при помощи джойстика.

Джойстик не работает в играх на FNA/SDL

Если вы пользуетесь ноунейм-геймпадом, вы можете столкнуться с проблемами с его определением в играх на SDL. С 14 мая 2015 вы можете положить файл gamecontrollerdb.txt в папку с запускаемым файлом гры на FNA, например, SDL_GameControllerDB.

Другой способ, который подходит также для более ранних версий FNA и SDL — создание привязки кнопок самостоятельно. Для этого необходимо скачать исходники SDL отсюда: https://libsdl.org/, перейти в папку /test/ , собрать программу controllermap.c (или установить пакет controllermap AUR ) и запустить тест. После завершения теста controllermap, будет сгенерирован guid, который нужно подставить в переменную окружения SDL_GAMECONTROLLERCONFIG , которой в последствии будут пользоваться игры на SDL/FNA. Например:

Геймпад не распознается никакими программами

Некоторые программы, например, Steam, могут распознать только первый джойстик, с которым столкнутся. Из-за бага в драйвере беспроводных устройств Microsoft, это может быть донгл bluetooth от беспроводной клавиатуры или мыши. Если вы увидите, что /dev/input/js* и /dev/input/event* принадлежат приемнику bluetooth-клавиатуры, вы можете автоматически избавиться от них, создав соответствующие правила udev. Создайте / :

Correct the KERNELS==». » . Узнать нужные значения можно так:

Предпожим, что устройство «под вопросом» — это /dev/input/js0 . После создания правила выполните:

Затем переподключите проблемное устройство. Файлы должны исчезнуть.

Не работает Steam Controller

This article or section needs expansion.

Если Steam Controller не подключается в беспроводном режиме, но работает с использованием кабеля, вам, возможно, необходимо создать следующее правило udev, предложенное Valve [1]:

Также создайте группу пользователей Steam Controller:

И добавьте своего пользователя в эту группу:

Источник

Оцените статью