WiiCan Turns Your WiiMote Into a Linux Gamepad, Mouse and More

Use your WiiMote as a gamepad, remote control or even a mouse for your Linux computer. If you’ve got Bluetooth, free application WiiCan is a great way to set up your WiiMote to do just about anything.

You may not use your Wii as much as you used to, but that doesn’t mean you need to keep your WiiMotes in a dusty box somewhere. If you play games on your computer, you can use them for that. We showed you how to connect your WiiMote to your PC, use your WiiMote as a Mac gamepad and even connect it to an Android device. But what about Linux?

Well, if you’ve searched for the term “use WiiMote as gamepad Linux” you’ve probably been frustrated with the result – I know I was. At least, until I discovered WiiCan. It’s a little buggy, and not altogether simple to use, but it works.

Yes Wiican!

You might be a touch confused the first time you see WiiCan, but don’t worry: it’s simple once you grasp it. What you’re seeing is a list of potential “Mappings”:


By default, the program includes two mappings for using the WiiMote as a mouse (one with an IR bar, one without), a mapping for using the Classic controller as a gamepad and another for using a WiiMote and Nunchuck the same way. You can also edit and create your own mappings, programming the WiiMote buttons to simulate anything from gamepads to your mouse, to keys on the keyboard, but we’ll get to that later.

Ads by Google

For now, just know that the mappings with checkmarks beside them will show up if you click the application’s tray icon (a WiiMote, naturally):


Click any of your options from here and you’ll be told to press the 1 and 2 buttons on your WiiMote:


Doing so connects your WiiMote and the computer. Unlike with the Wii, the device won’t vibrate upon connection and no indicator light will show you that the device is connected. You’re simply going to have to test it yourself, by playing a game.

Here’s me using a custom mapping I made to play Fez:

Done using your WiiMote? Click the WiiMote in the tray again, then click “Disconnect”.


The radio signals surrounding the icon will turn off, letting you know the device is disconnected. If you’re not sure, however, simply press the “A” button on your WiiMote – if it’s disconnected, the blue lights on it should flash briefly.

Editing Mappings

If all you want to do is play a game, the default mappings should more than suffice. If you’re annoying with the result in some way, however, you have the flexibility to create your own mapping. I utterly failed in finding simple documentation for doing so, but piece together enough knowledge to get Fez working well. I’m going to share some of this with you.

Go ahead and open any mapping. You’ll see it’s a simple list of WiiMote functions, followed by what they should do:


In the above example, the WiiMote.Dpad’s X and Y axises are mapped as ABS (absolute) axises, while the A and B buttons are (appropriately) mapped as A and B buttons. An equal sign surrounded by spaces separates the button with the result, but where does this bizarre language used here come from?

You can probably learn the Wii inputs yourself, just by exploring the mappings that come with the program. For reference, however, here they all are.

WiiMote inputs

To begin, here’s a list of the buttons on the WiiMote:

  • Wiimote.A
  • Wiimote.B
  • Wiimote.Minus
  • Wiimote.Plus
  • Wiimote.Home
  • Wiimote.1
  • Wiimote.2

The DPad can be mapped as a DPad:

  • Wiimote.Dpad.X
  • Wiimote.Dpad.Y

Or, if you prefer, as a series of buttons:

  • Wiimote.Up
  • Wiimote.Down
  • Wiimote.Left
  • Wiimote.Right

NunChuck inputs

There are two buttons unique to the Nunchuck:

  • Nunchuk.C
  • Nunchuk.Z

Additionally, you can define the function of the X and Y axis for the nun-chuck stick:

  • Nunchuk.Stick.X
  • Nunchuk.Stick.Y

Classic Controller inputs

You can also map every button on the Classic Controller, if you have one:

  • Classic.Minus
  • Classic.Plus
  • Classic.Home
  • Classic.A
  • Classic.B
  • Classic.X
  • Classic.Y
  • Classic.ZL
  • Classic.ZR
  • Classic.L
  • Classic.R

The classic controller can be mapped as four separate buttons, if you want:

  • Classic.Up
  • Classic.Down
  • Classic.Left
  • Classic.Right

Or as a Dpad defined by an X and Y axis:

  • Classic.Dpad.X
  • Classic.Dpad.Y

You must also define the X and Y axis for the remaining two analog sticks:

  • Classic.LStick.X
  • Classic.LStick.Y
  • Classic.RStick.X
  • Classic.RStick.Y
  • Classic.LAnalog
  • Classic.RAnalog

Potential Actions

So that covers the first part of a line in a mapping: the WiiMote buttons. What about the commands these trigger? You can also learn most of these by exploring the included mappings, but here’s a quick primer.

The most obvious thing you can do is map buttons to keys on the keyboard. “KEY_1″ would be the 1 key on your keyboard; “KEY_A”, the A key; “KEY_LEFTCONTROL” the left control key. You get the idea.

The concept isn’t that different for gamepad buttons. “BTN_A” would be the “A” button; “BTN_START”, the Start button.

A file called action_enum.txt outlines all possible actions, which I couldn’t hope to list here. Here’s a copy of that list, from abstrakraft.org. It’s long, but with it you can find the correct name of every key and button you’re thinking of.

You can, potentially, create your own mappings for just about anything. You could create a remote for your favorite media player, by mapping the keyboard shortcuts to your WiiMote. You could set up your WiiMote to work with a game that doesn’t support gamepads. Or you could tweak things so a game that’s not quite working as you want does.

That’s what I did with Fez. Here’s the mapping I made, but the main difference here is that I set up the WiiMote’s DPad to function as individual buttons, and changed the Plus and Minus buttons to function as regular buttons instead of Start and Select:

# Gamepad axis 0 (analog)  Nunchuk.Stick.X = ABS_X  Nunchuk.Stick.Y = ABS_Y<    # Main gamepad buttons  Wiimote.A = BTN_A  Wiimote.B = BTN_B  Nunchuk.C = BTN_C  Nunchuk.Z = BTN_Z    # Other gamepad buttons  Wiimote.Home = BTN_5  Wiimote.Minus = BTN_6  Wiimote.Plus = BTN_7  Wiimote.1 = BTN_8  Wiimote.2 = BTN_9  Wiimote.Up=BTN_1  Wiimote.Down=BTN_2  Wiimote.Left=BTN_3  Wiimote.Right=BTN_4  


The result still required that I configure things in-game, but ultimately worked better than the default could have.

Download WiiCan

Ready to get started? Go ahead and download WiiCan from fontanon.org. You’ll find a package at GetDeb for Debian/Ubuntu and source code for other distros.

Note that upon installation you’ll likely be unable to use the software – there’s a cryptic message when you click the WiiMote tray icon. There’s a quick fix for this at UbuntuForums.org. Open the Terminal and paste the following:

sudo gedit /etc/udev/rules.d/76-wiican.rules


This will create a new document, in which you should paste the following code:

KERNEL=="uinput", MODE:="0666"


Save the document. This creates a udev rule that enables you to use WiiCan without admin access. Reboot and you should be good to go.


This app took me a while to figure out, but I’m glad I took the time. Playing Fez is way more fun with my WiiMote than my keyboard, and I can’t wait to try out other fun uses.

Are you guys creating any cool mappings for WiiCan? Please, share them below. Also let me know any easier way to get things set up, because I always love learning from you. Thanks!

Leave a Reply

Your email address will not be published. Required fields are marked *