46

I'm using Ubuntu 12.10 and I have installed Android SDK, set it's path in my user .bashrc and it works.

The problem is that my phone requires adb to be ran by root for permissions, but running adb with sudo I get the following error:

sudo: adb: command not found

I tried to simply use sudo -E adb start-server, but it doesn't work. Tried to add the export path line to /root/.bashrc and (after realizing it didn't help) to /etc/bash.bashrc.

I remember I could set it on my Arch Linux, but I guess my problem now is connected to Ubuntu root account not behaving like I expect it.


What I don't understand is the following:

These don't work:

martin@alyx:~$ sudo adb devices
sudo: adb: command not found

This does (typing the full path):

martin@alyx:~$ sudo /opt/android-sdk-linux/platform-tools/adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
CM7-Blade   device

This doesn't work (using -E with sudo):

martin@alyx:~$ sudo -E adb devices
sudo: adb: command not found

This works (as root):

martin@alyx:~$ sudo su
root@alyx:/home/martin# adb devices
List of devices attached 
CM7-Blade   device

I'm totally confused now and I'd appreciate some clarifying on how to set a path for sudo or how else I could solve my problem.

(And please, don't say adb shouldn't be ran as root.)

Thanks in advance!

Edit: By requiring root permissions I mean that I need them because otherwise I get:

$ adb devices 
List of devices attached 
????????????    no permissions

which doesn't occur as superuser. Sorry if it was misunderstanding.

2
  • I've noticed with both Windows and Ubuntu that Android devices often do not appear if you have them plugged into a USB 3 port, plugging them into a non-USB3 port alleviates the issue. Apr 30, 2014 at 15:17
  • from the docs: source.android.com/source/…
    – Paschalis
    Jul 10, 2016 at 8:31

9 Answers 9

50

Please read the following first: How do I set up Android ADB?


Configuring USB access

First, you don't need root permissions to run ADB if you have set the permissions accordingly. The AOSP site provides examples for Configuring USB Access for Pixel/Nexus devices. You can use the following scheme for non-Nexus devices:

SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", ATTR{idProduct}=="xxxx", MODE="0600", OWNER="<username>"

Vendor and product ID can be obtained by using lsusb and searching for your device. (Note: The device actually is a Galaxy Nexus.)

$ lsusb | grep -i samsung
Bus 002 Device 103: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II]

So my /etc/udev/rules.d/51-android.rules udev rule looks like this:

# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="username"

You may want to repeat this for the other phone states like fastboot if needed. To let the changes take effect either reload udev (sudo udevadm control --reload) or reboot (recommended).

Making programs available

Instead of modifying the path variable I would suggest adding a symbolic link to the executable either in ~/bin/ (user only) or in /usr/local/bin/ (system wide).

mkdir ~/bin/
ln -s /opt/android-sdk-linux/platform-tools/adb ~/bin/
9
  • 1
    I tried adding the udev rules for my phone, but it didn't help so I thought maybe I wasn't clear about my problem. Please, if you have the time, see the end of my question. Nov 7, 2012 at 2:31
  • Have you added the correct IDs? modaco.com/topic/329317-guide-ubuntu-and-the-blade Have rebooted your machine afterwards? adb devices works for me without root privileges.
    – LiveWireBT
    Nov 7, 2012 at 3:36
  • 4
    Yay, it works! I added the udev rules to /etc/udev/rules.d/51-android-rules and apparently it was a mistake. After using /lib/udev/rules.d/11-android.rules, everything was fine! I don't need root persmissions! Thanks a lot! Nov 7, 2012 at 10:37
  • Had the same ???????????? no permissions situation and your answer solved it, thanks.
    – Panthro
    Feb 24, 2015 at 12:01
  • for some reason it did not work here, I had to start adb server with sudo; any idea where could I look to see why it did not work? May 6, 2015 at 0:26
28

I bumped into the same issue with a tablet from China (some weird manufacturer).

In addition to /etc/udev/rules.d/51-android.rules file, I needed to change ~/.android/adb_usb.ini as well.

Run below on terminal;

sudo gedit ~/.android/adb_usb.ini

and your adb_usb.ini file should look like:

# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
# ie 0x2207
0x<!!!Your Vendor ID here!!!>

