我看不到使用 cython-hidapi 库的蓝牙设备 (Joy-Con)

I can't see a bluetooth device (Joy-Con) using cython-hidapi library

Device/OS:杰森纳米 / Ubuntu 18.04

Python 3

附有蓝牙加密狗。

Joy-Con 已连接,如 UI 所示:

以及我这样做的时候:

$ hcitool con
Connections:
    > ACL B8:78:26:19:C1:8C handle 11 state 1 lm MASTER AUTH ENCRYPT

$ bt-device -l
Added devices:
Joy-Con (R) (B8:78:26:19:C1:8C)

我已经使用说明从源代码安装了 https://github.com/trezor/cython-hidapi(我在构建期间尝试了 hidraw 和 libusb API。

在这两种情况下,这个简单的代码:

import hid

devices = hid.enumerate(0, 0)
print(devices)

仅打印出连接到设备的有线 USB 鼠标和 USB 键盘:

[
{'path': b'0001:0006:00', 'vendor_id': 1118, 'product_id': 203, 'serial_number': '', 'release_number': 256, 'manufacturer_string': '', 'product_string': '', 'usage_page': 0, 'usage': 0, 'interface_number': 0},
{'path': b'0001:0004:00', 'vendor_id': 1008, 'product_id': 36, 'serial_number': '', 'release_number': 304, 'manufacturer_string': '', 'product_string': '', 'usage_page': 0, 'usage': 0, 'interface_number': 0}
]

解决方案是使用 udev rules. These rules 在我的案例中有效。

我最终也使用了不同的 Python 库 https://github.com/apmorton/pyhidapi。但我确信原始的 cython-hidapi 会很好。

与上面的答案相反,即使使用正确的规则,我也无法使用 cython-hidapi 找到 joycons。对于遇到此问题的任何人,我建议改为尝试使用 pyhidapi 库。当时工作得很好。 另外,我注意到上面给出的规则并没有选择 joycons。这可能是因为某些系统差异,或者可能是因为我使用的是欧洲 joycons?不管怎样,我按照这里修改了它(它仍然不应该太宽泛,因为它是基于 joycon 设备名称):
KERNEL=="js0", SUBSYSTEM=="input", MODE="0666"

我发现这条规则也有助于调试,因为 udev 规则有时真的很挑剔。如果规则的其余部分选择了设备,它实际上会在桌面上创建一个 udev-env.txt 文档(当然,用你自己的名字替换用户):
KERNEL=="js0", SUBSYSTEM=="input", 运行+="/bin/sh -c 'echo == >> /home/user/Desktop/udev-env.txt; env >> /home/user/Desktop/udev-env.txt'"

真心希望这个回答能帮到和我一样被卡住的人。花了整整 3 天的时间才找到正确的方法使其发挥作用,我不希望其他任何人经历相同的过程。