XWiimote

来自 ArchWiki

本文是关于 Nintendo Wii 遥控器 Linux 内核驱动程序的。自 3.1 版本以来,此驱动程序已成为上游 Linux 的一部分。它是旧版用户空间驱动程序(如 cwiid)的易于使用的直接替代品。您可以将 Wii 遥控器用于所有目的,例如作为 Linux 游戏的 X 输入设备或操纵杆控制器。

注意: XWiimote 工具仍处于实验阶段。连接和管理 Wii 遥控器运行良好,并且有一个驱动程序可以将 Wii 遥控器用作 X11 输入,但可能仍缺少扩展功能。

先决条件

最重要的软件要求是蓝牙,请确保您已阅读有关它的 wiki 页面,并在继续操作之前对其进行了配置。

用户空间实用程序以 xwiimoteAUR 软件包的形式提供。

内核驱动程序(模块 hid-wiimote)自 3.1 版本以来已成为上游 Linux 的一部分,并且从那时起就已包含在 Arch Linux 内核中。但是,可能需要加载该模块

# modprobe hid-wiimote

最后,您将需要一个 Wii 遥控器,其中可以包括(尽管不是必需的)Nunchuk 和 Classic Controller 配件。

hid-wiimote 内核模块

如果您使用的是自定义内核,则可以使用 CONFIG_HID_WIIMOTE 和依赖项 CONFIG_INPUT_FF_MEMLESSCONFIG_LEDS_CLASSCONFIG_POWER_SUPPLYCONFIG_BT_HIDP 在您的内核中启用 hid-wiimote 模块,或作为先前加载的模块。从内核版本 3.3 开始,还有一个额外的配置选项 CONFIG_HID_WIIMOTE_EXT,默认情况下启用。它控制是否应支持 Wiimote 扩展,如 Nunchuck 和 Classic Controller。

连接 Wii 遥控器

您可以像连接任何其他蓝牙设备一样连接到 Wii 遥控器。有关配对蓝牙设备的信息,请参阅 蓝牙。Wii 遥控器不再需要特殊处理。BlueZ wiimote 插件会在后台为您处理所有特殊性。

可以通过按下背面电池盖后面的红色同步按钮,将 Wii 遥控器置于可发现模式。Wii 遥控器将保持可发现模式 20 秒。您也可以按住 1+2 按钮将 Wii 遥控器置于可发现状态。但是,第一种方法更可靠!

如果在绑定设备时要求输入 PIN 码,则说明您的 BlueZ bluetoothd 守护程序不包含 wiimote 插件。有关更多信息,请参阅 #BlueZ 不包含 wiimote 插件。如果这没有帮助,您仍然可以在不配对/绑定的情况下连接到 Wiimote(即不使用 PIN 码进行身份验证)。这应该适用于任何 BlueZ 版本。如果您仍然无法连接 Wiimote,请参阅 #无法连接 Wiimote

设备处理

如果您的 Wii 遥控器已连接,它将显示在 /dev/input/eventX 内的多个输入设备中。您可以使用以下命令列出所有 Wii 遥控器

$ ls /sys/bus/hid/devices

然后,您可以使用以下命令获取其他设备详细信息

$ ls /sys/bus/hid/devices/<devid>/

Wii 遥控器的输入键的默认映射不是很有用。存在用户空间应用程序,可以将 Wii 遥控器输入重新映射到更有用的键/操作 [1] - 通过 xwiimoteAUR 提供。如果您安装了此软件包,则可以使用 xwiishow 工具测试已连接的 Wii 遥控器

这将列出所有已连接的 Wii 遥控器

$ xwiishow list

如果这显示了 Wii 遥控器的路径(例如 /sys/bus/hid/devices/<did>),那么您可以使用以下命令测试该设备

$ xwiishow /sys/bus/hid/devices/<did>

或使用列出的设备的索引

$ xwiishow 1

这将显示 Wii 遥控器的图片,并在按下按钮时通知您。您可以使用 'r' 键启用/禁用震动电机。按 'q' 键退出应用程序。您可能需要 root 权限才能使用这些工具。

如果 Wii 遥控器在 xwiishow 工具中显示按钮按下,但没有其他注册,则很可能您需要将您的用户添加到 input 组。

# usermod -aG input username

X.Org 输入驱动

