Wiimote

来自 ArchWiki

本文将介绍在 Linux 中使用 Wiimote 进行常规操作所需的基本步骤。本文不会详细介绍某些步骤,因为已经有很多针对某些部分的指南。

先决条件

  • 蓝牙
  • Wii 遥控器

Wiimote 通过蓝牙连接。这必须已经配置好并运行,而无需本指南的帮助。您将需要一个 Wii 遥控器,其中可以包括(但不是必需) Nunchuk 和经典手柄附件。

一旦 Wiimote 通过蓝牙连接,设备应该开始工作,因为 Wiimote 的内核驱动程序自 Linux 3.1 版本以来就已包含在内核中,并且 Arch Linux 中的 bluez 软件包包含了所需的 wiimote 插件。

连接 Wii 遥控器

请参阅XWiimote#连接 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

注意: 这种方法基于不再在上游开发的软件。您应该改用 Linux 内核驱动程序和 uinputXWiimote

Wiimote 可以像鼠标一样充当常规输入设备,使用 wminput(1),它来自 cwiidAUR 软件包。此软件包包含 Wiimote 基本使用所需的用户空间驱动程序、库和程序。

首先,您需要确保加载 uinput 模块

# modprobe uinput

现在您应该在 /dev/uinput 中有一个设备。为了永久使用,将 uinput 添加到 mkinitcpio.conf 中的 MODULES

cwiid 现在应该允许您扫描您的 Wiimote。运行以下命令并按下 Wiimote 上的 12 按钮

$ 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 关于 uinputudev 规则。

或者,将 uinput 添加到 MODULES 数组中,位于 mkinitcpio.conf

MODULES=(uinput ...)

重新生成 initramfs 并重启系统。

参见