2021年1月2日土曜日

Ubuntu20.04でxboxのコントローラー(1914 SeriesX 2020年版)を無線(BLE)で使う


背景

xboxのコントローラーの形が自分は好きで、以前から気になっていたBluetooth機能付きのモデルで新しいものが出たので買ってみました。
Ubuntuでの設定に苦労したので、備忘録を兼ねて方法を共有します。

使ったもの

  • xboxのコントローラー
    Series X向けに作られた2020年版のコントローラーです。
    型番は1914のようです。

    上記のリンクは黒のみUSBケーブル付きのPC向け版です。
    他の色(白か青)が良ければ、中身は同じらしいですが、USBケーブルが付いていないゲーム機用もあります。
    有線もしくは単3電池で給電するものですが、バッテリーパックを使うと充電して使えるようになります。
  • BLE機能が付いたUbuntu PC
    利用したUbuntuは20.04で、カーネルのバージョンは5.4.0です。
    Bluetooth機能が付いていなければ、Bluetoothアンテナが付いたUSBドングルを利用することでコントローラーを使えると思います。
  • Windows10 PC
    コントローラーのファームウェアの更新に利用します。
    更新しなくても動くなら不要です。

設定が出来た場合の登録の流れ

設定方法の共有の前に、動作確認方法を共有します。

XboxのコントローラーのUSBポートの近くにあるペアリングボタンを長押しして、ペアリング開始

ペアリングモードになるとLEDが1秒未満の頻度で点滅します。


UbuntuのBluetooth設定を開き、Xboxのコントローラーを登録

設定に不備があっても検索一覧にはxboxのコントローラーが出てきたので、出てこない場合は利用しているBluetooth装置がBLE機能を備えていない可能性があります。


コントローラーをタップすると接続が始まります。


不具合が無い場合は、この手順でPCに登録されると同時に、コントローラーがペアリングされたと認識してLEDが常時光る状態になります。


jstestで入力内容を確認

ゲームパッドとして動いているならjstestで動きを見れます。
jstestは下記のコマンドでインストールできます。
sudo apt install jstest-gtk

インストールしたらアプリ検索画面(Windowsボタンを押したら出てくる画面)でjoyと入力すると出てきます。



認識されていれば、ボタンの挙動が画面に反映されます。


繋がらない、繋がっても認識されない: xpadneoをインストール

linuxでxboxのコントローラーを無線で使うためのドライバであるxpadneoをインストールします。

https://github.com/atar-axis/xpadneo

インストールコマンドは上記のページを参照してください。
参考として自分がUbuntu向けに実行したコマンドを共有します。

sudo apt-get install dkms linux-headers-`uname -r` 
mkdir -p ~/gitprojects/xbox
cd ~/gitprojects/xbox
sudo apt install git
git clone https://github.com/atar-axis/xpadneo.git
cd xpadneo
sudo ./install.sh


繋がらなかったり、接続と切断を繰り返す: Privacy=deviceの設定を追加

この挙動は /etc/bluetooth/main.confの[General]の部分に Privacy=Device を追加することで、自分の環境では期待するように繋がるようになりました。

参考: Can't connect xbox controller, (keeps disconnecting and connecting)

/etc/bluetooth/main.confはsudo権限での編集が必要なので、下記のようにsudo付きでエディタを起動すると編集できます。
sudo gedit /etc/bluetooth/main.conf
Privacy=device


上記の変更を追加したら下記のコマンドを実行するかPCを再起動するかして、Bluetooth機能を再起動してください。
sudo systemctl restart bluetooth

カーネルのバージョンが5.9以上だとこの問題が解決しているという情報もあるので、将来的にこの設定は不要になりそうです。
この設定をしても動かない場合は下記のような関連するissueページを見てみてください。

[NOT FOR QUESTIONS] Bluetooth connection stability broken after kernel update #198

余談: この問題の対応としてdisable_ertmを有効にするという方法も見つけましたが、自分の環境では効果がありませんでした。

それでも動かない: xboxのコントローラーのファームウェアを更新

Windowsが入ったPCにXbox アクセサリーをインストールして開き、コントローラーをUSBで接続すれば、ファームウェアの更新が可能な場合は更新ボタンが出てきます。

自分が試した時は 5.1.2482.0 から 5.5.2641.0 にバージョンアップされました。


それでも動かない: コントローラーの電池を抜いて再起動

接続と切断を繰り返すと、意図しない内部状態になるのか、接続できなくなることがあります。
そんな時は電池を抜いて再起動すると、復活する場合があります。


それでも動かない: xpadneoのカーネル関連のissueなどを確認してみる

下記のカーネルに関するスレッドやxpadneoのissueを検索してみるなどすると、解決方法が見つかるかもしれません。

[NOT FOR QUESTIONS] Bluetooth connection stability broken after kernel update #198

まとめ

xbox series x向けの2020年版コントローラー(型番1914)をBLEで接続してUbuntuで利用できました。

古いコントローラーの設定方法やドライバに惑わされましたが、期待するように繋がって良かったです。

更新履歴

2021.01.03
コントローラーと一緒に紹介していた非公式大容量バッテリーパックがxbox One向けで今回利用したSeries X向けのとは形状が異なるものだったので、どちらでも使える純正バッテリーパックの紹介に変更しました。
2021.01.24
電池を抜いて再起動の手順を追加しました。

0 件のコメント :