Dispositif de Pont de débogage Android (adb) - pas de permissions [dupliquer]

cette question a déjà une réponse ici:

j'ai un problème de connexion HTC Wildfire A3333 en mode débogage avec ma Fedora Linux 17. Adb dit:

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

mon règles udev (première règle pour Samsung qui fonctionne très bien et deuxième pour HTC qui n'est pas):

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

pour les appareils Samsung tout va bien:

 ./adb devices
List of devices attached 
00198a9422618e  device

j'ai essayé toutes les réponses données dans un fil simmilaire sans aucune chance: utilisation HTC wildfire pour le développement android

181
demandé sur Alex P. 2013-01-22 18:17:40

20 réponses

je viens d'avoir ce problème moi-même sous Debian Wheezy. J'ai redémarré le démon adb avec sudo:

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

Tout fonctionne :)

336
répondu Leon 2014-02-03 10:56:52

la cause de ce problème est liée aux permissions système (merci @ IsaacCisneros pour cette suggestion). En quelque sorte HTC Wildfire (et peut-être les autres) ont besoin de quelque chose de plus du système que des appareils Samsung. La solution Simple est D'exécuter Eclipse comme une racine, mais ce n'est pas très à l'aise avec les systèmes Linux Non-sudo comme Fedora.

j'ai trouvé un autre moyen d'atteindre le même objectif, qui semble être plus convivial et est moins de trou de sécurité alors en cours d'exécution IDE entier avec super privilèges d'utilisateur. L'esprit, c'est encore qu'une solution de contournement du problème. L'utilisation du système root devrait être minimisée uniquement pour les tâches administratives, et" adb " a été conçu pour fonctionner avec un compte d'utilisateur normal sans SUID. Malgré le fait que le réglage approprié de SUID est tout à fait sûr, chaque augmentation de permission est un trou potentiel de sécurité du système.

1.Propriété de la bad binaire (propriétaire de la racine, propriétaire du groupe - user_group):

chown root:user_group adb

2.Définition des permissions avec SUID:

chmod 4550 adb

cela devrait donner quelque chose de similaire à ceci (ls-llh):

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

après cela, vous pourrez exécuter adb en tant que root, même si vous utiliserez votre compte d'utilisateur normal. Vous pouvez exécuter Eclipse comme un utilisateur normal et votre HTC doit être découvert correctement.

./adb devices 
List of devices attached 
HT0BPPY15230    device 
103
répondu Kristopher 2013-01-23 11:36:48

j'ai un problème similaire:

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

enquête

si j'exécute lsusb , je peux voir quels appareils j'ai connectés, et où:

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

cela montre mon Samsung Galaxy S3 et mon Nexus 7 (2012) connectés.

vérification des permissions sur ceux:

$ 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

attendez. Quoi? D'où vient ce groupe" 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"

