adb нет разрешений на Ubuntu 17.04


48

Когда я пытаюсь:

$ adb devices

я получаю результат:

List of devices attached 
????????????    no permissions

в чем проблема?

попробовал на машине с Ubuntu 16.04 и он работал отлично. попробовал устройство 7.1.1, и оно также работало отлично.


Попробуй sudo adb devices. Если это работает отлично, но по памяти, мне не нужно было иметь права root для проверки подключенных устройств.
shmink

1
он не будет работать с sudo, но с правами суперпользователя будет. проблема в том, что android studio только преобразует adb из сеанса без полномочий root, и при запуске его с jksudo он не распознает мои файлы.
Надав Ташер

Я нашел то же самое с Android Studio и вообще все, что сделано Jetbrains. Когда вы установили Android Studio, вы сделали это как root?
shmink

устанавливается как root в / usr / local / и chmoded в 777 -R, запускается не как root, поэтому он распознает настройки и sdk.
Надав Ташер

Как насчет того, чтобы запустить его как root и просто изменить настройки и SDK соответственно.
shmink

Ответы:


64

Попробуйте перезапустить сервер Adb.

sudo adb kill-server

а потом

sudo adb start-server

затем подключите ваше устройство включите отладку и введите

adb devices

2
Это работает .. вроде. После того, как я это сделаю, при запуске adb devicesтеперь отображается устройство (и я получаю диалоговое окно с отпечатками пальцев). Тем не менее, он все еще не работает с Android Studio. Кроме того, когда я запускаю android studio, а затем запускаю adb devicesиз консоли, я получаю «сервер adb устарел» и сервер adb перезагружается. После этого я снова попадаю в ситуацию «без прав».
тень

Это не работает. На устройствах adb ничего не отображается, и гарнитура больше не запрашивает разрешение.
Tyguy7

63

Была такая же проблема. Обеспечение того, что режим USB устройства НЕ заряжается, только решило это.


5
То же самое, я изменил правила Udev безрезультатно, изменил USB на обмен файлами и presto. Устройство не требовало правил udev или определенных режимов USB в предыдущей версии ubuntu.
Fco P.

3
Это должен быть правильный ответ (не перезапуск сервера adb)
RumburaK

1
Правильный ответ для меня.
Альваро Гутьеррес Перес

1
не должен быть правильный ответ, но работал.
Узумаки Д. Ичиго,

1
Да, это правильный ответ.

39

Очень вероятно, что udev неправильно добавляет ваше устройство. У меня тоже была эта проблема и я нашел относительно простое решение.

Найди свое устройство в lsusb

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 8087:0a2b Intel Corp. 
Bus 001 Device 002: ID 05c8:03a2 Cheng Uei Precision Industry Co., Ltd (Foxlink) 
Bus 001 Device 006: ID 18d1:4ee7 Google Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Интересная точка в этом случае:

Bus 001 Device 006: ID 18d1:4ee7 Google Inc.

Проверьте соответствующий файл устройства

$ ls -l /dev/bus/usb/001/006

Скорее всего, вы увидите что-то вроде

crw-rw-r-- 1 root root 189, 5 Sep  8 21:47 /dev/bus/usb/001/006

Это означает, что файл устройства будет принадлежать пользователю root и root группы, поэтому adb может получить к нему доступ как root, но не как ваш обычный пользователь.

Эту проблему можно решить, создав новое правило udev, которое я использовал, /etc/udev/rules.d/51-android.rulesчтобы добавить устройство в группу plugdev, в которой adb уже предполагает, что вы являетесь участником (вы должны проверить, используя id)

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee7", MODE="0660", 
GROUP="plugdev", SYMLINK+="android%n"

** Не забудьте заменить ATTR {idProduct} == "4ee7" на свой собственный идентификатор продукта, который вы узнали на первом этапе. ** (Если вашим поставщиком не является Google Inc., также замените идентификатор поставщика на тот, который стоит перед двоеточием в lsusb).

Теперь просто отключите ваше устройство и подключите его снова (udev должен автоматически ответить на новый файл) и tadaa:

$ adb devices
List of devices attached 
YC873P0G    device

Источник: Добавление правил udev для отладки USB-устройств Android - Янош Герик


1
Этот ответ решил мою проблему. Отлично, спасибо.
alexmeia

1
Спасибо @Paul Это помогло мне. Хорошо объяснил причину. Я думаю, что перезапуск службы Udev также требуется.
Гаган

это, безусловно, правильное решение, если вы не хотите использовать sudo для вещей, для которых вам не нужно использовать sudo
aholt

Это должен быть принятый ответ, так как это правильный ответ. Ответ с самым высоким рейтингом - это просто обходной путь.
Джоэл Кросс

Это решило это для меня. Работало вчера без правил, но потом после установки обновлений на ubuntu перестало работать и мне пришлось это делать.
Simernes

2

Чтобы расширить ответ Сумит Дешмукх, его подход в целом работает - если вы хотите использовать adbкоманду только из консоли.

