Устройство Android Debug Bridge (adb) - нет разрешений

У меня проблема с подключением HTC Wildfire A3333 в режиме отладки к моей Fedora Linux 17. Adb говорит:

./adb devices
List of devices attached 
????????????    no permissions

мои правила udev (первое правило для Samsung, которое работает нормально, а второе для HTC, которого нет):

SUBSYSTEM=="usb",SYSFS{idVendor}=="04e8",SYMLINK+="android_adb",MODE="0666",GROUP="plugdev" 
SUBSYSTEM=="usb",SYSFS{idVendor}=="0bb4",SYMLINK+="android_adb",MODE="0666",GROUP="plugdev"

Для устройств Samsung все в порядке:

 ./adb devices
List of devices attached 
00198a9422618e  device

Я пытался ответить на все вопросы, приведенные в одинаковой теме, без какой-либо удачи: Использование HTC Wildfire для разработки под Android

20 ответов

Решение

Причина этой проблемы связана с системными разрешениями (спасибо @ IsaacCisneros за это предложение). Каким-то образом HTC Wildfire (а может и другим) нужно что-то большее от системы, чем устройства Samsung. Простое решение состоит в том, чтобы запустить Eclipse от имени пользователя root, но это не очень удобно для не Linux-систем sudo, таких как Fedora.

Я нашел другой способ достижения той же цели, который кажется более удобным для пользователя и является меньшей дырой в безопасности, чем запуск всей IDE с привилегиями суперпользователя. Помните, что это все еще только обходной путь проблемы. Использование корня системы должно быть сведено к минимуму только для административных задач, а "adb" был разработан для работы с обычной учетной записью пользователя без SUID. Несмотря на то, что правильная настройка SUID достаточно безопасна, каждое увеличение разрешения является потенциальной дырой в безопасности системы.

1. Установка владельца двоичного файла adb (владелец - root, группа владельца - user_group):

chown root:user_group adb

2.Настройка разрешений с помощью SUID:

chmod 4550 adb

Это должно привести к чему-то похожему на это (ls -llh):

-r-sr-x---. 1 root user_name 1.2M Jan 8 11:42 adb

После этого вы сможете запускать adb как root, хотя вы будете использовать свою обычную учетную запись. Вы можете запустить Eclipse как обычный пользователь, и ваш HTC должен быть обнаружен правильно.

./adb devices 
List of devices attached 
HT0BPPY15230    device 

Я только что сам столкнулся с этой проблемой под Debian Wheezy. Я перезапустил демон adb с помощью sudo:

sudo ./adb kill-server
sudo ./adb start-server
sudo ./adb devices

Все работает:)

У меня похожая проблема:

$ adb devices
List of devices attached 
4df15d6e02a55f15    device
????????????    no permissions

изучение

Если я бегу lsusbЯ могу видеть, какие устройства я подключил и где:

$ lsusb
...
Bus 002 Device 050: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone ...
Bus 002 Device 049: ID 18d1:4e42 Google Inc. 

Это показывает, что мой Samsung Galaxy S3 и мой Nexus 7 (2012) подключены.

Проверка разрешений на тех:

$ ls -l /dev/bus/usb/002/{049,050}
crw-rw-r--  1 root root    189, 176 Oct 10 10:09 /dev/bus/usb/002/049
crw-rw-r--+ 1 root plugdev 189, 177 Oct 10 10:12 /dev/bus/usb/002/050

Подождите. Какие? Откуда появилась эта группа "plugdev"?

$ cd /lib/udev/rules.d/
$ grep -R "6860.*plugdev" .
./40-libgphoto2-2.rules:ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="6860", \
  ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="proprietary", \
  ENV{ID_MEDIA_PLAYER}="1", MODE="0664", GROUP="plugdev"
./40-libgphoto2-2.rules:ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", \
  ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="proprietary", \
  ENV{ID_MEDIA_PLAYER}="1", MODE="0664", GROUP="plugdev"

(Я завернул эти строки)

Обратите внимание GROUP="plugdev" линий. Также обратите внимание, что это не работает для другого идентификатора устройства:

$ grep -Ri "4e42.*plugdev" .

(ничего не возвращается)

Исправляя это

ХОРОШО. Так в чем же дело?

Добавить правило

Создать файл /etc/udev/rules.d/99-adb.rules содержащий следующую строку:

ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e42", ENV{ID_GPHOTO2}="1",
  ENV{GPHOTO2_DRIVER}="proprietary", ENV{ID_MEDIA_PLAYER}="1",
  MODE="0664", GROUP="plugdev"

Это должна быть одна строка, я обернул ее здесь для удобства чтения

Перезапустите Udev

$ sudo udevadm control --reload-rules
$ sudo service udev restart

это оно

Отключите / подключите ваше устройство.

Попытайся

$ adb devices
List of devices attached 
4df15d6e02a55f15    device
015d2109ce67fa0c    device