(j'ai enveloppé ces lignes)

noter les lignes GROUP="plugdev" . Notez également que cela ne fonctionne pas pour L'autre ID de périphérique:

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

(rien n'est retourné)

Fixation

OK. Alors, quelle est la solution?

ajouter une règle

créer un fichier /etc/udev/rules.d/99-adb.rules contenant la ligne suivante:

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

cela devrait être une seule ligne, je l'ai enveloppé ici pour lisibilité

redémarrer udev

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

Que c'est

débranchez votre appareil.

Essayer

$ adb devices
List of devices attached 
4df15d6e02a55f15    device
015d2109ce67fa0c    device
86
répondu Roger Lipscombe 2013-10-10 09:28:57

votre règle udev semble fausse. J'ai utilisé ceci et cela a fonctionné:

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

( ATTR au lieu de SYSFS )

36
répondu Michaël Witrant 2013-08-03 12:48:18

sous ubuntu 12.04, eclipse juno. Je suis face au même problème. C'est ce que j'ai trouvé sur Yi YU Blog

la solution est la même que Leon

sudo -s
adb kill-server
adb start-server
adb devices
24
répondu Chan 2013-03-10 05:44:18

la réponse de Stephan fonctionne (en utilisant sudo adb kill-server), mais elle est temporaire. Il doit être réémis après chaque redémarrage.

pour une solution permanente, le config udev doit être modifié:

la réponse de Witrant est la bonne idée (copiée de la documentation officielle Android). Mais c'est juste un modèle. Si cela ne fonctionne pas pour votre appareil, vous devez remplir le bon ID de périphérique pour votre périphérique(s).

lsusb

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

Trouvez votre appareil android dans la liste.

puis utilisez la première moitié de L'ID (4 chiffres) pour l'idVendor (la dernière moitié est l'idProduct, mais il n'est pas nécessaire de faire fonctionner adb).

sudo vi /etc/udev/rules.d/51-android.rules et ajouter une règle pour chaque idVendor unique:

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

c'est aussi simple que ça. Vous n'avez pas besoin de tous les autres champs indiqués dans certaines réponses. Enregistrez le fichier.

puis redémarrez. Le changement est permanent. (Roger montre un moyen de redémarrer udev, si vous ne voulez pas redémarrer).

22
répondu Brent Faust 2013-11-19 20:54:07

...la réponse de L'OP est faux dans la mesure où il n'y a pas de "permissions système spéciales". – Le "pas d'autorisation" problème se résume à de la ... aucune autorisation.

malheureusement, il n'est pas facile de déboguer, parce que adb en fait un secret quel appareil il essaie d'accéder! Sur Linux, il essaie d'ouvrir le périphérique "USB serial converter" du téléphone, qui est par exemple /dev/bus/usb/001/115 (votre numéro de bus et l'adresse du périphérique varieront). C'est parfois lié et utilisé à partir de/dev / android_adb.

lsusb aidera à trouver le numéro du bus et l'adresse du périphérique. Attention, l'adresse de l'appareil changera à coup sûr si vous re-branchez, tout comme le numéro du bus si le port se trompe sur la vitesse à utiliser (par exemple, un port physique finit sur un bus logique ou un autre).

une ligne lsusb ressemble à ceci: Bus 001 dispositif 115: ID 4321: fedc bla bla bla

lsusb -v peut vous aider à trouver l'appareil si le "bla bla bla" n'est pas allusion assez (parfois, il ne contiennent ni le fabricant, ni le modèle de votre téléphone).

une Fois que vous savez l'appareil, vérifier de vos propres yeux que ls -a /dev/bus/usb/001/115 est vraiment accessible pour l'utilisateur en question! Vérifiez ensuite que cela fonctionne avec chmod et corrigez votre configuration udev.

PS1:/dev / android_adb peut seulement pointer vers un périphérique, donc assurez-vous qu'il fait ce que vous voulez.

PS2: sans rapport avec cette question, mais moins connu: adb a une liste fixe de noms de fournisseurs qu'il passe par. Cette liste peut être étendue de ~/.android / adb_usb.ini, qui devrait contenir 0x4321 (si nous suivons mon exemple de la ligne lsusb ci-dessus). – Pas nécessaire ici, car vous n'avez même pas de "pas de permissions" si l'id du vendeur n'est pas connu.

22
répondu Robert Siemer 2014-04-10 10:52:03

changer le Mode USB du téléphone a fait l'affaire pour moi. (Je l'ai mis à Transfert de Fichier)

12
répondu NuttLoose 2017-08-12 02:59:49

je vais préparer ce postscript ici en haut pour qu'il ne se perde pas dans mon explication précédente.

je peux produire et résoudre de manière fiable le problème de non-permissions en changeant simplement le type de connexion USB de L'appareil photo (PTP) à L'appareil multimédia (MTP). Le mode camera permet le débogage; le mode media provoque la réponse no-permissions dans ADB.

Le raisonnement semble assez évident après avoir réfléchi un moment. Contenu non sécurisé sur le le périphérique serait rendu accessible par le débogueur en mode Serveur multimédia.

===========

l'appareil n'est pas activé jusqu'à ce que vous acceptiez l'avertissement de cryptage RSA sur l'appareil débogué. À un moment donné après la connexion, l'appareil demandera d'accepter la connexion de débogage. Il s'agit d'un protocole de sécurité minimale qui garantit que vous pouvez accéder à l'appareil au-delà de la serrure initiale par balayage. Le mode développeur doit être activé, je crois.

Le drapeau "no permissions" est en fait un bon premier indicateur que l'adb reconnaît le périphérique comme cible de débogage valide. Notez qu'il ne Liste pas vos autres périphériques USB.

détails aux pages suivantes et connexes.

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

8
répondu MikeW 2013-04-14 04:54:42

même problème avec Pipo S1S après mise à niveau à 4.2.2 Stock rom 4 juin.

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

toutes les suggestions ci-dessus, bien que valide pour obtenir votre périphérique usb reconnu, ne pas résoudre le problème pour moi. (Android Debug Bridge version 1.0.31 tournant sur Mint 15.)

mise à Jour d'android sdk tools etc réinitialise ~/.android/adb_usb.ini .

Pour reconnaître Pipo VendorID 0x2207 faire ces étapes

ajouter à la ligne /etc/udev/rules.d/51-android.rules

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

ajouter la ligne ~/.android/adb_usb.ini :

0x2207

puis supprimer les fichiers adbkey

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

et reconnectez votre appareil pour reconstruire les fichiers clés avec une connexion adb correcte. Certains appareils demanderont une nouvelle autorisation.

sudo adb kill-server
sudo adb start-server   
adb devices
7
répondu Dorian Carlill 2014-10-18 20:31:37

j'ai rencontré le même problème aujourd'hui.

j'ai suivi les instructions officielles , mais je n'ai pas remarqué que je devrais exécuter la commande

" chmod a+R /etc/udev/rules.D / 51-android.règles"


après avoir réglé ce fichier à lisible par le monde et re-plug mon câble usb", le statut est devenu non autorisé. Puis juste accorder l'autorisation et tout va bien.

