Подключение и настройка геймпада Xbox 360 в Ubuntu Linux


Администрирование операционных систем на базе Linux (Debian/Ubuntu и Centos/RedHat) Настройка рабочих станций под управлением Ubuntu Linux Мое портфолио, сертификаты и разработки
linux ubuntu xboxdrv xpad настройка геймпада xbox 360
 
 

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


(последние правки 3 недели, 5 дней)

Джойстик от приставки Xbox360 можно подключить к компьютеру двумя методами: проводным USB-подключением, при помощи специализированного беспроводного адаптера. Мы будем рассматривать именно второй метод - такое подключение,помимо избавления от проводов, позволяет подключить к компьютеру до четырех джойстиков одновременно. Для работы с приемником джойстика Xbox 360 в Ubuntu Linux существует штатный пакет xboxdrv, но в большинстве руководств рекомендуется использовать сторонний репозиторий rael-gc и вот здесь и начинается некоторая путаница.

Джойстик от приставки Xbox360 можно подключить к компьютеру двумя методами:

  • Проводным USB-подключением
  • При помощи специализированного беспроводного адаптера

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

Беспроводной адаптер для подключения джойстика Xbox360

Ресивер, как и геймпад, можно купить, например, на AliExpress и значительно сэкономить. В магазинах DNS приемник стоит 1200 рублей и джойстик 3600 рублей, а на AliExpress приемник можно приобрести за 500 рублей и, соответственно, геймпад за 1500.

Покупка приемника Xbox360 на AliExpress

Я несколько переживал за качество джойстика и адаптера, но как оказалось, напрасно - оборудование по качеству не отличается от оригинального. Сразу после подключения приемника проверьте, что оборудование определилось ядром Linux, для чего, выполните следующую команду:

# lsusb | grep Xbox
Bus 001 Device 007: ID 045e:0291 Microsoft Corp. Xbox 360 Wireless Receiver for Windows

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

# lsmod | grep xpad
xpad                   32768  0
ff_memless             16384  1 xpad

Обратите внимание, что штатный модуль входящий в поставку ядра, хотя и находит геймпад, обрабатывает все нажатия клавиш, он содержит ряд конструктивных недостатков, которые вряд ли когда то будут решены. Первое, что вас скорее всего не устроит, это отсутствие виброотдачи в ядерном модуле xpad, а второе, на что я обратил внимание в процессе эксплуатации, это то, что при отключении геймпада (например, при переходе его в спящий режим) из списка устройств (в каталоге /dev/) пропадает устройство /dev/input/js0, что вызывает сбои в работе некоторых эмуляторов и игр (считается, что во время игры не стоит выдергивать геймпад на ходу).

 

Для работы с приемником джойстика Xbox 360 в Ubuntu Linux существует штатный пакет xboxdrv, но в большинстве руководств рекомендуется использовать сторонний репозиторий rael-gc и вот здесь начинается некоторая путаница, так как:

  • Штатный пакет операционной системы называется xboxdrv и содержит только программы управления
  • Сторонний пакет из репозитория rael-gc называется ubuntu-xboxdrv и, в свою очередь, содержит описание сервиса, обработчик отключения штатного драйвера xpad и набор правил для Dbus

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

# apt-add-repository -y ppa:rael-gc/ubuntu-xboxdrv
# apt-get update
# apt-get install ubuntu-xboxdrv

Как я уже говорил выше, пакет содержит правило modprobe.d для блокировки загрузки модуля xpad и применение этого правила потребует перезагрузки компьютера. После перезагрузки демон будет запущен автоматически и можно попробовать подключить джойстик к приемнику, для чего, включите геймпад Xbox 360, нажав кнопку Xbox, после чего, нажмите кнопку на беспроводном приемнике. Индикатор начнет мигать зеленым цветом, указывая, что приемник ищет геймпад для подключения.

Сопряжение геймпада и приемника

 

Нажмите кнопку подключения в задней части геймпада Xbox 360 и когда индикатор на приемнике и джойстике перестанет мигать, можно считать, что сопряжение прошло успешно. Эту операцию требуется выполнить только один раз при первоначальной установке геймпада.

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

В случае возникновения проблем, остановите демон xboxdrv командой:

# service xboxdrv stop

Запустите демон вручную командой:

# xboxdrv

Если все прошло успешно, то мы получим сообщение:

Controller:        Microsoft Xbox 360 Wireless ControllerVendor/Product:    045e:0291
USB Path:          006:003
Wireless Port:     0
Controller Type:   Xbox360 (wireless)

Your Xbox/Xbox360 controller should now be available as:
  /dev/input/js4
  /dev/input/event10

Но не всегда запуск проходит гладко и возможен целый ряд потенциальных проблем.

Например, если при запуске в виде демона он падает с ошибкой:

[ERROR] XboxdrvDaemon::run(): fatal exception: failed to get unique dbus
name: Connection ":1.23" is not allowed to own the service "org.seul.Xboxdrv" due to
security policies in the configuration file

То вам требуется создать файл /etc/dbus-1/system.d/org.seul.Xboxdrv.conf следующего содержания и перезагрузить компьютер:

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS BusConfiguration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
  <policy context="default">
    <allow own="org.seul.Xboxdrv"/>
  </policy>
</busconfig>

Или при запуске у вас может появиться ошибка:

[ERROR] XboxdrvDaemon::process_match(): failed to launch ControllerThread: 
Error couldn't claim the USB interface: LIBUSB_ERROR_BUSY

Для устранения ошибки требуется запустить демон с параметром --detach-kernel-driver:

# xboxdrv --detach-kernel-driver --daemon

По умолчанию виброотдача отключена и, вероятно, вы пожелаете включить тактильную отдачу на геймпаде Xbox 360, для этого откройте файл /etc/default/xboxdrv и измените:

FORCE_FEEDBACK=false

на

FORCE_FEEDBACK=true
Моя официальная страница на FaceBook
Мой микроблог в твиттер

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


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .