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

相关推荐
Jay Chou why did3 小时前
程序启动地址0x80000000
linux
落笔映浮华丶3 小时前
c程序的翻译过程 linux版
linux·c语言
阮松云3 小时前
code-server 配置maven
java·linux·maven
Pomelo_刘金4 小时前
Linux I/O 方式进化史(内核/性能视角):从“睡死”到“就绪队列”再到“完成队列”
linux
提伯斯6464 小时前
解决 PX4 + ROS px4ctrl 「No odom!」自动起飞失败问题
linux·ros·px4·fastlio·mid360·egoplanner
牛奶咖啡134 小时前
shell脚本编程(八)
linux·shell脚本编程·while循环语句·计数器控制的while循环·标志控制的while循环·until循环·select循环菜单
Q16849645154 小时前
知识点-创建、查看和编辑文本文件
linux·运维
小宇的天下4 小时前
Calibre 3Dstack --每日一个命令days11【dangling_ports】(3-11)
linux·运维·服务器
HIT_Weston5 小时前
97、【Ubuntu】【Hugo】搭建私人博客:搜索功能(二)
linux·运维·ubuntu
chen_mangoo5 小时前
HDMI简介
android·linux·驱动开发·单片机·嵌入式硬件