XboxワイヤレスコントローラーをLinuxで使う方法

refresh calendar 2021-01-06

先月購入したXboxワイヤレスコントローラーについてですが、実は他のBluetoothデバイスのように素直に接続することができず、ちゃんと接続できるようにするまでに結構時間がかかってしまったんですね。

久々にブログを書く時間が取れたので、これについてまとめておきます。

動作確認済み環境

  • Ubuntu20.04 LTS (kernel 5.10.4)
  • Manjaro21 (kernel 5.12.2-1)

症状

ペアリングについてのダイアログが何度も表示される

ペアリングを実行してみても、何回か同じダイアログが表示されたり、場合によってはフリーズしたりと、動作がおかしくなります。

仮にペアリングができても、色々とおかしい

ペアリング後も点滅が止まらない

コントローラーをペアリング可能なモードに変更すると、Xboxマークが高速で点滅すると思うのですが、ペアリングが実行された後もそのまま点滅し続ける。

再起動するとコントローラーが効かなくなる

点滅し続けていても一応使えたんですが、一旦再起動しちゃうと、全く使えなくなりました。 一応表面上は接続されているものの、実際にゲームで入力すると、全く反応がありません。

正しく接続するには

コントローラーを最新の状態にアップデートする

このコントローラーは、スマホのようにアップデートする機能がついています。 中身が古いソフトウェアのままだと上手く接続できないらしいです。

アップデートはXboxを利用する方法だけでなく、Windowsと接続することでも可能になっています。

BLEに対応したBluetoothドングルを用意する

このXboxワイヤレスコントローラーはBLE(Bluetooth Low Energy)という規格のLE Privacyという仕組みを使って動作しているので、受信側もそれに対応しておく必要があります。

といっても、いま売られているドングルはほとんどがBLEに対応していると思いますので、使っているドングルが古かったら買い直す、という程度の話ですね。

一応LEプライバシーについての参考記事を貼っときます。

home ednjapan.com

xpadneoをインストール

home github.com

xpadneoはxboxコントローラー用のドライバの中では、かなり新しい&機能豊富なドライバソフトです。 今のところ唯一これだけがこのコントローラに対応しているので、必須ソフトになります。

インストールについては、“Prerequisites”の部分と”Installation”の部分を指示通りやるだけです。 “Connection”以降の部分はスルーでOK。 普段どおりのGUIベースのBluetooth接続方法で問題なかったです。

プライバシーモードをONにしてペアリングで完了

ここまでが準備工程で、あとはペアリングするための簡単な処理と実際にペアリングをするだけになります。

ペアリングにはBLEのLEプライバシーを利用するので、それに対応するために/etc/bluetooth/main.confに次の1行を追記。

Privacy=device

あとは通常のBluetooth端末のペアリングと同じようにするだけで、正常にペアリングしてくれるはず。 一度ペアリングが済んでしまえば、PC再起動後であっても、特に問題なく接続できるようになります。

Linuxカーネルを新しくしてみる

これでもダメなときはカーネルを最新にするといいみたいです。 実際バージョン5.9では不具合が出るという情報が上がってました。

僕の方はというと、マザーボードのサウンドチップが最新すぎたという理由で既にカーネルを最新の5.10.4へ変更していたのですが、このバージョンではコントローラーの方も問題なく使えています。 LTSを使ってるのにカーネルを弄るっていう矛盾が生じてしまうんですが、買ってしまった以上とにかく動かしたい訳なんで、そこはまぁ…。

ちなみにカーネルを新しくした場合は、xpadneoの再インストールが必要になります。

うまく行くまで何度も繰り返す

未だに不思議に思っているんですが、重要だと思うので書いておきます。

紹介したPC環境でペアリングをすると、どういう訳か大抵は失敗してしまいます。 コントローラーのリングライトが点滅を繰り返した状態で、PC側の表示だけは接続を示している、というバグっているような形で接続が完了してしまうんです。 で、当然この場合は使い物にならないので、一度削除をして、もう一度ペアリングのやり直しをします。

そうしてこの作業を何度か繰り返していると、うまく接続される時がやってきます。 この記事を初出稿した時は10回程度の試行で成功しましたが、現在のManjaro環境ではもっと掛かって、30回近く繰り返したような気がします。

コントローラー側がおかしいのかLinux側がおかしいのかまでは僕には分かりませんけども、とにかく言いたいのは、「何度も試せば接続できるようになる」という事実です。

一度接続に成功すれば”/var/lib/bluetooh”内にペアリング情報が記録されるんで、バックアップとしてコピーしておいたほうがいいかもしれないですね。

接続するまでがちょっと面倒に思えますけど、やっぱワイヤレスって便利ですからね〜

以上、今日はこれにて!

Some images are made by Freepik's icons from www.flaticon.com