Однако Android Studio, по-видимому, запускает собственный сервер adb, убивая наш. Это означает, что после того, как мы убили / запустили сервер с помощью sudo, Studio перезапустит его, что приведет к ситуации запуска - никаких разрешений.

Решение состоит в том, чтобы сначала запустить Studio, а затем выполнить запуск / остановку сервера. После этого мне удалось заставить Nexus 5X отображаться в качестве действительной цели запуска в Studio.

Это не лучшая ситуация (необходимость запускать команды каждый раз при запуске Studio), но она делает свое дело быстро и грязно. Если я найду более постоянное решение, я обновлю этот ответ.


Большое спасибо, хотя это была ошибка, исправленная обновлением системы (на телефоне) и обновлением студии.
Надав Ташер

2

Смена режима USB с телефона сделала свое дело для меня. (Я установил для передачи файлов .)


2

Пожалуйста, НЕ следуйте решениям, предлагающим использоватьsudo ( sudo adb start-server)! Это запустить ADB как root (администратор), и он не должен работать так !!! Это плохой обходной путь !

Все, что работает с правами root, может делать что угодно в вашей системе, если он создает или изменяет файл, может изменить свое разрешение, чтобы оно использовалось только пользователем root. Опять не надо!

Что нужно сделать это настроить вашу систему , чтобы пользователь имеет разрешения, проверить это руководство я написал о том , как сделать это правильно.


2

Это не сработало для меня после того, как я добавил себя в plugdevгруппу и перезагрузил компьютер, чтобы убедиться, что изменения вступают в силу во всех моих сеансах оболочки. Затем я обнаружил, что в нем нет 51-android.rulesфайла, /etc/udev/rules.dи мне пришлось сделать следующее, чтобы решить проблему:

# Here the vendor ID is of Google
$ echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0660", GROUP="plugdev"' | sudo tee —append /etc/udev/rules.d/51-android.rules
$ sudo chmod a+r /etc/udev/rules.d/51-android.rules
$ sudo udevadm control --reload-rules
$ sudo service udev restart

Мне также пришлось отключить и снова подключить устройство Android.


Это не работает для меня тоже ...
Tyguy7

1

Вам необходимо предоставить разрешение на ваше устройство Android. Перейдите в Настройки> Параметры разработчика. Попробуйте выключить и снова включить Usb Debugging. Удалите кабель и подключите его снова. Также попробуйте удалить все сохраненные авторизации из опций разработчика. Теперь он должен запросить разрешение на отладку с помощью подсказки на вашем телефоне. Принять это.


не работает, я уже пробовал, если это имеет значение, я использую Android 7.1.2, и на другом устройстве, на котором работает 7.1.1, он работал.
Надав Ташер

Пробовал удалять все авторизации хоста? Перезагрузился после этого?
Джоэл Г Мэтью

не перезагружался Я попробую это и скажу, сработало ли это.
Надав Ташер

Если это сработало, вы можете принять ответ.
Джоэл Мэтью

Позднее сегодня
Надав Ташер

1

M0Rf30/android-udev-rules Сообщество GitHub поддерживает правила udev

https://github.com/M0Rf30/android-udev-rules/blob/master/51-android.rules

Это самый полный список правил udev, который я когда-либо видел, даже больше, чем рекомендуется sudo apt-get install android-tools-adb в официальной документации , попробуйте.


0

Я понятия не имею, почему это работает, но это было единственное решение, которое сработало для меня

Найдите, где работает adb (если вы похожи на меня, у вас установлено несколько версий). Имейте в виду, что такие инструменты, как реагируют на нативную, могут решить использовать другие случайные версии, чтобы сделать вашу жизнь сложнее. Для меня это ~/Android/Sdk/platform-tools/adb. Итак, я бегу:

sudo chown root:YOUR_USERNAME ~/Android/Sdk/platform-tools/adb
sudo chmod 4550 ~/Android/Sdk/platform-tools/adb

Инструменты Android очень раздражают.


0

Перейдите в Настройки >> Обслуживание >> Хранение. Затем проверьте верхнее левое меню и нажмите на USB-подключение к компьютеру, затем измените на медиа-устройство (MTP).


0

Убедитесь, что у вас есть правила udev, проверьте /etc/udev/rules.d

Вы можете найти соответствующие правила здесь: https://raw.githubusercontent.com/M0Rf30/android-udev-rules/master/51-android.rules

Просто поместите их /etc/udev/rules.d/, затем:

sudo udevadm control --reload
sudo udevadm trigger

Теперь убедитесь, что сервер adb не запущен:

sudo adb kill-server

Добавьте своего пользователя в adbusers:

sudo usermod -a -G adbusers $USER

Теперь используйте su $USER( ссылку ), чтобы ваш пользователь действительно принадлежал adbusers(проверьте с помощью groups)

А затем просто запустите сервер ADB снова:

adb start-server

Если ваше устройство не отображается в adb devices, переподключите его.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.