lsusb命令无法显示部分USB游戏手柄设备详情的问题求助
我正在开发一个桌面应用,需要用到游戏手柄,目前用lsusb命令来检测手柄是否连接。正常情况下,连接手柄后lsusb会显示设备的型号名称,比如我常用的SHANWAN Android Gamepad和DragonRise Inc. PC TWIN SHOCK Gamepad。
但遇到了一个奇怪的问题:当同时连接这两个手柄时,有些系统上lsusb能正常显示所有设备的完整信息:
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 413c:2113 Dell Computer Corp. Dell KB216 Wired Keyboard Bus 001 Device 002: ID 413c:301a Dell Computer Corp. Dell MS116 USB Optical Mouse Bus 001 Device 028: ID 2563:0526 SHANWAN Android Gamepad Bus 001 Device 029: ID 0079:0006 DragonRise Inc. PC TWIN SHOCK Gamepad Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
但在另一些系统上,SHANWAN Android Gamepad的型号名称却不显示,输出变成了这样:
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 413c:2113 Dell Computer Corp. Dell KB216 Wired Keyboard Bus 001 Device 002: ID 413c:301a Dell Computer Corp. Dell MS116 USB Optical Mouse Bus 001 Device 028: ID 2563:0526 Bus 001 Device 029: ID 0079:0006 DragonRise Inc. PC TWIN SHOCK Gamepad Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
明明两个手柄都连接正常,但SHANWAN的型号名称缺失了,有没有办法解决这个问题?
可能的解决方案:
检查并更新USB设备ID数据库
lsusb显示的设备名称是从系统的usb.ids数据库获取的,这个文件通常在/usr/share/hwdata/usb.ids或者/var/lib/usbutils/usb.ids路径下。你可以搜索这个文件里有没有2563:0526这个VID/PID组合:grep -A 1 "2563" /usr/share/hwdata/usb.ids如果找不到对应的SHANWAN设备名称,说明数据库里没有收录这个设备。这时候可以更新数据库:
- Debian/Ubuntu系系统可以直接运行
sudo update-usbids命令,自动下载最新的usb.ids文件。 - 其他系统可以手动替换最新的usb.ids文件(从Linux USB项目的官方维护源获取)。
- Debian/Ubuntu系系统可以直接运行
查看设备的详细USB描述符
有些设备本身可能没有正确返回产品字符串,导致lsusb无法显示名称。你可以用lsusb -v命令查看该设备的详细信息,重点看iProduct字段:lsusb -v -d 2563:0526如果输出里
iProduct的值是0,或者对应的字符串为空,那说明这个手柄硬件本身没有提供产品名称,这种情况下lsusb确实没法显示,你只能通过VID/PID(2563:0526)来识别这个设备。更新usbutils工具包
lsusb是usbutils包的一部分,旧版本的工具可能对新设备的兼容性不好。可以尝试重新安装或更新这个包:# Debian/Ubuntu系 sudo apt update && sudo apt install --reinstall usbutils # Fedora/RHEL系 sudo dnf reinstall usbutils检查udev规则
少数情况下,udev规则可能影响设备信息的显示。可以查看/etc/udev/rules.d/和/lib/udev/rules.d/下的规则文件,看有没有针对USB游戏手柄的特殊规则,不过这种情况比较少见。
备注:内容来源于stack exchange,提问作者rootone