Disconnected and reconnected device and also needed to run below commands on terminal;

adb kill-server

and afterwards

adb start-server

And the device was detected.

5
  • I tried with your tip too but nothing changed, any idea where I could look to see why it did not work here? May 6, 2015 at 0:27
  • Nice one. That worked for me. Along with that, I had to update my adb. Jun 1, 2015 at 9:19
  • This solution does not work on Ubuntu 14.04. The list of devices still comes out empty. Mar 20, 2016 at 17:16
  • 1
    Thanks a lot, Uygar, finally I've found the solution that works for me. May 3, 2016 at 19:46
  • That's what I was missing. In fact, the 0x2207 in your example is the same vendor ID that my device uses.
    – ssokolow
    May 9, 2016 at 5:29
2

In my case instead of MTP mode some Smartphones needed just to be set in PTP mode unlike most devices who required MTP mode to be detected by my Android Studio (v1.5.1).

So be sure to first try both MTP and PTP modes before without need spending time to the more complex ADP Configuration of Unix and maybe harming them.

In newer devices you can choose it directly at Dev options, while in older it is in the USB Connected Options on the Status Bar.

Yet also for me the newest Sony Xperia Devices from Z5 and above, will not work no matter the USB mode. Maybe my Android Studio is old or I need to dig also with the Unix ADP Configurations.

1

Follow these steps:

  1. Set android vars

    Initially go to your home and press Ctrl + H it will show you hidden files now look for .bashrc file, open it with any text editor then place the lines below at the end of file:

    export ANDROID_HOME=/myPathSdk/android-sdk-linux
    export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
    
  2. Reboot

  3. Using device to debug

    Listen for connection:

    adb -a
    

    Connect your Android device and authorise it:

    cordova run android --device
    
0

Configuring USB Access

The recommended approach is to create a file at /etc/udev/rules.d/51-android.rules.

Please type in Terminal:

wget -S -O - http://source.android.com/source/51-android.txt | sed "s/<username>/$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules

Those new rules take effect the next time a device is plugged in. It might therefore be necessary to unplug the device and plug it back into the computer.

0

Although the accepted answer helped me to get things done, I still was confused about:

martin@alyx:~$ sudo adb devices
sudo: adb: command not found

and especially

martin@alyx:~$ sudo -E adb devices
sudo: adb: command not found

since according to sudo --help:

-E, --preserve-env          preserve user environment when running command

It turns out, that on many linux distributions (that includes Debian and Ubuntu) secure_path and env_reset options are turned on by default, which reset your PATH variable and set it to secure_path. You can change it in the /etc/sudoers file using visudo.

Alternatively you can run:

sudo env PATH=$PATH adb devices
0

I know this seems voodoo but buy a new high quality USB data cable. Many cables are only designed for charging. I'm around with this issue for ages following all the suggestions and so on, with constant lost connection, and a good high quality USB data cable made the difference.

0

I personally faced the problem where my device with a USB C port was showing up in lsusb but not in adb devices.

I tried all solutions given like adb kill-server, configuring /etc/udev/rules.d/51-android.rules file, ~/.android/adb_usb.ini file, setting the adb rules https://github.com/M0Rf30/android-udev-rules and restarting but nothing helped.

What finally worked was connecting the device to a USB2.0 port. I had a new desktop so most of the ports were USB3.0.

-1

Try this command: sudo tools/android update sdk --no-ui

SDK README:

Welcome to the Android SDK! The Android SDK archive initially contains only the basic SDK tools. It does not contain an Android platform or any third-party libraries. In fact, it doesn't even have all the tools you need to develop an application. In order to start developing applications, you must install the Platform-tools and at least one version of the Android platform, using the SDK Manager. Platform-tools contains build tools that are periodically updated to support new features in the Android platform (which is why they are separate from basic SDK tools), including adb, dexdump, and others. To install Platform-tools, Android platforms and other add-ons, you must have an Internet connection, so if you plan to use the SDK while offline, please make sure to download the necessary components while online. To start the SDK Manager, please execute the program "android". From the command-line you can also directly trigger an update by executing: tools/android update sdk --no-ui

1
  • I'm not sure that this addresses the original question...
    – landroni
    Oct 26, 2014 at 17:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.