XWiimote

From ArchWiki
Jump to navigation Jump to search

この記事では Nintendo Wii リモコンの Linux カーネルドライバーを扱っています。このドライバーは Linux バージョン 3.1 から上流に取り込まれました。cwiid などの古いユーザー空間ドライバーを置き換えることができます。このドライバーを使うことで様々な用途に Wii リモコンを使用できます。例えば X の入力デバイスとして使ったり Linux 用のゲームのコントローラとして使えます。

ノート: XWiimote のツールは依然として実験的です。Wii リモコンの接続と管理は問題なく動作し X11 の入力デバイスとして Wii リモコンを使うためのドライバーは存在しますが、高度な機能はまだ実装されていない可能性があります。

要件

最も重要なソフトウェアは Bluetooth です。先に進む前に wiki ページを読んで正しく設定してください。

ノート: Arch Linux の最新の BlueZ パッケージには wiimote プラグインが含まれています。古いバージョンを使用している場合は BlueZ のトラブルシューティングを見てください。

ユーザー空間のユーティリティは AURxwiimote-gitAUR パッケージでインストールできます。

カーネルドライバー (hid-wiimote モジュール) は Linux バージョン 3.1 以上に含まれているため、Arch Linux カーネルには既に存在します。ただし、以下のコマンドでロードする必要があるかもしれません:

# modprobe hid-wiimote

最後に Wii リモコンが必要です。Wii リモコンには付属品としてヌンチャクとクラシックコントローラが存在します。

hid-wiimote カーネルモジュール

カスタムカーネルを使用する場合、CONFIG_HID_WIIMOTEhid-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]AURxwiimote-gitAUR パッケージでインストールできます。パッケージをインストールしたら 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])
ノート: Option "MotionSource" "ir" を使うことで xf86-input-xwiimote の赤外線によるマウスエミュレーション機能を利用できます。

現在、赤外線センサーによるマウスエミュレーションを有効にするユーザー空間アプリケーションは存在しません。必要な場合は、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
ノート: Arch Linux の bluez 5.5 ではファイルは /usr/lib/bluetooth に存在します。確認するには: $ grep wiimote /usr/lib/bluetooth/bluetoothd

BlueZ に wiimote プラグインが含まれていれば特に設定は不要です。含まれていない場合、有効化する必要があります。bluez パッケージをコンパイルしたくない場合、ペアリングを行わないで Wii リモコンを接続する方法があります。例えば bluemangnome-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 リモコンの電源ボタンを押すと接続がホストと再確立されます。

参照

  • Wii リモコン: Cwiid: 部分的に Wii リモコンをサポートする Linux 用の古いソフトウェアスタック。
  • [4]: Wii リモコンに関する開発者ブログ。