AUR 中提供了一个 X.Org 输入驱动程序 [2] xf86-input-xwiimote-gitAUR,它会自动为您的 X 客户端提供输入设备。安装它并阅读相关的帮助页面以获取更多信息

$ man xorg-xwiimote

红外源

Wii 遥控器包括一个红外摄像头。要将此摄像头用作指针输入设备,您需要一个 IR-rack 作为红外源。可能的红外源包括

  • 任天堂 Wii 感应条
  • 无线感应条 - 查看 eBay!
  • 小蜡烛(应保持约 30 厘米的距离)
  • 自制感应条 ([3])
注意: xf86-input-xwiimote 支持通过 IR 使用 Option "MotionSource" "ir" 进行鼠标模拟

当前没有用户空间应用程序可以启用使用 IR 传感器的鼠标模拟。如果您需要它,您应该考虑使用不再受支持的 cwiid 方法。但是,xwiimote 工具正在大力开发中,并且很快也将支持 IR 鼠标模拟。

故障排除

输入映射非常奇怪

默认映射将 Wii 遥控器按键映射到最能代表 Wii 遥控器按钮的按键常量。默认情况下,此映射非常无用。要获得更好的映射,请使用 xwiimote 用户空间工具。安装 xwiimoteAUR 将添加一个 Xorg 配置文件,用于禁用默认映射。

BlueZ 不包含 wiimote 插件

自 4.96 版本以来,上游 BlueZ 包含可选的 wiimote 插件。但是,必须在编译期间使用 --enable-wiimote 显式启用它。自 bluez 4.96-3 以来,Arch Linux 软件包包含 wiimote 插件。如果您不确定您的软件包是否包含 wiimote 插件,请使用

$ grep wiimote /usr/lib/bluetooth/bluetoothd

这应该显示

grep: /usr/lib/bluetooth/bluetoothd: binary file matches

如果这匹配,则您的 BlueZ 包含 wiimote 插件,并且不再需要用户交互。如果这不匹配,您需要自己启用它或在没有它的情况下工作。如果您不想编译自己的 bluez 软件包,则可以在不配对/绑定的情况下连接 Wiimote,而无需此插件。例如,当使用 Bluemangnome-bluetooth 时,您需要在添加新设备时选择不配对继续

如果您想自己编译模块,请将 --enable-wiimote 添加到您的配置标志并像往常一样继续。有关更多信息,请参阅 bluez PKGBUILD

无法连接 Wiimote

4.96 版本以来,BlueZ 软件包包含一个特殊的 wiimote 插件,它可以为您处理所有 Wii 遥控器的特殊性。如果您无法像连接任何其他设备一样配对 Wii 遥控器,那么您应该尝试在不配对/绑定的情况下连接(即不使用 PIN 码进行身份验证)。如果您在正确配置 BlueZ 和 hid_wiimote 之前尝试连接设备,则可能需要删除蓝牙设备并重新开始连接过程。如果仍然无法工作,请将您的问题报告给上游开发人员:XWiimote@GitHub

请始终使用 Wii 遥控器背面电池盖后面的红色同步按钮进行故障排除。这比按住 1+2 按钮更可靠。

自动重新连接功能允许 Wii 遥控器在按下按键时重新连接到其上次连接的主机。这意味着您无需每次都手动连接 Wii 遥控器。但是,自动重新连接功能仅在您配对 Wii 遥控器后才有效。不使用 wiimote 插件连接将不会启用自动重新连接。

与 xwiimote 配对后无法在 Dolphin-emu 中使用 Wiimote

Dolphin 使用自己的驱动程序,因此在 Dolphin 运行时按下 Wiimote 上的重新同步按钮应将 Wiimote 重新同步到 Dolphin 而不是 xwiimote。

我的 Wii 遥控器仍然无法工作

XWiimote 软件堆栈正在积极开发中。请在 XWiimote@GitHub 上报告您的问题。

还有其他项目为 linux 提供 Wii 遥控器支持。有关 cwiid 项目,请参阅 Wii 遥控器文章

连接后 Wiimote 一直闪烁

ClassicBondedOnly=false 添加到 /etc/bluetooth/input.conf

有关更多信息,请参阅 此问题

参见

  • Wiimote:Cwiid:一个较旧的 linux 软件堆栈,提供部分 Wii 遥控器支持
  • [4]:关于 Wii 遥控器的开发者博客