XWiimote
本文是关于 Nintendo Wii 遥控器 Linux 内核驱动程序的。自 3.1 版本以来,此驱动程序已成为上游 Linux 的一部分。它是旧版用户空间驱动程序(如 cwiid)的易于使用的直接替代品。您可以将 Wii 遥控器用于所有目的,例如作为 Linux 游戏的 X 输入设备或操纵杆控制器。
先决条件
最重要的软件要求是蓝牙,请确保您已阅读有关它的 wiki 页面,并在继续操作之前对其进行了配置。
用户空间实用程序以 xwiimoteAUR 软件包的形式提供。
内核驱动程序(模块 hid-wiimote
)自 3.1 版本以来已成为上游 Linux 的一部分,并且从那时起就已包含在 Arch Linux 内核中。但是,可能需要加载该模块
# modprobe hid-wiimote
最后,您将需要一个 Wii 遥控器,其中可以包括(尽管不是必需的)Nunchuk 和 Classic Controller 配件。
hid-wiimote 内核模块
如果您使用的是自定义内核,则可以使用 CONFIG_HID_WIIMOTE
和依赖项 CONFIG_INPUT_FF_MEMLESS
、CONFIG_LEDS_CLASS
、CONFIG_POWER_SUPPLY
和 CONFIG_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])
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,而无需此插件。例如,当使用 Blueman 或 gnome-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
有关更多信息,请参阅 此问题