Вы, судя по всему, ошибаетесь. Я использовал это, и это сработало:

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"

(ATTR вместо SYSFS)

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

Ответ Стефана работает (с использованием sudo adb kill-server), но он временный. Он должен быть переиздан после каждой перезагрузки.

Для постоянного решения необходимо изменить конфигурацию udev:

Ответ Витранта - правильная идея (скопировано из официальной документации Android). Но это всего лишь шаблон. Если это не работает для вашего устройства, вам необходимо ввести правильный идентификатор устройства для вашего устройства.

lsusb

Bus 001 Device 002: ID 05c6:9025 Qualcomm, Inc.
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
...

Найдите свое устройство Android в списке.

Затем используйте первую половину идентификатора (4 цифры) для idVendor (последняя половина - idProduct, но не обязательно, чтобы adb работал).

sudo vi /etc/udev/rules.d/51-android.rules и добавьте одно правило для каждого уникального idVendor:

SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"

Это так просто. Вам не нужны все остальные поля, указанные в некоторых ответах. Сохраните файл.

Затем перезагрузите компьютер. Изменение является постоянным. (Роджер показывает способ перезапустить udev, если вы не хотите перезагружаться).

Под убунту 12.04, затмение юнона. Я сталкиваюсь с той же проблемой. Это то, что я нашел в блоге Yi Yu

Решение такое же, как и у Леона

sudo -s
adb kill-server
adb start-server
adb devices

... собственный ответ ФП пока неверен, что нет "специальных системных разрешений". - Проблема "без разрешения" сводится к... нет разрешений.

К сожалению, это не легко отладить, потому что adb делает секретным, к какому устройству он пытается получить доступ! В Linux он пытается открыть устройство "USB serial converter" телефона, например, /dev/bus/usb/001/115 (номер вашей шины и адрес устройства могут отличаться). Это иногда связано и используется из /dev/android_adb.

lsusb поможет найти номер автобуса и адрес устройства. Помните, что при повторном подключении адрес устройства обязательно изменится, как и номер шины, если порт запутается в том, какую скорость использовать (например, один физический порт оказывается на одной логической шине или другой).

Линия lsusb выглядит примерно так: Шина 001 Устройство 115: ID 4321:fedc bla bla bla

lsusb -v может помочь вам найти устройство, если "bla bla bla" не достаточно подсказка (иногда в нем нет ни производителя, ни модели телефона).

Как только вы узнаете устройство, проверьте своими глазами, что ls -a /dev/bus/usb/001/115 действительно доступен для данного пользователя! Затем проверьте, что он работает с chmod и исправьте настройки udev.

PS1: / dev / android_adb может указывать только на одно устройство, поэтому убедитесь, что оно делает то, что вы хотите.

PS2: Несвязанный с этим вопросом, но менее известный: у adb есть фиксированный список идентификаторов поставщиков, через которые он проходит. Этот список может быть расширен из ~/.android/adb_usb.ini, который должен содержать 0x4321 (если мы следуем приведенной выше строке lsusb моего примера). - Здесь не нужно, так как вы даже не получаете "никаких разрешений", если идентификатор производителя неизвестен.

Та же проблема с Pipo S1S после обновления до 4.2.2 с 4 июня.

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

Все вышеперечисленные предложения, действительные для распознавания вашего USB-устройства, не решают проблему для меня. (Android Debug Bridge версии 1.0.31 работает на Mint 15.)

Обновление Android SDK инструментов и т.д. сбрасывает ~/.android/adb_usb.ini,

Чтобы распознать Pipo VendorID 0x2207, выполните следующие действия.

Добавить в строку /etc/udev/rules.d/51-android.rules

SUBSYSTEM=="usb", ATTR{idVendor}=="0x2207", MODE="0666", GROUP="plugdev"

Добавить строку в ~/.android/adb_usb.ini:

0x2207

Затем удалите файлы adbkey

rm -f ~/.android/adbkey ~/.android/adbkey.pub

и заново подключите ваше устройство, чтобы восстановить файлы ключей с правильным подключением adb. Некоторые устройства будут запрашивать повторную авторизацию.

sudo adb kill-server
sudo adb start-server   
adb devices

Я добавлю этот постскриптум здесь вверху, чтобы он не потерялся в моем предыдущем объяснении.

Я могу надежно создать и решить проблему отсутствия разрешений, просто изменив тип подключения USB с камеры (PTP) на медиаустройство (MTP). Режим камеры позволяет отладку; режим мультимедиа вызывает ответ без разрешений в ADB.

Рассуждение кажется довольно очевидным после размышления об этом на мгновение. Незащищенный контент на устройстве будет доступен для отладчика в режиме медиа-сервера.

===========

