解决 Ubuntu使用 ADB 设备权限问题:no permissions (missing udev rules?)

解决 ADB 设备权限问题:no permissions (missing udev rules?)

问题描述

在 Linux 系统(Ubuntu/Debian 等)中使用 adb devices 命令查看已连接的 Android 设备时,终端输出如下错误信息:

bash 复制代码
List of devices attached
0003001B0BA0020DB   no permissions (missing udev rules? user is in the plugdev group); see [http://developer.android.com/tools/device.html]

这表明设备已被系统识别,但 ADB 没有足够的权限访问设备,导致无法正常进行调试操作。

问题原因

这个问题的核心原因是 Linux 系统的设备权限管理

  1. Android 设备连接电脑后,会被识别为一个 USB 设备
  2. Linux 系统默认对 USB 设备有严格的权限控制
  3. 当前用户缺少访问该 Android 设备的权限,即使已加入 plugdev 组也可能因为缺少具体的 udev 规则而无法访问

解决方案:配置 udev 规则授予权限

前置条件

  • 已安装 ADB 工具(可通过 adb --version 验证)
  • 已将用户加入 plugdev 组(若未加入,执行 sudo usermod -aG plugdev $USER,需重启生效)
  • Android 设备已开启开发者选项和 USB 调试模式

解决步骤(共 5 步)

步骤 1:查看设备的 Vendor ID 和 Product ID

首先需要获取连接设备的 USB 识别信息,执行以下命令:

bash 复制代码
lsusb

终端会输出类似如下的设备列表,找到对应 Android 设备的条目(通常包含 "Android"、"Google"、"Huawei" 等品牌标识):

复制代码
Bus 001 Device 010: ID 18d1:4ee7 Google Inc. Nexus 5

重点记录 ID 后面的两个数值

  • Vendor ID(厂商 ID):18d1(示例值,你的设备可能不同)
  • Product ID(产品 ID):4ee7(示例值,你的设备可能不同)
步骤 2:创建 udev 规则文件

/etc/udev/rules.d/ 目录下创建一个新的规则文件,文件名建议以 51-android.rules 命名(数字前缀确保规则优先加载):

bash 复制代码
sudo touch /etc/udev/rules.d/51-android.rules
步骤 3:编辑 udev 规则文件

使用文本编辑器打开规则文件(以 vim 为例,也可使用 nano):

bash 复制代码
sudo vim /etc/udev/rules.d/51-android.rules

在文件中添加以下内容(请将 Vendor ID 替换为你步骤 1 中获取的实际值):

bash 复制代码
# 允许 plugdev 组用户访问 Android 设备
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee7", MODE="0666", GROUP="plugdev"
  • SUBSYSTEM=="usb":指定规则应用于 USB 设备
  • ATTR{idVendor}=="18d1":匹配你的设备厂商 ID(必须替换为实际值)
  • ATTR{idProduct}=="4ee7":匹配你的设备产品 ID(可选,不写则匹配该厂商所有设备)
  • MODE="0666":授予读写权限(666 表示所有用户可读写)
  • GROUP="plugdev":将设备归属到 plugdev 组

如果需要支持多个设备,可在文件中添加多行规则,每行对应一个设备的 Vendor ID 和 Product ID。

步骤 4:设置规则文件权限并重启 udev 服务

保存文件后,设置规则文件的正确权限(否则 udev 无法识别):

bash 复制代码
sudo chmod a+r /etc/udev/rules.d/51-android.rules

重启 udev 服务使规则生效:

bash 复制代码
sudo udevadm control --reload-rules
sudo udevadm trigger
步骤 5:重启 ADB 服务并验证

最后重启 ADB 服务,重新连接设备并验证:

bash 复制代码
# 杀死当前 ADB 进程
adb kill-server

# 以管理员权限启动 ADB(仅首次需要)
sudo adb start-server

# 查看设备列表
adb devices

如果配置成功,终端会显示设备状态为 device

bash 复制代码
List of devices attached
0003001B0BA0020DB   device

常见问题排查

  1. 规则文件权限错误 :确保执行了 chmod a+r 命令,否则 udev 无法读取规则
  2. 用户未加入 plugdev 组 :执行 groups $USER 查看当前用户组,若没有 plugdev,执行 sudo usermod -aG plugdev $USER 后重启电脑
  3. Vendor ID 填写错误 :重新执行 lsusb 确认设备的 Vendor ID,规则中必须完全匹配(区分大小写)
  4. ADB 服务未重启:修改规则后必须重启 ADB 服务,否则权限不会生效

总结

解决 ADB 设备权限问题的核心是 通过 udev 规则授予用户访问 USB 设备的权限,关键步骤如下:

  1. lsusb 获取设备的 Vendor ID(厂商 ID)
  2. /etc/udev/rules.d/ 下创建规则文件,配置设备权限
  3. 重启 udev 服务和 ADB 服务,验证设备连接状态
  4. 确保用户已加入 plugdev 组,规则文件权限正确

按照以上步骤操作后,即可正常使用 ADB 工具调试 Android 设备,无需每次都使用 sudo 权限运行 ADB 命令。

相关推荐
_kerneler14 小时前
[qemu+kvm]: trap 寄存器脱敏优化方法
linux
猫猫的小茶馆14 小时前
【Python】函数与模块化编程
linux·开发语言·arm开发·驱动开发·python·stm32
代码AC不AC15 小时前
【Linux】线程概念
linux·线程
神奇小梵16 小时前
关于finalshell的使用
linux·服务器·网络
vortex516 小时前
进程管理器大横评:从 PM2 到 Systemd 的选型与实战
linux·shell·进程管理
Yana.nice17 小时前
/etc/rhsm/rhsm.conf配置文件解析
linux
Jurio.17 小时前
Codex cli 分屏并行运行
linux·ai·远程工作·codex
dangdanding17 小时前
防火墙 IP 分片测试套件-fragroute
linux·网络·网络协议·tcp/ip
happymade17 小时前
全网拓扑自动发现与服务器全维度监控的技术实践
linux·运维·服务器·网络·zabbix·路由器·prometheus
小小菜鸟,可笑可笑17 小时前
Ubuntu 系统安装搜狗输入法 & 使用英文标点
ubuntu