解决 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 命令。

相关推荐
_OP_CHEN8 分钟前
【Linux系统编程】(十八)Linux 进程创建与终止进阶:等待机制与程序替换的底层密码
linux·服务器·操作系统·进程·进程等待·进程替换·exec函数族
姚青&11 分钟前
1、Linux 系统与 Shell 环境准备
linux·运维·服务器
Vin0sen11 分钟前
无响应的状态码分析
linux
运维小斌12 分钟前
ubuntu22.04.5配置ip并使用远程工具连接
linux·运维·网络·ubuntu
HIT_Weston19 分钟前
74、【Ubuntu】【Hugo】搭建私人博客:VSCode 插件&配置
linux·vscode·ubuntu
Austindatabases21 分钟前
OceanBase SeekDB SQL优化案例---MySQL在客户端会没有市场的
数据库·sql·mysql·adb·oceanbase
HalvmånEver23 分钟前
Linux:库制作与原理(四)
linux·运维·服务器
晚风吹人醒.27 分钟前
LAMP(Linux+Apache+MySQL+PHP)完整搭建过程
linux·服务器·mysql·centos·php·apache·lamp
文弱书生65629 分钟前
3-electronbot舵机板电路分析
linux·单片机·嵌入式硬件
LaoWaiHang33 分钟前
Linux操作环境的获得
linux