特殊:Badtitle/NS100:CWiiD
文章出处: |
{{#if: | {{{2}}} | https://help.ubuntu.com/community/CWiiD }} |
点击翻译: |
English {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/af | • {{#if: UbuntuHelp:CWiiD|Afrikaans| [[::CWiiD/af|Afrikaans]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/ar | • {{#if: UbuntuHelp:CWiiD|العربية| [[::CWiiD/ar|العربية]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/az | • {{#if: UbuntuHelp:CWiiD|azərbaycanca| [[::CWiiD/az|azərbaycanca]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/bcc | • {{#if: UbuntuHelp:CWiiD|جهلسری بلوچی| [[::CWiiD/bcc|جهلسری بلوچی]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/bg | • {{#if: UbuntuHelp:CWiiD|български| [[::CWiiD/bg|български]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/br | • {{#if: UbuntuHelp:CWiiD|brezhoneg| [[::CWiiD/br|brezhoneg]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/ca | • {{#if: UbuntuHelp:CWiiD|català| [[::CWiiD/ca|català]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/cs | • {{#if: UbuntuHelp:CWiiD|čeština| [[::CWiiD/cs|čeština]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/de | • {{#if: UbuntuHelp:CWiiD|Deutsch| [[::CWiiD/de|Deutsch]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/el | • {{#if: UbuntuHelp:CWiiD|Ελληνικά| [[::CWiiD/el|Ελληνικά]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/es | • {{#if: UbuntuHelp:CWiiD|español| [[::CWiiD/es|español]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/fa | • {{#if: UbuntuHelp:CWiiD|فارسی| [[::CWiiD/fa|فارسی]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/fi | • {{#if: UbuntuHelp:CWiiD|suomi| [[::CWiiD/fi|suomi]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/fr | • {{#if: UbuntuHelp:CWiiD|français| [[::CWiiD/fr|français]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/gu | • {{#if: UbuntuHelp:CWiiD|ગુજરાતી| [[::CWiiD/gu|ગુજરાતી]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/he | • {{#if: UbuntuHelp:CWiiD|עברית| [[::CWiiD/he|עברית]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/hu | • {{#if: UbuntuHelp:CWiiD|magyar| [[::CWiiD/hu|magyar]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/id | • {{#if: UbuntuHelp:CWiiD|Bahasa Indonesia| [[::CWiiD/id|Bahasa Indonesia]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/it | • {{#if: UbuntuHelp:CWiiD|italiano| [[::CWiiD/it|italiano]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/ja | • {{#if: UbuntuHelp:CWiiD|日本語| [[::CWiiD/ja|日本語]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/ko | • {{#if: UbuntuHelp:CWiiD|한국어| [[::CWiiD/ko|한국어]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/ksh | • {{#if: UbuntuHelp:CWiiD|Ripoarisch| [[::CWiiD/ksh|Ripoarisch]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/mr | • {{#if: UbuntuHelp:CWiiD|मराठी| [[::CWiiD/mr|मराठी]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/ms | • {{#if: UbuntuHelp:CWiiD|Bahasa Melayu| [[::CWiiD/ms|Bahasa Melayu]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/nl | • {{#if: UbuntuHelp:CWiiD|Nederlands| [[::CWiiD/nl|Nederlands]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/no | • {{#if: UbuntuHelp:CWiiD|norsk| [[::CWiiD/no|norsk]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/oc | • {{#if: UbuntuHelp:CWiiD|occitan| [[::CWiiD/oc|occitan]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/pl | • {{#if: UbuntuHelp:CWiiD|polski| [[::CWiiD/pl|polski]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/pt | • {{#if: UbuntuHelp:CWiiD|português| [[::CWiiD/pt|português]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/ro | • {{#if: UbuntuHelp:CWiiD|română| [[::CWiiD/ro|română]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/ru | • {{#if: UbuntuHelp:CWiiD|русский| [[::CWiiD/ru|русский]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/si | • {{#if: UbuntuHelp:CWiiD|සිංහල| [[::CWiiD/si|සිංහල]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/sq | • {{#if: UbuntuHelp:CWiiD|shqip| [[::CWiiD/sq|shqip]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/sr | • {{#if: UbuntuHelp:CWiiD|српски / srpski| [[::CWiiD/sr|српски / srpski]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/sv | • {{#if: UbuntuHelp:CWiiD|svenska| [[::CWiiD/sv|svenska]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/th | • {{#if: UbuntuHelp:CWiiD|ไทย| [[::CWiiD/th|ไทย]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/tr | • {{#if: UbuntuHelp:CWiiD|Türkçe| [[::CWiiD/tr|Türkçe]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/vi | • {{#if: UbuntuHelp:CWiiD|Tiếng Việt| [[::CWiiD/vi|Tiếng Việt]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/yue | • {{#if: UbuntuHelp:CWiiD|粵語| [[::CWiiD/yue|粵語]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/zh | • {{#if: UbuntuHelp:CWiiD|中文| [[::CWiiD/zh|中文]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/zh-hans | • {{#if: UbuntuHelp:CWiiD|中文(简体)| [[::CWiiD/zh-hans|中文(简体)]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CWiiD | UbuntuHelp:CWiiD | {{#if: | :}}CWiiD}}/zh-hant | • {{#if: UbuntuHelp:CWiiD|中文(繁體)| [[::CWiiD/zh-hant|中文(繁體)]]}}|}} |
{{#ifeq:UbuntuHelp:CWiiD|:CWiiD|请不要直接编辑翻译本页,本页将定期与来源同步。}} |
{{#ifexist: :CWiiD/zh | | {{#ifexist: CWiiD/zh | | {{#ifeq: {{#titleparts:CWiiD|1|-1|}} | zh | | }} }} }} {{#ifeq: {{#titleparts:CWiiD|1|-1|}} | zh | | }}
Introduction
Since the Wii Remote uses bluetooth to communicate with the console, it's relatively straightforward to use it to control a computer. The most obvious way is similar to the main menu on the Wii console - point the remote where you want the cursor to go, and press A and B to left and right click. There are also options for tilting the Wiimote to move the cursor around, which is useful if you don't have a sensor bar available. Following a mash up of other howtos, man pages and help from forum posts (thanks to Babazoid for pointing out a couple of things that should've been obvious, and Rycuda for showing me where I was going wrong with Autoconf) I've got my Wii remotes working nicely as mice in Ubuntu. These instructions have been tested in both Edgy and Feisty. So, without further ado:
Installation
First things first, there are a handful of packages that need installing:
sudo apt-get install libbluetooth2 bluez-utils original-awk bison flex libbluetooth2-dev autoconf mouseemu libgtk2.0-dev
At this point, you can (optionally!) turn on the Wii remote to scan by pressing 1 and 2 simultaneously (all the lights will flash) then running:
hcitool scan
If the remote is picked up, something like the following will be displayed:
Scanning ... 00:19:1D:A8:44:AB Nintendo RVL-CNT-01
Next, downloading and installing the Wii remote library:
mkdir Wii cd Wii/ wget "http://downloads.sourceforge.net/libwiimote/libwiimote-0.4.tgz?modtime=1173542681&big_mirror=0" tar -zxvf libwiimote-0.4.tgz cd libwiimote-0.4/ autoconf ./configure make sudo make install
It is not ideal to use make install on a package managed distribution like Ubuntu, so you might like to take a look at CheckInstall. If you are using checkinstall, just replace sudo make install
with sudo checkinstall
throughout this howto.
And CWiiD - the program for actually using the library:
wget http://abstrakraft.org/cwiid/downloads/cwiid-0.5.03.tgz tar -zxvf cwiid-0.5.03.tgz cd cwiid-0.5.03/ ./configure make sudo make install sudo ldconfig /usr/local/lib/
At this point, ensure that the local libraries are recognised by configuring the runtime linker to check in /usr/local/lib
and update the cache.
sudo sh -c "echo /usr/local/lib > /etc/ld.so.conf.d/locallib.conf" sudo ldconfig
You might find your local libraries are already defined, so you can just run ldconfig and skip the ld.so.conf. Check /etc/ld.so.conf.d
for files already containing /usr/local/lib
In 7.10 just install the packages
sudo aptitude install libcwiid0 lswm wmgui wminput
Controlling the Wii Remote
Now it's possible to load a gui which shows what the Wiimote is doing:
wmgui
Select "connect" from the file menu, press 1+2 when prompted then OK. Lights and rumble can be turned on and off from the controls menu, and which inputs are displayed from the settings menu. Next up is the mouse "emulator" which allows you to control the mouse with the Wiimote. At this point, it can be run with default settings (tilting the Wiimote moves the pointer, A and B work as left and right click). Press 1 and 2 to enter discoverable mode then type:
sudo wminput
If it doesn't work try
sudo modprobe uinput
first.
At this point, I think wminput is using one of ubuntu's default configurations in xorg.conf, so if it does not work for you, include the xorg.conf configuration in the following section "Using the Sensor Bar"
It is not wise to run wminput as superuser, so when you have finished testing change your udev rules to allow access to /dev/input/uinput
. I'm going to assume you are a member of the admin group but you can always create a dedicated group for uinput users and use that instead.
sudo sh -c 'echo "KERNEL==\"uinput\", GROUP=\"admin\"" > /etc/udev/rules.d/50-cwiid-input.rules' /etc/init.d/udev restart
Using the Sensor Bar
In order to get it working with the sensor bar, and to get the buttons to emulate keyboard functions, a couple of bits need to be added to xorg.conf.
Open xorg.conf in your favourite text editor (eg: sudo gedit /etc/X11/xorg.conf
- don't forget the sudo! ) then add the following section after the last InputDevice
section:
Section "InputDevice" Identifier "Wiimote" Driver "evdev" Option "Name" "Nintendo Wiimote" EndSection
and the following at the end of the ServerLayout
section:
InputDevice "Wiimote" "AlwaysCore"
Now to reload xorg.conf by restarting X. (if there's a better way to reload it, I'd appreciate it if someone told me!) Make sure you haven't got anything unsaved, then press ctrl+alt+backspace. This will drop you back at a login screen, so make sure you know how to get back to this page! Now you can reload wminput with the IR settings. Press 1 and 2 on the Wiimote to enter discoverable mode and type:
wminput -c ir_ptr
Note: If you have not changed your udev rules, don't forget to sudo this wminput! Now waving the Wiimote at your sensor bar will move the mouse around the screen! A and B still act as left and right click - just like in the Wii menus! It's worth noting that if the Wii is turned off, so is the sensor bar, so you have to have it turned on. This means that if your Wiimotes are paired with your console, when you press 1 and 2, they'll automatically link to the console, rather than your computer. I'm currently working round this by pressing the red button under the battery cover instead of 1 and 2 to enter discoverable mode. I'm planning to go and pair one of my Wiimotes with someone else's console, so I won't have to do that.
Sensor bar alternatives
Since the sensor bar consists of a number of IR LEDs (in two groups, one at each end of the bar), which the Wii remote detects as two dots, it's relatively easy to make an alternative sensor bar for use away from the Wii. Ideally, you want two IR point sources, such as IR LEDs, however candles, lighters, light bulbs etc will work as well. Also, CWiiD only actually requires a single point to track, so it is possible to just point the remote at a room light, and track from that. There are a number of companies selling various Wii accessories, such as replacement sensor bars, which could be used, however I plan to buy some IR LEDs and mount them on my laptop, and connect them to a USB port.
Config files
If you want to change the config files, they're in /usr/local/etc/cwiid/wminput
- it'll load default
unless something else is specified. After install, default is linked to acc_ptr
, so the acclerometers control the pointer. buttons contains the mappings for the buttons to keys, and is linked by the other config files. I've made a new config file, which is basically a copy/paste from buttons
and ir_ptr
:
#IR pointer Plugin.ir_ptr.X = ~ABS_X Plugin.ir_ptr.Y = ~ABS_Y #buttons Wiimote.A = BTN_LEFT Wiimote.B = BTN_RIGHT Wiimote.Up = KEY_KATAKANA Wiimote.Down = KEY_KPENTER Wiimote.Left = KEY_HENKAN Wiimote.Right = KEY_MUHENKAN Wiimote.Minus = KEY_BACK Wiimote.Plus = KEY_FORWARD Wiimote.Home = KEY_HOME Wiimote.1 = KEY_SLASH Wiimote.2 = KEY_SPACE #Nunchuk.C = BTN_LEFT #Nunchuk.Z = BTN_RIGHT # #Classic.Up = KEY_UP #Classic.Down = KEY_DOWN #Classic.Left = KEY_LEFT #Classic.Right = KEY_RIGHT #Classic.Minus = KEY_BACK #Classic.Plus = KEY_FORWARD #Classic.Home = KEY_HOME #Classic.A = BTN_LEFT #Classic.B = BTN_RIGHT #Classic.X = #Classic.Y = #Classic.ZL = #Classic.ZR = #Classic.L = #Classic.R =
But I'm currently having a few problems with it. The up/down/left/right maps aren't assigned sensibly - hence the rather odd bindings, however these values seem to work. The right click has also stopped working, despite not changing anything relating to it in the config file.
There is a file in with the source ~/Wii/cwiid-0.5.03/wminput/action_enum.txt
which should contain all the codes for keys, however it seems to be significantly out - at least for a GB keyboard.
Problems
There are a few things I'm not quite happy with here. I'd like to find a way to disassociate my controllers from my console, so that they don't automatically link to it whenever it's on. I'd like to have a better way to reload xorg.conf than restarting X - especially for a howto that's being followed from a webpage! The keymappings in the config file don't work sensibly. The key mappings given don't map to the keys they claim to. If anyone has any ideas for fixing any of these, I would be very happy to hear from them! (user leffect on the Ubuntu forums) There is a discussion thread based on this howto at http://ubuntuforums.org/showthread.php?p=3258659