Android Debug Bridge (adb) устройство - нет разрешений [дубликат]



этот вопрос уже есть ответ здесь:



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



./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


Я пробовал все ответы, приведенные в simmilar thread wthout any luck:использование HTC wildfire для разработки android

738   20  

20 ответов:

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

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

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

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

у меня аналогичная проблема:

$ 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

вы udev правило кажется неправильным. Я использовал это, и это сработало:

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

(ATTR вместо SYSFS)

в ubuntu 12.04, eclipse juno. Я сталкиваюсь с той же проблемой. Это то, что я нашел на Yi Yu Blog

решение такое же, как и Леон

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

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

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

ответ Witrant-это правильная идея (скопированная из официальной документации 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, если вы не хотите перезагрузить.)

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

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

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

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

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

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

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

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

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

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

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

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

===========

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

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

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

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

та же проблема с Pipo S1S после обновления до 4.2.2 stock rom Jun 4.

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

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

обновление android sdk tools etc сбрасывает ~/.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

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

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

после того, как я установил этот файл в world readable и re-plug мой USB-кабель,статус стал несанкционированным. Тогда просто дайте разрешение, и все будет хорошо.

Я согласен с Роберт Siemer и Michaël Witrant. Если это не работает, попробуйте выполнить отладку с помощью strace

strace adb devices

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

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

adb kill-server
adb devices

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

попробуйте команду "Android update adb". Это помогает мне с Samsung galaxy gear.

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

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

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

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

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

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

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

3) я не понял, как 51-adb.правила и 99-АБР.правила разные или почему.

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

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

  1. закрыть adb, может быть закрытие работает android-studio.

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

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

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

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

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

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

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

Comments

    Ничего не найдено.