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
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 :)
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
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
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
)
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
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).
...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.
changer le Mode USB du téléphone a fait l'affaire pour moi. (Je l'ai mis à Transfert de Fichier)
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.
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
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.
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
).
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.
Essayer "mise à jour android adb de la commande". Ça m'aide avec le samsung galaxy gear.
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 .
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é.
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.
-
"Close running
adb
, pourrait être la fermeture de l'exécution android-studio. -
liste des dispositifs,
/usr/local/android-studio/sdk/platform-tools/adb devices
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).
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