在Ubuntu虚拟机里用adb连接设备,核心就是两件事:把USB设备直通给虚拟机,再让adb拥有访问权限。 只要USB能进虚拟机,udev规则配好,adb devices基本就能看到设备;如果做不到,无线调试和网络转发可以兜底。
先理解Ubuntu虚拟机里adb连接的底层逻辑
虚拟机USB直通是第一步
Ubuntu跑在VMware、VirtualBox或KVM里时,物理USB口默认归宿主机管理,虚拟机想识别Android手机、平板或开发板,必须把对应USB设备从宿主机“释放”给虚拟机,据USB-IF公开规范,每个USB设备都有VID和PID,Linux靠这两个编号匹配驱动和权限,adb能不能看到设备,先取决于lsusb在虚拟机里能不能列出它。
adb工具本身不复杂
据Android开发者官网,adb是Android SDK Platform-Tools里的命令行工具,负责与设备通信,Ubuntu下可装系统包,也可下载官方压缩包,推荐用官方最新版,系统仓库版本有时偏旧。
- 安装系统包:
sudo apt update && sudo apt install android-tools-adb android-tools-fastboot - 下载官方包:
wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip - 解压并加入PATH:
unzip platform-tools-latest-linux.zip -d ~/,然后export PATH=$PATH:~/platform-tools - 验证:
adb version
如果adb version能输出版本号,说明工具就绪,接下来才是权限和连接。
Ubuntu虚拟机adb连接设备没反应怎么办?按这四步排查
第一步:检查虚拟机USB控制器和直通状态
VMware Workstation里,打开虚拟机设置,确认USB控制器存在,兼容性选USB 3.1或3.0,插入设备后,在VMware菜单“虚拟机-可移动设备”里找到手机名称,点“连接”,VirtualBox则要在设置里启用USB控制器,并添加USB筛选器,建议安装Extension Pack。
在Ubuntu虚拟机内执行:
lsusbdmesg | tail -n 30
如果lsusb没有Android设备,问题在直通,不在adb,VMware虚拟机USB直通adb识别不到设备时,先看宿主机是否弹出了“连接到虚拟机”的提示,没有提示就换USB线或USB口。

第二步:配置udev规则,解决no permissions
Linux对USB访问有权限控制,普通用户直接跑adb devices时,常见输出是no permissions或列表为空,解决方法是给Android厂商的VID加udev规则。
先查VID:
lsusb- 输出示例:
Bus 001 Device 006: ID 18d1:4ee7 Google Inc.
其中18d1就是VID,创建规则文件:
sudo nano /etc/udev/rules.d/51-android.rules- 写入:
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
如果手头有多个品牌设备,可以继续加行,小米、华为、三星、OPPO、vivo等VID不同,按lsusb结果替换即可,保存后执行:
sudo chmod a+r /etc/udev/rules.d/51-android.rulessudo udevadm control --reload-rulessudo udevadm triggersudo usermod -aG plugdev $USER
执行完usermod后需要注销并重新登录,否则组权限不生效,行业共识认为,udev规则是Linux下Android设备访问的关键,跳过这一步,后面adb命令再对也白搭。
第三步:启动adb并授权设备
设备端打开“开发者选项”,开启“USB调试”,用数据线连接虚拟机后,执行:
adb kill-serveradb start-serveradb devices
正常会显示:
List of devices attachedABCDEF123456 device
如果显示unauthorized,看设备屏幕是否弹出“允许USB调试”,勾选“始终允许”并确定,如果误点了拒绝,执行:
adb kill-server- 删除
~/.android/adbkey和~/.android/adbkey.pub adb start-server- 重新插拔设备
如果显示offline,可试adb reconnect,或重启设备再连。

第四步:无线调试作为备用方案
Android 11及以上支持无线调试,路径:设置-开发者选项-无线调试-使用配对码配对设备,Ubuntu虚拟机与设备在同一局域网时,执行:
adb pair 设备IP:配对端口- 输入配对码
adb connect 设备IP:调试端口adb devices
老旧设备可先用USB执行adb tcpip 5555,再adb connect 设备IP:5555,北京远程调试Android设备 adb 配置时,无线调试尤其省事,不用把设备寄来寄去,也不依赖虚拟机USB直通,Ubuntu虚拟机零成本搭建adb调试环境,指的就是这套组合:官方工具免费,无线调试也不需要额外付费。
Windows和Ubuntu虚拟机adb连接设备有什么区别?对比USB策略与网络调试
| 对比项 | Windows宿主机/虚拟机 | Ubuntu虚拟机 |
|---|---|---|
| USB驱动 | 通常自动装,也可能需要厂商驱动 | 依赖内核和udev规则 |
| 权限模型 | 用户态较宽松 | 需plugdev组和规则文件 |
| 设备识别 | 设备管理器可看 | lsusb、dmesg可查 |
| 无线调试 | 支持 | 支持 |
| 成本 | 系统授权可能收费 | 零成本,工具免费 |
业内专家指出,Windows下adb连不上的原因多在驱动签名和端口占用;Ubuntu下则集中在USB直通和权限,两者无线调试命令一致,差异主要在USB层。
VMware与VirtualBox场景下的常见坑
VMware虚拟机USB直通adb识别不到设备
- 虚拟机设置里USB控制器未启用。
- 宿主机VMware USB Arbitration Service未运行。
- 设备被宿主机其他程序占用,比如手机助手、iTunes。
- USB线仅充电,不带数据传输。
处理方式:关闭宿主机占用程序,重新插拔,在VMware右下角USB图标里手动连接,必要时把USB兼容性从2.0改成3.1。

VirtualBox Ubuntu adb设备列表为空
- 未安装VirtualBox Extension Pack。
- 未添加USB筛选器。
- 当前用户不在
vboxusers组:sudo usermod -aG vboxusers $USER,重新登录。 - 虚拟机运行中才插入设备,筛选器未生效。
筛选器里填VID和PID最稳,比如18d1和4ee7,添加后重启虚拟机,再lsusb确认。
Ubuntu虚拟机adb连接设备的完整操作清单
- 虚拟机设置启用USB 3.0或3.1控制器。
- 插入设备,选择连接到虚拟机。
lsusb确认能看到Android设备。- 安装platform-tools并加入PATH。
- 写
/etc/udev/rules.d/51-android.rules,加入VID。 - 重载udev规则,把用户加入plugdev组。
- 设备开启USB调试,弹窗授权。
adb kill-server && adb start-server && adb devices。- 若USB不通,改用无线调试:
adb pair后adb connect。 - 若网络跨网段,检查桥接模式、防火墙和端口。
额外提醒:adb devices前不要同时开多个adb版本。which adb确认路径,避免系统包和platform-tools冲突,设备授权文件一般位于~/.android/,权限异常时可清理后重来。
Q&A:Ubuntu虚拟机如何配置并使用adb连接设备?
Ubuntu虚拟机adb连接设备没反应,最先查什么?
先查lsusb,虚拟机里看不到设备,就查USB直通;看得到但adb devices为空,就查udev规则、USB调试开关和授权弹窗。
为什么Ubuntu虚拟机里adb devices显示no permissions?
多数是udev规则缺失或用户不在plugdev组,按设备VID写规则,执行udevadm重载,注销重登后再试。
无线调试能否替代USB直通?
可以,Android 11及以上原生支持无线调试,同一局域网内配对连接即可,USB直通适合刷机、fastboot和需要稳定大带宽的场景,无线调试适合日常安装应用、抓日志和远程调试。