2011-10-02

How to fix the adb no permissions error on Ubuntu Lucid

This blog post explains how to fix the no permissions error the Android Debugger displays when running the adb devices command Linux. The solutions presented here have been tested and found working on Ubuntu Lucid, but they should also work on other Ubuntu and Linux versions as well.

This official help center page has many working and non-working answers to the problem, and many comments. The root cause of the problem is that the current user doesn't have sufficient permissions to access the USB device file created when the phone was connected in USB debug mode.

Killing all running adb server instances with sudo killall adb, disconnecting the phone, reconnecting the phone, and then running sudo adb devices instead (so adb gets run as root) fixes the problem.

Alternatively, it is possible to implement a long-term fix which doesn't require sudo, thus it works with e.g. IntelliJ IDE integration:

  • Create a file named /tmp/android.rules with the following contents (hex vendor numbers were taken from the vendor list page):
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0e79", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0502", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="413c", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0489", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="091e", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="24e3", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="2116", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0482", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="17ef", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="1004", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0409", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="2080", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0955", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="2257", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="10a9", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="1d4d", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0471", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="04da", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="05c6", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="1f53", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="04dd", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0fce", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0930", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="19d2", MODE="0666"
  • Run the following commands (without the leading $):
    $ sudo cp /tmp/android.rules /etc/udev/rules.d/51-android.rules
    $ sudo chmod 644   /etc/udev/rules.d/51-android.rules
    $ sudo chown root. /etc/udev/rules.d/51-android.rules
    $ sudo service udev restart
    $ sudo killall adb
  • Disconnect the USB cable between the phone and the computer.
  • Reconnect the phone.
  • Run adb devices to confirm that now it has permission to access the phone.

Please note that it's possible to use , USER="$LOGINNAME" instead of , MODE="0666" in the .rules file, substituting $LOGINNAME for your login name, i.e. what id -nu prints.

49 comments:

  1. Thank you man, you rock :) I´ve read and tried 50 manuals like yours but each one was missing the most important step... : to unplug and plug in again the phone :D :) thx again

    ReplyDelete
  2. #pt-br
    Muito bom. Funcionou perfeitamente por aqui. Obrigado pela dica.
    #en
    Very good. It worked perfectly here. Thanks for the tip.

    ReplyDelete
  3. Thank you so much! Now to move forward...

    ReplyDelete
  4. Thanks very much! If you want, you can add Archos devices to the list (ID: 0e79)

    ReplyDelete
  5. This works too:
    assuming adb is in your path etc:

    sudo pkill -f adb (killall adb remaining)
    sudo env PATH=$PATH adb devices

    hav fun

    ReplyDelete
  6. @georges: Your commands constitute a good short-term solution, but after a few hours adb stops working, and your commands have to be run again (... and again). The solution in my bog post solves the problem for good.

    ReplyDelete
  7. @georges: after hours searching and nothing working, (previously I had no problems in ubuntu, but moved to Linux Mint Debian Edition) your solution worked for me. Thanks georges and pts!

    ReplyDelete
  8. THIS WORKED PERFECTLY! Thank you. I wish I could point all the questions here

    ReplyDelete
  9. Thank you so much.
    It worked for my LG P970 perfectly !!!

    ReplyDelete
  10. Thanks!!

    I was trying to fastboot (command not found) and with this min changes, you saved me.

    ReplyDelete
  11. Thank a ton... it works like a butter..

    ReplyDelete
  12. Thank you, it worked like a charm. :)

    ReplyDelete
  13. I already have the file /etc/udev/rules.d/51-android.rules but I'm smart enough not to overwrite it. For those less knowledgeable, perhaps you might change your instructions to: cat tmpfile >> udevfile

    Big thanks for the info.

    ReplyDelete
  14. I am having problems and need help please

    after typing in the command:
    chown. root.....

    i get:usage chown [:GROUP] [FILE2]....

    then i typed command:

    service udev restart

    and i get:

    unknown command udev
    usage: service [-h|-?]
    service list
    service check SERVICE
    service call SERVICE CODE [i32 INT |s16 STR]...
    options:
    i32 write the integer INT into the send parcel s16 write the utf-16 string STR into the send parcel

    then i tried killall adb but i get: adb no process killed

    any suggestions please?

    ReplyDelete
  15. Thank you! Working like a Charm on Ubuntu 14.04 and my Zopo Mobile

    ReplyDelete
  16. You are awesome! This old post helped me today! For anyone lost, Lava Iris 300 use HTC's vendor id: 0bb4

    ReplyDelete
  17. Thank you very much... its saves my day :) ..

    ReplyDelete
  18. Many thanks man! Finally a good fix! I was having a problem with ZTE V790 and Ubuntu 14.04, but now is all set :)

    ReplyDelete
  19. Excelente.. me quieto el sombrero... Gracias

    ReplyDelete
  20. You ROCK ! it works!!!!!!!!!!

    ReplyDelete
  21. where is /tmp/android.rules ??

    under what folder /tmp is? so i can create that android.rules file?

    ReplyDelete
  22. @Medio81: Create a file named android.rules anywhere, with any text editor, and then copy it to /tmp: sudo cp android.rules /tmp/android.rules

    ReplyDelete