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.