Overview
When connecting a Quectel Pi device to a Linux host using ADB, users may encounter the following error when running adb devices or adb shell:
error: insufficient permissions for device:
user in plugdev group; are your udev rules wrong?
This issue occurs when the Linux host does not have the appropriate udev rules configured to grant non-root access to the Android Debug Bridge (ADB) interface.
This guide explains how to configure the required udev rules and restore normal ADB functionality.
Symptoms
One or more of the following symptoms may be observed:
adb devices
Returns:
error: insufficient permissions for device:
user in plugdev group; are your udev rules wrong?
or
List of devices attached
???????????? no permissions
As a result:
adb shell
cannot be executed successfully.
Solution 1: Install the Official Generic ADB udev Rules
Most Linux distributions provide a package containing generic Android udev rules.
Install the package using:
sudo apt update
sudo apt install -y android-sdk-platform-tools-common
After installation, reload the rules and restart ADB:
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo pkill -f adb || true
Disconnect and reconnect the USB cable, then start ADB again:
adb start-server
adb devices
If the device is detected correctly, no additional configuration is required.
If the device still appears as “no permissions”, proceed to Solution 2.
Solution 2: Create Custom udev Rules
Step 1: Create the udev Rules File
Create or edit the following file:
sudo nano /etc/udev/rules.d/51-android.rules
Add the following content:
# Allow all Qualcomm USB devices
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev", TAG+="uaccess"
# Allow the Quectel Pi ADB device
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", ATTR{idProduct}=="902d", MODE="0666", GROUP="plugdev", TAG+="uaccess"
# Generic ADB interface rule
SUBSYSTEM=="usb", ENV{ID_USB_INTERFACES}=="*:ff4201:*", MODE="0666", GROUP="plugdev", TAG+="uaccess"
Rule Explanation
| Rule | Purpose |
|---|---|
| Vendor Rule | Allows access to Qualcomm USB devices (VID: 05c6) |
| Product Rule | Allows access to the specific Quectel Pi ADB interface (PID: 902d) |
| Generic ADB Rule | Matches any device exposing an ADB interface |
For maximum compatibility, it is recommended to keep all three rules.
Step 2: Apply the Rules
Set the correct file permissions:
sudo chmod 644 /etc/udev/rules.d/51-android.rules
Reload udev:
sudo udevadm control --reload-rules
sudo udevadm trigger
Step 3: Reconnect the Device
Disconnect and reconnect the USB cable.
Restart the ADB service:
sudo pkill -f adb || true
adb start-server
adb devices -l
Important: Run ADB as a normal user. Avoid starting ADB using
sudo, as this may cause permission conflicts.
Verifying the Fix
Case 1: Device Shows “unauthorized”
If the output changes from:
no permissions
to:
unauthorized
the Linux permission issue has been resolved successfully.
Example:
List of devices attached
xxxxxxxxxxxx unauthorized
At this stage, check the Quectel Pi display and approve the USB debugging prompt:
Allow USB debugging?
Select:
Allow
to authorize the host PC.
Case 2: Device Shows “device”
Once USB debugging is authorized, the device should appear as:
List of devices attached
xxxxxxxxxxxx device
ADB communication is now fully operational.
You can access the device using:
adb shell
Additional Verification
To confirm that the Linux host detects the Quectel Pi correctly:
lsusb
Example output:
Bus 001 Device 005: ID 05c6:902d Qualcomm Device
You can also verify that the udev rules were loaded successfully:
udevadm test /sys/class/usb_device/<device>
Conclusion
The “insufficient permissions” error is typically caused by missing or incomplete udev rules on the Linux host rather than an issue with the Quectel Pi itself.
Installing the generic Android udev package resolves the issue in most cases. If the problem persists, adding the custom Qualcomm and ADB udev rules described above will allow Linux users to access the device without requiring root privileges.
After the rules are applied and USB debugging is authorized, normal ADB operations such as:
adb devices
adb shell
adb push
adb pull
can be used successfully.