Nintendo Wii Remote (Nintendo Wii Remote - Image taken from Wikipedia)

XWiimote

XWiimote is an open-source linux device driver for Nintendo Wii / Wii U Remotes and compatible devices. It is a relatively new driver that tries to supercede cwiid, wiiuse and others by integrating the driver into existing linux infrastructure. The project consists of an official linux kernel driver, which is part of the kernel since linux-3.1, an extension to bluez, the official linux bluetooth stack, an X11 input driver, some user-space helpers and test applications.

Unfortunately, nobody has volunteered to beautify this website; contributions welcome!

How to use it?

To use Nintendo Wii Remotes, or any compatible device, on linux, you need:

The kernel driver is available since linux-3.1 upstream. However, you need at least linux-3.11 for a hotplug-capable driver and proper device support. Older versions of the kernel driver are no longer recommended (still supported, but may lack important features). Most major distributions provide toose kernels out-of-the-box with the hid-wiimote driver enabled. But you might have to call modprobe hid-wiimote to load the driver manually.
The bluez bluetooth stack is the official linux bluetooth stack which is provided by all major distributions. Since version 4.101 it includes fixes so Nintendo devices can be paired with linux hosts. If you use an older bluez version, you may still be able to use Nintendo Wii / Wii U devices, but you cannot pair them.

Once you made sure you have the required software installed, you can start a bluetooth-manager of your choice (eg., blueman, gnome-bluetooth) and perform a bluetooth inquiry (ie., search for nearby devices). Your remotes will show up as Nintendo RVL-CNT-01 (Revolution was the codename of the Nintendo Wii) or with slightly modified names (eg., the balance board shows up as Nintendo RVL-WBC-01). Select a device and connect to it. If you use a new enough bluez version, it will automatically select the correct PIN. If you are prompted for PIN input, your bluez stack is too old. In this case simply select "Connect without PIN" or "Connect without Pairing" as you cannot enter the required PIN via these interfaces.

If you connected a device, the hid-wiimote kernel driver will pick it up and provide kernel input interfaces for it. As these interfaces are pretty useless on its own, you need a user-space application or driver that uses the device. The kernel interfaces provide the parsed data input (eg., accelerometer data, IR cam positioning information, ...) but do not apply any policy. So if you want to use your device to emulate mouse-input, you need a user-space driver which does exactly that. There is no sane generic way how X11 or other applications could use this data, as it is very device specific.
The xwiimote tools provide a library and some programs to help application-developers use Nintendo Wii / Wii U remotes. It is highly recommended to install the xwiimote-package before using a device. It will install some X11 blacklists so your X-Server will not pick up those devices by default. It also provides a tool called xwiishow, which can be used for testing.

From this point on, there are several ways to use the device:

xwiishow

Once you followed the instructions given above, you can use the xwiishow command-line program from the xwiimote tools project. Simply install the xwiimote-package and run xwiishow list. This will list all currently connected devices. Via xwiishow <num> you can open a device and see a visualization of all input events. Several hotkeys are available to control the device.

A manpage xwiishow(1) is also provided which explains all hotkeys and command-line arguments.

X11 Input Driver

The xf86-input-xwiimote project provides an X11 input driver so a Nintendo Wii / Wii U device can be used as X11 input device. The project is still under development, but currently supports emulating arbitrary button and keyboard input and emulating a mouse with the accelerometer and Motion-Plus gyroscope. Install the xf86-input-xwiimote package and give it a try!

Bluetooth (Bluetooth - source: Wikipedia)

Supported Devices

Nintendo produced many different devices for the Wii and Wii U consoles and 3rd party companies continously produce new devices based on them. The XWiimote project tries to support all of the Bluetooth-based HID input devices, which currently includes:

Note that compatible 3rd-party devices are also supported. If you own a device that does not work, please let us know! We do our best to support all devices that are internally based on the Wii Remote.

The Nintendo Wii U GamePad is not based on Bluetooth, but rather on IEEE-802.11 wifi and, thus, is not supported by XWiimote. However, there is ongoing work to reverse-engineer the device and we will try to provide a new driver for it when enough information is known. Contributions are highly welcome!

Developing Applications

If you want to use Nintendo Wii / Wii U devices in your application, please don't hesitate to contact us! The XWiimote tools provide a user-space library that can be easily integrated into any linux application. With this library you can use Wii Remotes very easily for any purpose! The library is available as Open-Source and extensively documented. Please let us know if anything is missing.

The libxwiimote API reference documentation (including a section about the raw kernel ABI) can be browsed online or built from source code via make doc.

Source code, bug-tracker and more are hosted on Github.

Python (Python - source: python.org)
Perl (Perl - source: perlfoundation.org)

Language Bindings

There are several language bindings available so you can use libxwiimote from your favorite scripting language. The bindings are based on swig and developed separately on Github. We currently provide bindings for:

The xwiimote-bindings repository contains example scripts and documentation for the different bindings. They are currently maintained by Nicolas Adenis-Lamarre, who spent a lot of time developing them; Thank you very much!

Contact

XWiimote is maintained by David Herrmann (dh.herrmann@gmail.com) with contributions from many others. Please don't hesitate to contact us. The main development takes place on github.