Ubuntu虚拟机中adb devices无法识别设备求助
我来帮你一步步排查这个虚拟机adb识别设备的问题,毕竟跨系统+虚拟机的场景,确实容易踩一些USB转发和权限的坑😉
1. 先确认虚拟机有没有抓到你的USB设备
这是最基础的一步——如果虚拟机都没拿到设备控制权,adb再怎么折腾也没用:
- 打开Ubuntu虚拟机的顶部菜单栏,找「设备」→「USB」,看看列表里有没有你的安卓设备型号。如果有,确保它是勾选状态;如果没有,先在Windows里断开设备,重新插上后再回到虚拟机的USB菜单里选择捕获设备。
- 要是连USB菜单里都看不到设备,去虚拟机的「设置」→「USB」选项,确认已经启用了USB 3.0(xHCI)控制器——很多新安卓设备需要这个协议才能被虚拟机识别。
2. 检查Ubuntu的adb权限问题
就算设备被捕获了,Ubuntu普通用户可能没权限访问USB设备,导致adb识别失败:
- 先试试用
sudo adb devices运行命令,如果能正常列出设备,那百分百是权限问题。 - 解决权限问题的步骤:
- 先通过
lsusb命令找到你设备的Vendor ID(比如小米设备是0x2717,格式是0xXXXX)。 - 创建udev规则文件:
sudo nano /etc/udev/rules.d/51-android.rules - 写入以下内容(把
你的Vendor ID替换成刚才查到的内容):SUBSYSTEM=="usb", ATTR{idVendor}=="你的Vendor ID", MODE="0666", GROUP="plugdev" - 保存退出后,刷新udev规则:
sudo udevadm control --reload-rules && sudo udevadm trigger - 把当前用户加入plugdev组:
sudo usermod -aG plugdev $USER - 重启Ubuntu或者重新登录用户,再试
adb devices
- 先通过
3. 关于你用的autossh命令(连接被拒的原因)
你尝试的端口转发命令是想复用Windows主机的adb连接,但出现connection refused大概率是这几个问题:
- Windows主机的adb服务器没启动?先在Windows的命令行里跑
adb start-server,确保服务器在运行。 - Windows防火墙挡住了5037端口?可以临时关闭防火墙试试,或者在Windows防火墙里添加一条允许5037端口入站的规则。
- 虚拟机的网络模式不对?
10.0.2.2是NAT模式下主机的默认IP,如果你的虚拟机用的是桥接模式,得换成Windows主机的实际局域网IP(比如192.168.1.XXX)。
4. 其他快速排查小技巧
- 用
lsusb命令在Ubuntu里查设备:如果能看到你的安卓设备,说明硬件层面已识别,问题在adb或权限;如果看不到,回到第一步解决USB捕获问题。 - 重启adb服务器的时候,尽量用
sudo adb kill-server && sudo adb start-server——普通用户启动adb可能因为权限问题失败。 - 检查Ubuntu和Windows的adb版本是否一致:版本不兼容也会导致识别异常,尽量用同一个版本的Android SDK Platform Tools。
内容的提问来源于stack exchange,提问作者dvir