Устройство не будет разрешено, пока вы не примете предупреждение RSA о шифровании на отлаженном устройстве. В какой-то момент после подключения устройство попросит принять отладочное соединение. Это минимальный протокол безопасности, который обеспечивает доступ к устройству за пределами начальной блокировки. Режим разработчика должен быть включен, я считаю.

Флаг "без прав доступа" на самом деле является хорошим первым индикатором того, что adb распознает устройство как допустимую цель отладки. Обратите внимание, что в нем нет других ваших USB-устройств.

Подробности на следующих и связанных страницах.

http://developer.android.com/tools/device.html

Была такая же проблема. Это была проблема с правилами Udev. Попробовал несколько правил, упомянутых выше, но не решил проблему. Нашел набор правил здесь, https://github.com/M0Rf30/android-udev-rules. Следовал гид там и, вуаля, исправил.

Я столкнулся с той же проблемой сегодня.

Я следовал официальным инструкциям, но не заметил, что ДОЛЖЕН запускать команду
"chmod a+r /etc/udev/rules.d/51-android.rules"

После того, как я установил этот файл в удобочитаемый для всех и снова подключил USB-кабель, статус стал неавторизованным. Тогда просто дайте разрешение, и все идет хорошо.

Я согласен с Робертом Симером и Микаэлем Витрантом. Если это не работает, попробуйте отладить с strace

strace adb devices

В моем случае это помогает убить все экземпляры и удалить файл сокета /tmp/ADB_PORT (по умолчанию /tmp/5037).

Другим возможным источником этой проблемы является USB-модем. Если вы использовали USB-модем, выключите его, затем отключите устройство от USB, подключите его снова, затем выполните

adb kill-server
adb devices

В моем случае это помогло (Ubuntu 12.04, Nexus S, SDK в домашнем каталоге, никогда не требовался root для запуска). В зависимости от вашего устройства, вам может потребоваться запустить adb devices как корень, хотя.

Выход из ls -al /usr/bin/adb должен показать, что он принадлежит пользователю root и группа root, Вы можете использовать Linux ACL (Access Control Lists), чтобы предоставить локальным пользователям разрешения на adb следующее:

setfacl -m "u:userName:rwx" /usr/bin/adb

Это предпочтительнее, чем установка бита SUID на /usr/bin/adb а также ограничивает пользователей, которые могут использовать adb имя пользователя и root.

Попробуйте команду "android update adb". Это помогает мне с Samsung Galaxy.

  1. Закрыть бег adbЗакрывать работающую андроид-студию.

  2. список устройств,

/usr/local/android-studio/sdk/platform-tools/adb devices

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

1) в том, что в правиле udev обычно есть переменная "user", например USER="your_user", вероятно, сразу после GROUP = "plugdev"

2) Вам необходимо использовать правильные значения SYSFS{idVendor}==”####″ и SYSFS{idProduct}=="####"для ваших устройств. Если у вас есть устройства более чем одного производителя, например, одно от Samsung и одно от HTC, то вам нужно иметь запись (правило) для каждого поставщика, а не запись для каждого устройства, но для каждого другого поставщика, которого вы будете использовать, поэтому вам нужна запись для HTC и Samsung. Похоже, у вас есть запись для Samsung, теперь вам нужна другая. Помните USER="your_user". Используйте 'lsusb', как предлагает Роберт Сеймер, чтобы найти idVendor и idProduct, обычно это цифры и буквы в этом формате X#X#:#X#X Я думаю, что первым является idVendor, а вторым idProduct, но вам нужно сделайте это для каждой марки телефона / планшета, который у вас есть.

3) Я не выяснил, чем 51-adb.rules и 99-adb.rules отличаются или почему.

4) возможно, попробуйте добавить группу "plugdev" к вашему пользователю с помощью "usermod -a -G plugdev your_user", попробуйте это на свой страх и риск, хотя я не думаю, что это более опасно, чем запуск графического интерфейса пользователя root, но я считаю, что при необходимости вы следует по крайней мере использовать вместо этого "gksudo eclipse".

Я надеюсь, что это помогло прояснить некоторые вещи, синтаксис правил udev также немного загадочен для меня, но из того, что я слышал, он может отличаться для разных систем, так что попробуйте что-то одно, съедая один раз, и обратите внимание, какие изменения работают,

На THL W100 работающее устройство как root (как описано выше) работало только вместе с включенной привязкой (для этого я использовал AirDroid).

У меня была такая же ситуация, когда три устройства подключались к одному и тому же хосту, но только одно не имело никаких прав, другие были в сети.

Добавление SUID или SGID на adb было еще одной проблемой для меня. Устройства видны в автономном режиме каждый раз, когда adb перезапускается - пока вы не подтвердите на устройствах каждый раз

Я решил проблему с отсутствием разрешений, добавив разрешение "o+w" для файла устройства.

chmod o+w / dev / bus / usb / 00n / xxx

Другие вопросы по тегам