La risposta di Izzy è fuorviante. Sono state confuse due cose non correlate (l'elenco degli ID fornitore in adb da un lato e l'impostazione dei permessi in Linux dall'altro).
1) dispositivi considerati da adb:
Adb ha un elenco codificato di ID fornitore USB che prova. Per esempio. I telefoni cellulari HTC utilizzano 0xbb4, che è elencato (file sorgente usb_vendors.c), mentre 0x2207 non lo è.
L'unico un modo per aggiungere a questo elenco (senza applicare patch alla fonte) è inserire gli ID fornitore nel file $HOME/.android/adb_usb.ini
, linea per linea. (HOME è impostato correttamente?)
Non è necessario alcun cavo speciale.
2) configurazione delle autorizzazioni per l'accesso non root:
Il giocherellare con udev consiste nel fornire all'utente l'accesso ad es. /dev/bus/usb/002/009 (cambio numero bus/numero dispositivo; vedi lsusb
per i valori correnti).
I dettagli di questo non sono rilevanti per la domanda del poster originale, poiché ha eseguito adb come root.
Come descritto in Configurazione di ADB per Nexus 4 su Ubuntu 11.10, sotto Linux è importante essere elencati in ~/.android/adb_usb.ini
(basato sull'utente) o /etc/udev/rules.d/51-android.rules
. La sintassi per entrambi i file è diversa:mentre nel primo caso è sufficiente aggiungere semplicemente il vendor id (echo 0x18d1 >> ~/.android/adb_usb.ini
per un Nexus 4), la voce per la regola UDEV è un po' più complessa. I dettagli possono essere trovati nella domanda collegata (o meglio nelle sue risposte).
Nel caso di krlmlr, non era un "o-o", ma apparentemente erano necessarie entrambe le parti (non l'avevo mai avuto prima, e non ho mai nemmeno usato il adb_usb.ini
-- ma questo non significa che non ci siano tali eccezioni). Aggiungendo il dispositivo in entrambi i punti (il che comunque non può far male), il dispositivo è finalmente apparso.
Due osservazioni aggiuntive:dopo aver modificato le regole UDEV, il servizio UDEV deve essere riavviato per accettare le modifiche. Su Ubuntu, questo può essere fatto tramite sudo service udev restart
(in alternativa, puoi semplicemente forzare UDEV a ricaricare le sue regole usando udevadm control --reload-rules
). Se il tuo dispositivo non viene ancora rilevato, molto probabilmente è stato collegato mentre hai apportato le modifiche; è necessario scollegare e ricollegare il cavo USB quindi. Naturalmente, debug USB deve essere abilitato nel tuo dispositivo :)
Esempio
In base al seguente output di lsusb
per il dispositivo Android in questione:
Bus 002 Device 009: ID 2207:0010
è stato necessario creare /etc/udev/rules.d/51-android.rules
come root
con i seguenti contenuti:
SUBSYSTEM=="usb", ATTR{idVendor}=="2207", ATTR{idProduct}=="0010", MODE="0660", GROUP="plugdev"
e per creare ~/.android/adb_usb.ini
con i seguenti contenuti:
0x2207
Il primo è necessario per consentire agli utenti regolari (che appartengono al gruppo plugdev
) per accedere al dispositivo. Nota la maschera di autorizzazione 0660
invece del frequente 0666
che è più debole dal punto di vista della sicurezza (quest'ultimo consente l'accesso "mondo", mentre il primo consente solo l'accesso "utente e gruppo"). Il secondo è richiesto affinché adb
tenta di parlare con il dispositivo in primo luogo. Successivamente:
sudo chmod a+r /etc/udev/rules.d/51-android.rules
sudo udevadm control --reload-rules
adb kill-server
e scollega e collega il tuo dispositivo Android. Poi,
adb devices
finalmente ha mostrato il dispositivo Android.
Per il mio LG Optimus 4X HD , era sufficiente aggiungere una riga a /etc/udev/rules.d/51-android.rules
:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1004", ATTRS{idProduct}=="61a6", MODE="0666" GROUP="androiddev", SYMLINK+="android%n"
Forse il SYMLINK
fa la differenza che non avevo bisogno della voce extra in ~/.android/adb_usb.ini
.