Wiimote
本文将介绍在 Linux 中使用 Wiimote 进行常规操作所需的基本步骤。本文不会详细介绍某些步骤,因为已经有很多针对某些部分的指南。
先决条件
- 蓝牙
- Wii 遥控器
Wiimote 通过蓝牙连接。这必须已经配置好并运行,而无需本指南的帮助。您将需要一个 Wii 遥控器,其中可以包括(但不是必需) Nunchuk 和经典手柄附件。
一旦 Wiimote 通过蓝牙连接,设备应该开始工作,因为 Wiimote 的内核驱动程序自 Linux 3.1 版本以来就已包含在内核中,并且 Arch Linux 中的 bluez 软件包包含了所需的 wiimote 插件。
连接 Wii 遥控器
红外源
可能的红外源有
- 任天堂 Wii 感应条
- 无线感应条 - 查看 eBay!
- 普通灯泡
- 小蜡烛(应保持约 30 厘米的距离)
- 自制感应条 ([1])
输入设备
MoltenGamepad
moltengamepadAUR 提供了一种显示服务器中立的方式来配置 Wiimote 和其他游戏控制器。它可以在 X11、Wayland 甚至 Linux 控制台中工作。
将 Wii 遥控器用作媒体设备
MoltenGamepad 可以使用 uinput
内核模块 来模拟键盘按键。您可以使用它来控制 Wii 遥控器播放视频和音乐。
首先,安装 MoltenGamepad。
创建系统范围的配置目录
# mkdir -p /etc/xdg/moltengamepad/profiles
添加一个配置文件,用于将 Wii 遥控器设置为媒体控制器(请参阅上游示例)。您可以将按键绑定设置为您喜欢的任何内容。
/etc/xdg/moltengamepad/profiles/wiimote_mediacontrol
[wiimote] wiimote.wm_2 = key(key_nextsong) wiimote.wm_down = key(key_down) wiimote.wm_up = key(key_up) wiimote.wm_right = key(key_right) wiimote.wm_plus = key(key_volumeup) wiimote.wm_1 = key(key_previoussong) wiimote.wm_left = key(key_left) wiimote.wm_a = key(key_playpause) wiimote.wm_minus = key(key_volumedown) wiimote.wm_b = key(key_mute)
在 MoltenGamepad 启动时加载此配置文件,方法是将其添加到根配置文件中
/etc/xdg/moltengamepad/moltengamepad.cfg
load profiles from "wiimote_mediacontrol"
最后,启动/启用 moltengamepad.service
单元。
X11
XWiimote 提供了一个 X11 输入驱动程序,用于将 Wiimote 用作桌面输入设备。有关详细信息,请参阅XWiimote#X.Org 输入驱动程序。
cwiid
uinput
或 XWiimote。Wiimote 可以像鼠标一样充当常规输入设备,使用 wminput(1),它来自 cwiidAUR 软件包。此软件包包含 Wiimote 基本使用所需的用户空间驱动程序、库和程序。
首先,您需要确保加载 uinput
模块
# modprobe uinput
现在您应该在 /dev/uinput
中有一个设备。为了永久使用,将 uinput 添加到 mkinitcpio.conf 中的 MODULES。
cwiid 现在应该允许您扫描您的 Wiimote。运行以下命令并按下 Wiimote 上的 1
和 2
按钮
$ bluetoothctl scan on
Scanning ... MAC_address Nintendo RVL-CNT-01
一旦检测到您的 Wiimote,您可以通过运行 wmgui(1) 并通过该界面测试各种按钮和传感器来测试它是否正常工作。
如果您没有红外源,只需运行
$ wminput -w
您现在可以通过向前、向后或向侧倾斜 Wiimote 来控制指针。
如果您有红外源,请运行
$ wminput -c ir_ptr -w
配置
默认配置文件位于 /etc/cwiid/wminput/
中。它们是您在 ~/.cwiid/wminput
或 /usr/local/etc/cwiid/wminput
中自定义设置的良好起点。通用语法是
Wiimote_button = keyboard_key
Wiimote_button
的所有可能值都可以在 cwiid/wminput.list 中找到。keyboard_key
的可能值是 键码,位于 /usr/include/linux/input-event-codes.h。
无法打开 uinput
如果 wminput 给出此错误,导致您无法使用 Wiimote,请使用以下内容创建一个 udev 规则 [2]
KERNEL=="uinput", GROUP="wheel", MODE="0660"
之后重启系统。另请参阅 wminput(1) § DESCRIPTION 关于 uinput
的 udev 规则。
或者,将 uinput
添加到 MODULES 数组中,位于 mkinitcpio.conf
MODULES=(uinput ...)
重新生成 initramfs 并重启系统。