adb devices command not working

126,927

Solution 1

One thing I didn't try was editing /etc/udev/rules.d/70-android.rules. Is that likely to be the issue?

Any particular reason why you didn't do that? To answer the question - YES! The udev rules are what informs Ubuntu what your device is and allows user-space tools to therefore access it.

You will not be able to use adb without correctly following the instructions.

With that in mind however, you don't say what version of Ubuntu you're using but I had issues with 10.10 - let me know if you need me to post the contents of my rules file.

Don't worry about running adb via sudo, you don't need it. The MODE="0666" from the udev rule allows you to access the device as any user.


EDIT:

Don't forget to reload the rules:

sudo udevadm control --reload-rules

EDIT #2:

As @Jesse Glick correctly points out, if adb is already running in daemon mode, you'll also need to restart it for this to work:

sudo adb kill-server

I've used sudo here, since that will guarantee that adb will be killed , and it's the officially supported method to stop the server. It will be automatically restarted the next time adb is used, but this time with the correct environment.

Solution 2

You need to restart the adb server as root. See here.

Solution 3

On my Gentoo/Funtoo linux system I am having similar problems:

I gotting always not the correct device description and insufficient permissions:

# sudo ./adb devices
List of devices attached 
????????????    no permissions
# ./adb usb
error: insufficient permissions for device

For me helps the howto from Google. In my case I needed to add the udev rule:

# cat /etc/udev/rules.d/51-android.rules 
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev" 

and setting up the filesystem rights

# chmod a+r /etc/udev/rules.d/51-android.rules

After replugging my smartphone the access to the phone was successful, it also appears now in Eclipse' Android Device Chooser:

# sudo ./adb devices
List of devices attached 
3XXXXXXXXXXXXXC device
# sudo ./adb usb
restarting in USB mode

You also have to check the membership of your user to the plugdev-group.

Solution 4

Every answer I've read indicates the SUBSYSTEM=="usb". However, my (perhaps ancient) udev needed this to be changed to DRIVER=="usb". At last I can run the adb server as a non-root user... yay.

It can be instructive to look at the output of udevmonitor --env, followed by the output of

udevinfo -a -p <DEVICE_PATH_AS_REPORTED_BY-udevmonitor>

Solution 5

Please note that IDEs like IntelliJ IDEA tend to start their own adb-server.

Even manually killing the server and running an new instance with sudo won't help here until you make your IDE kill the server itself.

Share:
126,927
MountainX
Author by

MountainX

You may be interested in the story of SE moderator Monica Cellio and how she was unfairly treated by the corporate management of this site. More info here. An update is available. Let's hope we can cultivate a more fair environment for content creators and moderators going forward.

Updated on April 24, 2020

