XWiimote
この記事では Nintendo Wii リモコンの Linux カーネルドライバーを扱っています。このドライバーは Linux バージョン 3.1 から上流に取り込まれました。cwiid などの古いユーザー空間ドライバーを置き換えることができます。このドライバーを使うことで様々な用途に Wii リモコンを使用できます。例えば X の入力デバイスとして使ったり Linux 用のゲームのコントローラとして使えます。
目次
要件
- Bluetooth
- xwiimote-gitAUR
- xwiimote カーネルドライバー
- Wii リモコン
最も重要なソフトウェアは Bluetooth です。先に進む前に wiki ページを読んで正しく設定してください。
ユーザー空間のユーティリティは AUR の xwiimote-gitAUR パッケージでインストールできます。
カーネルドライバー (hid-wiimote
モジュール) は Linux バージョン 3.1 以上に含まれているため、Arch Linux カーネルには既に存在します。ただし、以下のコマンドでロードする必要があるかもしれません:
# modprobe hid-wiimote
最後に Wii リモコンが必要です。Wii リモコンには付属品としてヌンチャクとクラシックコントローラが存在します。
hid-wiimote カーネルモジュール
カスタムカーネルを使用する場合、CONFIG_HID_WIIMOTE
で hid-wiimote
モジュールを有効にできます。CONFIG_INPUT_FF_MEMLESS
, CONFIG_LEDS_CLASS
, CONFIG_POWER_SUPPLY
, CONFIG_BT_HIDP
もカーネルに組み込むか、モジュールとしてロードしてください。カーネルのバージョン 3.3 から新しいコンフィグオプション CONFIG_HID_WIIMOTE_EXT
が追加されておりデフォルトで有効になります。ヌンチャクやクラシックコントローラなどの Wii リモコンの周辺機器を制御します。
Wii リモコンの接続
他の Bluetooth デバイスと同じように Wii リモコンを接続してください。Bluetooth デバイスのペアリングについて詳しくは Bluetooth の記事を読んでください。Wii リモコンに特別な設定は不要です。BlueZ の wiimote プラグインは必要なことを裏で全てやってくれます。
Wii リモコンを認識できるようにするには後ろのバッテリカバーの下にある赤い同期ボタンを押してください。Wii リモコンは20秒ほどペアリング可能モードになります。1 と 2 ボタンを同時に押すことで Wii リモコンを同じ状態にすることもできます。ただし前者の方法のほうが信頼性が高いと思われます。
デバイスの紐付けを行うときに PIN の入力が求められた場合、BlueZ の bluetoothd デーモンに wiimote プラグインが含まれていません。詳しくは BlueZ のトラブルシューティングを見てください。解決しない場合、ペアリングを行わずに Wii リモコンに接続する方法があります (PIN による認証を必要としません)。あらゆるバージョンの BlueZ で機能します。
デバイスの管理
Wii リモコンを接続すると、/dev/input/eventX
に複数の入力デバイスが現れます。以下のコマンドで全ての Wii リモコンを確認できます:
$ ls /sys/bus/hid/devices
そして以下のコマンドで追加デバイスの詳細を取得できます:
$ ls /sys/bus/hid/devices/<devid>/
Wii リモコンの入力キーのデフォルトマッピングはあまり役に立ちません。Wii リモコンの入力をもっと便利なキーとアクションにマッピングしなおすユーザー空間のアプリケーションが存在します [1]。AUR の xwiimote-gitAUR パッケージでインストールできあmす。パッケージをインストールしたら xwiishow
ツールで Wii リモコンのテストが可能です:
接続済みの全ての Wii リモコンを確認:
$ xwiishow list
Wii リモコンのパス (例: /sys/bus/hid/devices/<did>
) が表示された場合、以下のコマンドでデバイスをテストできます:
$ xwiishow /sys/bus/hid/devices/<did>
あるいはデバイスのインデックスを使用:
$ xwiishow 1
上記のコマンドを実行すると Wii リモコンの絵が表示されボタンが押されると通知を発します。'r'
キーを使うことで振動モーターの有効・無効を切り替えられます。アプリケーションを終了するには 'q'
を押してください。上記のツールを使うには root 権限が必要な場合もあります。
xwiishow
ツールで Wii リモコンのボタン押下が表示されてもキーを登録できない場合、ユーザーを input
グループに追加してください:
# usermod -aG input username
X.Org 入力ドライバー
AUR には X.Org の入力ドライバーが存在し xf86-input-xwiimote-gitAUR パッケージでインストールできます [2]。自動的に X クライアントの入力デバイスとして使えるようになります。インストールしたら man ページを読んでください:
$ man xorg-xwiimote
赤外線センサー
Wii リモコンには赤外線カメラが内蔵されています。カメラを入力デバイスとして使うには、赤外線を発するものが必要です。例えば以下のようなものが該当します:
- Nintendo Wii センサーバー
- 無線センサーバー
- ロウソク (30cm くらいは必要です)
- 自家製のセンサーバー ([3])
現在、赤外線センサーによるマウスエミュレーションを有効にするユーザー空間アプリケーションは存在しません。必要な場合は、cwiid を使ってください。ただし xwiimote ツールは活発に開発されており将来的に赤外線のマウスエミュレーションをサポートする予定があります。
トラブルシューティング
入力のマッピングがおかしい
Wii リモコンのキーのデフォルトマッピングはデフォルトでは使い物になりません。マッピングを変更するには xwiimote のユーザー空間ツールを使ってください。
BlueZ に wiimote プラグインが含まれていない
上流の BlueZ にはバージョン 4.96 から wiimote プラグインが含まれていますが、コンパイル時に --enable-wiimote
で明示的に有効にする必要があります。Arch Linux のパッケージには bluez-4.96-3
から wiimote プラグインが含まれています。パッケージに wiimote プラグインが含まれていることを確認するには:
$ grep wiimote $(which bluetoothd)
以下のように表示されるはずです:
Binary file /usr/sbin/bluetoothd matches
BlueZ に wiimote プラグインが含まれていれば特に設定は不要です。含まれていない場合、有効化する必要があります。bluez パッケージをコンパイルしたくない場合、ペアリングを行わないで Wii リモコンを接続する方法があります。例えば blueman
や gnome-bluetooth
を使用する場合、新しいデバイスを追加する際に "Proceed without pairing"
を選択してください。
モジュールを自分でコンパイルする場合、--enable-wiimote
を configure フラグに追加してください。詳しくは bluez の PKGBUILD を参照。
Dolphin エミュレータで Wii リモコンが使えない
Dolphin は独自のドライバーを利用するため Dolphin が動作しているときに Wii リモコンの再同期ボタンを押すことで使えるようになるはずです。
Wii リモコンが機能しない
XWiimote のソフトウェアスタックは活発に開発されています。問題があったら XWiimote@GitHub に報告してください。
Linux に Wii リモコンのサポートを追加する他のプロジェクトも存在します。cwiid プロジェクトについては Wii リモコンの記事を読んでください。
赤い同期ボタンでペアリングしてから自動同期が機能しない
ホストに自動的に再接続するにはペアリングした後に Wii リモコンを直接接続する必要があります。
bluetoothctl で以下のコマンドを実行してください:
power on agent on <press red sync button> scan on pair <MAC of the found wiimote, use TAB for autocompletion> # note: we do not explicitly connect, we just pair! connect <MAC of the wiimote> # there seems to be a pretty short timeout, so execute this immediately after the pairing command trust <MAC of the wiimote> disconnect <MAC of the wiimote>
wiimote の接続が切れて電源 LED が消えます。Wii リモコンの電源ボタンを押すと接続がホストと再確立されます。