XWiimote
本文档介绍 Nintendo Wii Remote 的 Linux 内核驱动程序。此驱动程序自 3.1 版本以来一直是上游 Linux 的一部分。它是比 cwiid 等旧的用户空间驱动程序更易于使用的即插即用替代品。您可以使用此驱动程序将 Wii Remote 用于所有目的,例如作为 X 输入设备或 Linux 游戏的操纵杆控制器。
前提条件
最关键的软件要求是 蓝牙,请确保您已阅读有关此主题的维基页面并已完成配置后再继续。
用户空间实用程序可作为 xwiimoteAUR 包提供。
内核驱动程序 (模块 hid-wiimote) 自 3.1 版本以来一直是上游 Linux 的一部分,并且自那时以来一直包含在 Arch Linux 内核中。但是,可能需要加载该模块
# modprobe hid-wiimote
最后,您将需要一个 Wii Remote,这可以包括(但不是必需的)Nunchuk 和 Classic Controller 附件。
hid-wiimote 内核模块
如果您使用的是自定义内核,则可以通过 CONFIG_HID_WIIMOTE 启用 hid-wiimote 模块,并将依赖项 CONFIG_INPUT_FF_MEMLESS、CONFIG_LEDS_CLASS、CONFIG_POWER_SUPPLY 和 CONFIG_BT_HIDP 嵌入您的内核或作为模块预先加载。从内核版本 3.3 开始,有一个额外的配置选项 CONFIG_HID_WIIMOTE_EXT,默认情况下是启用的。它控制是否应支持 wiimote 扩展,如 Nunchuck 和 Classic Controller。
连接 Wii Remote
您可以像连接其他蓝牙设备一样连接到 Wii Remote。有关配对蓝牙设备的信息,请参阅 蓝牙。Wii Remote 不再需要特殊处理。BlueZ wiimote 插件会在后台为您处理所有特殊情况。
可以通过按下 Wii Remote 背面电池盖后面的红色同步按钮将其置于可发现模式。Wii Remote 将保持可发现模式 20 秒。您也可以按住 1+2 按钮将 Wii Remote 置于可发现状态。但是,第一种方法更可靠!
如果在配对设备时要求输入 PIN,则说明您的 BlueZ bluetoothd 守护程序不包含 wiimote 插件。有关更多信息,请参见 #BlueZ 不包含 wiimote 插件。如果这没有帮助,您仍然可以在不配对/绑定(即不使用 PIN 进行身份验证)的情况下连接到 Wiimote。这应该适用于任何 BlueZ 版本。如果您仍然无法连接 Wiimote,请参阅 #无法连接 Wiimote。
设备处理
如果您的 Wii Remote 已连接,它将出现在 /dev/input/eventX 中的多个输入设备下。您可以使用以下命令列出所有 Wii Remote:
$ ls /sys/bus/hid/devices
然后,您可以使用以下命令获取其他设备详细信息:
$ ls /sys/bus/hid/devices/<devid>/
Wii Remote 输入键的默认映射不太有用。存在用户空间应用程序可以重新映射 Wii Remote 输入到更有用的键/操作 [1] - 可通过 xwiimoteAUR 获得。如果您已安装此包,则可以使用 xwiishow 工具测试已连接的 Wii Remote。
这将列出所有已连接的 Wii Remote
$ xwiishow list
如果此命令显示了 Wii Remote 的路径(例如 /sys/bus/hid/devices/<did>),则可以使用以下命令测试设备:
$ xwiishow /sys/bus/hid/devices/<did>
或使用列出设备的索引
$ xwiishow 1
这将显示 Wii Remote 的图片,并在按下按钮时通知您。您可以使用 'r' 键启用/禁用震动马达。按 'q' 退出应用程序。您可能需要 root 权限才能使用这些工具。
如果 Wii Remote 在 xwiishow 工具中显示了按钮按下,但在其他方面没有注册,则很可能需要将您的用户添加到 input 组。
# usermod -aG input username
X.Org 输入驱动
有一个 X.Org 输入驱动程序 [2] 可通过 xf86-input-xwiimote-gitAUR 获得,它可以自动为您的 X 客户端提供输入设备。安装它并阅读相关的 man 手册页以获取更多信息。
$ man xorg-xwiimote
红外源
Wii Remote 包含一个红外摄像头。要将此摄像头用作指针输入设备,您需要一个红外支架作为红外源。可能的红外源包括:
- 任天堂 Wii 传感器条
- 无线传感器条 - 查看 eBay!
- 小蜡烛(应保持约 30 厘米的距离)
- 自制传感器条 ([3])
Option "MotionSource" "ir" 以及 Option "MapIRA" "left-button" 等,如在 Section "InputClass" Identifier "Nintendo Wii Remote" MatchProduct "Nintendo Wii Remote" MatchDevicePath "/dev/input/event*" Option "MotionSource" "ir" Option "MapIRA" "left-button" Option "MapIRB" "right-button" Option "Ignore" "off" Driver "xwiimote"
EndSection 中所示目前没有用户空间应用程序支持通过 IR 进行鼠标模拟。如果您需要此功能,您应该考虑使用不再受支持的 cwiid 方法。但是,xwiimote 工具正在积极开发中,很快也将支持 IR 鼠标模拟。
故障排除
输入映射非常奇怪
默认映射将 Wii Remote 的按键映射到最能模拟 Wii Remote 按钮的键常量。此映射默认情况下非常无用。要获得更好的映射,请使用 xwiimote 用户空间工具。安装 xwiimoteAUR 将添加一个 Xorg 配置文件,该文件会禁用默认映射。
BlueZ 不包含 wiimote 插件
上游 BlueZ 自 4.96 版本起包含 *可选* 的 wiimote 插件。但是,在编译时必须使用 --enable-wiimote 显式启用它。Arch Linux 包自 bluez 4.96-3 版本起包含 wiimote 插件。如果您不确定您的包是否包含 wiimote 插件,请使用:
$ grep wiimote /usr/lib/bluetooth/bluetoothd
这应该会显示:
grep: /usr/lib/bluetooth/bluetoothd: binary file matches
如果匹配,则表示您的 BlueZ 包含 wiimote 插件,不再需要用户交互。如果不匹配,您需要自行启用它或在没有它的情况下工作。如果您不想编译自己的 bluez 包,则可以通过在连接时不进行配对/绑定来在没有此插件的情况下使用 Wiimote。例如,在使用 Blueman 或 gnome-bluetooth 时,您需要在添加新设备时选择不配对继续。
如果您想自己编译该模块,请在配置标志中添加 --enable-wiimote 并按常规进行。有关更多信息,请参阅 bluez PKGBUILD。
无法连接 Wiimote
BlueZ 包自 4.96 版本起包含一个特殊的 wiimote 插件,可以为您处理所有 Wii Remote 的特殊情况。如果您无法像其他设备一样配对 Wii Remote,则应尝试在不配对/绑定(即不使用 PIN 身份验证)的情况下进行连接。如果您在配置 BlueZ 和 hid_wiimote 正确之前尝试连接设备,则可能需要删除蓝牙设备并重新开始连接过程。如果仍然无法正常工作,请将您的问题报告给上游开发人员,网址为 XWiimote@GitHub。
请始终使用 Wii Remote 背面电池盖后面的红色同步按钮进行故障排除。这比按住 1+2 按钮更可靠。
自动重连功能允许 Wii Remote 在按下按键时重新连接到其上次连接的主机。这意味着您不必每次都手动连接 Wii Remote。但是,自动重连功能仅在您配对 Wii Remote 时有效。不带 wiimote 插件进行连接将无法启用自动重连。
与 xwiimote 配对后无法在 Dolphin-emu 中使用 Wiimote
Dolphin 使用自己的驱动程序,因此在 Dolphin 运行时按下 Wiimote 上的重新同步按钮会将 Wiimote 重新同步到 Dolphin 而不是 xwiimote。
我的 Wii Remote 仍然无法工作
XWiimote 软件堆栈正在积极开发中。请在 XWiimote@GitHub 报告您的问题。
还有其他提供 Linux Wii Remote 支持的项目。有关 cwiid 项目,请参阅 Wii Remote 文章。
连接后 Wiimote 一直在闪烁
将 ClassicBondedOnly=false 添加到 /etc/bluetooth/input.conf
有关更多信息,请参阅 此问题。