Comments

  • MountainX
    MountainX about 4 years

    I'm running Ubuntu 10.10 64 bit. I have ia32-libs installed along with Android Debug Bridge version 1.0.26.

    My problem(s):

    1. adb devices >>> ???????????? no permissions
    2. sudo adb devices >>>> sudo: adb: command not found
    3. adb shell >>> error: insufficient permissions for device

    I guess these are all related. Here's the relevant info.

    $ echo $PATH
    /home/me/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/android-sdk-linux_x86/tools:/opt/android-sdk-linux_x86/platform-tools
    
    $ which adb
    /opt/android-sdk-linux_x86/platform-tools/adb
    
    $ adb devices
    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    List of devices attached 
    ????????????    no permissions
    
    $ sudo adb devices
    sudo: adb: command not found
    
    $ adb shell
    error: insufficient permissions for device
    

    I get the same results with a rooted Moto Droid running CM6.1 and a rooted G-Tab running a CM7-based ROM.

    I have reviewed the following related posts:

    I tried most (not all) of the suggestions and I have not been able to resolve my issue. The things I didn't try seemed inappropriate. I would appreciate a few more tips and I'll keep troubleshooting.

    One thing I didn't try was editing /etc/udev/rules.d/70-android.rules. Is that likely to be the issue? I can't see how that would cause "sudo: adb: command not found". Maybe my problems are not all related. Anyway, at this point I think I need some input from other people because I don't believe I have a path problem or the other common problems discussed in those other posts.

    EDIT: SOLVED thanks to EboMike and RivieraKid. This was actually two different problems:

    1. Item #2 above (sudo: adb: command not found) was solved by making a symlink as follows:

      $ sudo ln -s /opt/android-sdk-linux_x86/platform-tools/adb /usr/local/sbin/adb
      

      That allowed me to then do as EboMike suggested and use this solution. Doing that was required for my Moto Droid. (Running adb as sudo was not required for my Viewsonic G-Tablet, however.)

    2. My other two items were resolved by implementing the udev rule as RivieraKid suggested (from this link).

  • MountainX
    MountainX about 13 years
    didn't work. Details: me@desktop:/opt/android-sdk-linux_x86/platform-tools$ sudo adb kill-server sudo: adb: command not found me@desktop:/opt/android-sdk-linux_x86/platform-tools$ adb kill-server me@desktop:/opt/android-sdk-linux_x86/platform-tools$ sudo adb start-server sudo: adb: command not found
  • EboMike
    EboMike about 13 years
    adb is not in the path of your superuser. Enter which adb to find out which path it's in, then add that to root's path.
  • MountainX
    MountainX about 13 years
    Hope you can read this. (I don't know how to format comments to include newlines.) adb IS in the path of my root user. I pasted the which adb command in my original post. The path is /opt/android-sdk-linux_x86/platform-tools/adb. $ sudo -s root@desktop:# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin‌​:/usr/X11R6/bin:/opt‌​/android-sdk-linux_x‌​86/tools:/opt/androi‌​d-sdk-linux_x86/plat‌​form-tools
  • MountainX
    MountainX about 13 years
    Here's a strange thing. I get different results from "which adb" depending on whether I run it as root or run it with sudo. Here's output $ sudo which adb $
  • EboMike
    EboMike about 13 years
    Specify the full path then when you run adb as root.
  • MountainX
    MountainX about 13 years
    This resolved item #2 of my original 3. $ sudo ln -s /opt/android-sdk-linux_x86/platform-tools/adb adb me@desktop:/usr/local/sbin$ ls -la lrwxrwxrwx 1 root root 45 2011-04-01 04:26 adb -> /opt/android-sdk-linux_x86/platform-tools/adb
  • MountainX
    MountainX about 13 years
    now I see the problem from my #1 all the time: $ sudo adb devices List of devices attached ???????????? no permissions
  • EboMike
    EboMike about 13 years
    Did restart the adb server as root?
  • MountainX
    MountainX about 13 years
    Thank you for the link. Not sure how I missed the fact that those instructions were official. I thought people were doing that as a work-around. I found the vendor code for my Viewsonic GTablet and added the udev rule and now it works! Thanks.
  • MountainX
    MountainX about 13 years
    for some reason I can't get the Motorola Droid to show up with adb devices. Now I can get the GTab and an emulator to show up, but not the Droid.
  • MountainX
    MountainX about 13 years
    Strange... I could access the GTablet without running adb server as root. But I had to run adb as root to see the Moto Droid.
  • MountainX
    MountainX about 13 years
    See above. Running adb as root caused the Moto Droid to show up.
  • MountainX
    MountainX about 13 years
    $ cat /etc/udev/rules.d/51-android.rules SUBSYSTEM=="usb", SYSFS{idVendor}=="22b8", MODE="0666" SUBSYSTEM=="usb", SYSFS{idVendor}=="0955", MODE="0666"
  • RivieraKid
    RivieraKid about 13 years
    Strange - the instructions should enable all users read/write access to the phone. Glad it's working for you now though.
  • MountainX
    MountainX about 13 years
    Hey EboMike and RivieraKid, I need to pick both your responses as answers. I'm not sure if I can select two answers, however. Thanks for your help!
  • MountainX
    MountainX about 13 years
    Hey EboMike and RivieraKid, I need to pick both your responses as answers. I'm not sure if I can select two answers, however. Thanks for your help!
  • IgorGanapolsky
    IgorGanapolsky about 12 years
    @MountainX: aren't you missing {idProduct}?
  • MountainX
    MountainX about 12 years
    @igor-g - no, that wasn't it. Many of those attributes are optional. You can write the udev rules a lot of different ways. And I gave the exact steps for my solution in the edit to my OP. Thanks.
  • nealmcb
    nealmcb almost 12 years
    Note also the need to unplug/replug the phone after changing all this and restarting udev.....
  • RzR
    RzR about 10 years
  • Jesse Glick
    Jesse Glick about 10 years
    …and you need to restart the adb daemon, if it was running before.
  • tomasb
    tomasb about 10 years
    hi guys can anyone think of some other blocker, using GT-I9305 with rule: SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev", followed all steps here, ensured my user is in plugdev group,restarted adb,udev,reconnected device... but still no permissions in ubuntu 14.04 64bit
  • tomasb
    tomasb about 10 years
    btw i need to use the phone booted to clockworkmod cause its touch screen is not working, another samsung works just fine but it has debugging enabled, now im trying to enable usb debugging outside the broken device with setprop persist.service.adb.enable 1 ... any ideas please?
  • tomasb
    tomasb about 10 years
    even more strange, it worked on windows so i solved it but still i am curious whats happening in linux
  • Gregor
    Gregor about 9 years
    frankly, I never needed special udev rules, always worked automatically so far.. however I needed to start the server as root (for newer SDK versions?), I believe this previously worked as normal user.
  • Ciro Santilli OurBigBook.com
    Ciro Santilli OurBigBook.com over 8 years
    I had to run adb start-server after kill-server or it does not seem to start.
  • Gavin S. Yancey
    Gavin S. Yancey almost 8 years
    Your link (to setup udev) is broken.
  • Matthew Taylor
    Matthew Taylor almost 8 years
    Surely this is a comment?
  • Admin
    Admin almost 8 years
    my bad. I wanted to say that resetting the device and cleaning data has worked for me well.
  • ash
    ash about 7 years
    The instructions link has now changed, here's the new page: developer.android.com/studio/run/device.html
  • ash
    ash about 7 years
    If udevmonitor and udevinfo do not exist on your machine, use udevadm monitor and udevadm info -a -p ... instead.
  • Aethelbald
    Aethelbald about 6 years
    Me too: Linux Mint Serena 18.1 with HTC Sensation. Noob alert: I have been faffing about for 2 days with this so stuff is almost certainly snafu'd