3
répondu VicX 2015-11-28 15:36:15

je suis d'accord avec Robert Siemer et Michaël Witrant . Si cela ne fonctionne pas, essayez de déboguer avec strace

strace adb devices

dans mon cas, cela aide à tuer toutes les instances et à supprimer le fichier de socket /tmp/ADB_PORT (la valeur par défaut est /tmp/5037 ).

2
répondu pevik 2017-12-06 19:36:41

une autre source possible de ce problème est l'attache USB. Si vous avez utilisé l'attache USB, éteignez-le, puis débranchez le périphérique USB, branchez-le de nouveau, puis faire

adb kill-server
adb devices

qui a fait l'affaire dans mon cas (Ubuntu 12.04, Nexus S, SDK dans home dir, jamais eu besoin de root pour le faire fonctionner). En fonction de votre appareil, vous pouvez avoir besoin d'exécuter adb devices comme root, cependant.

1
répondu user149408 2013-09-24 12:05:38

Essayer "mise à jour android adb de la commande". Ça m'aide avec le samsung galaxy gear.

1
répondu Alex Kutsko 2014-01-15 13:59:35

la sortie de ls -al /usr/bin/adb doit montrer qu'elle est détenue par l'utilisateur root et le groupe root . Vous pouvez utiliser Linux ACL (Access Control Lists) pour donner à vos utilisateurs locaux les permissions pour adb comme suit:

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

ceci est préférable au réglage du bit SUID sur /usr/bin/adb et limite également les utilisateurs qui peuvent utiliser adb à userName et root .

1
répondu Jun_in_Jeju 2015-07-16 06:24:56

Avait le même problème. C'était un problème avec les règles udev. Essayé quelques règles mentionnées ci-dessus, mais didnot résoudre le problème. J'ai trouvé un ensemble de règles ici, https://github.com/M0Rf30/android-udev-rules . J'ai suivi le guide et voilà, c'est réparé.

1
répondu Anish Unnikrishnan 2017-07-18 04:45:12

la réponse est tissé parmi les différents postes ici, je vais si mon meilleur, mais il ressemble à une raison très simple et évidente.

1) est qu'il y a habituellement une variable "user" dans la règle udev quelque chose comme USER = "your_user" probablement juste après le groupe=" plugdev "

2) vous devez utiliser les valeurs correctes SYSFS{idVendor}=="###" et SYSFS{idProduct}=="###" pour votre/Vos appareil (s). Si vous avez des appareils de plus d'une manufacture, dites comme l'un de Samsung et l'un de HTC, alors vous devez avoir une entrée(règle) pour chaque vendeur, pas une entrée pour chaque appareil, mais pour chaque fournisseur que vous utilisez, si vous avez besoin d'une entrée pour HTC et Samsung. Il semble que vous avez votre entrée pour Samsung maintenant, vous avez besoin d'un autre. Rappelez-vous L'utilisateur="your_user". Utilisez 'lsusb' comme Robert Seimer suggère pour trouver l'idVendor et idProduct, ils sont généralement des nombres et des lettres dans ce format X#X#:#X#X je pense que le premier est l'idVendor et le second idProduct mais vous allez avoir besoin de le faire pour chaque marque de téléphone/tablette que vous avez.

3) Je n'ai pas compris comment 51-adb.règles et 99-bad.les règles sont différentes ou pourquoi.

4) Essayez peut-être d'ajouter le groupe "plugdev" à votre utilisateur avec "usermod-A-G plugdev your_user", essayez cela à vos risques et périls, bien que je ne pense pas que ce soit plus risqué que de lancer une gui comme root, mais je crois que si nécessaire, vous devriez au moins utiliser "gksudo eclipse" à la place.

j'espère que cela a aidé à clarifier certaines choses, la syntaxe des règles udev est un peu un mystère pour moi aussi, mais d'après ce que j'ai entendu, il peut être différent pour différents systèmes donc essayer certaines choses, on a mangé une fois, et noter ce que le changement fonctionne.

0
répondu Overloaded_Operator 2013-11-09 04:59:35
  1. "Close running adb , pourrait être la fermeture de l'exécution android-studio.

  2. liste des dispositifs,

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

0
répondu prayagupd 2014-07-27 17:46:46

sur le WL100 l'exécution du dispositif en tant que root (comme décrit ci-dessus) n'a fonctionné qu'avec l'attache activée (J'ai utilisé AirDroid pour cela).

-1
répondu mary jane 2013-12-07 15:52:45

j'ai eu la même situation où trois appareils connectés à un même hôte mais un seul n'avait "pas de permissions" les autres étaient en ligne.

ajouter SUID ou SGID sur adb était un autre problème pour moi. Appareils VUS hors ligne chaque fois que adb redémarre-jusqu'à ce que vous accusez réception sur les appareils à chaque fois.

j'ai résolu ce problème de 'pas de permissions' en ajoutant 'O+w' permission pour un fichier de périphérique.

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

-1
répondu Kenichi Takemura 2016-02-12 10:19:44