Izzyina odpověď je zavádějící. Dvě nesouvisející věci byly smíchány (seznam ID dodavatele v adb na jedné straně a nastavení oprávnění v Linuxu na straně druhé).
1) zařízení zvažovaná společností adb:
Adb má pevně zakódovaný seznam ID dodavatelů USB, které zkouší. Např. Mobilní telefony HTC používají 0xbb4, který je uveden (zdrojový soubor usb_vendors.c), zatímco 0x2207 nikoli.
Jediné způsob, jak přidat do tohoto seznamu (bez opravy zdroje), je vložit ID dodavatele do souboru $HOME/.android/adb_usb.ini
, řádek po řádku. (HOME je správně nastaven?)
Není potřeba žádný speciální kabel.
2) nastavení oprávnění pro přístup bez oprávnění root:
udev-fiddling je poskytnout uživateli přístup např. /dev/bus/usb/002/009 (změna čísla sběrnice/čísla zařízení; viz lsusb
pro aktuální hodnoty).
Podrobnosti o tom nejsou relevantní pro otázku původního plakátu, protože spustil adb jako root.
Jak je popsáno v části Konfigurace ADB pro Nexus 4 na Ubuntu 11.10, pod Linuxem je důležité být uveden buď v ~/.android/adb_usb.ini
(na základě uživatele) nebo /etc/udev/rules.d/51-android.rules
. Syntaxe pro oba soubory se liší:zatímco v prvním případě stačí jednoduše přidat id dodavatele (echo 0x18d1 >> ~/.android/adb_usb.ini
pro Nexus 4) je položka pro pravidlo UDEV o něco složitější. Podrobnosti naleznete v odkazované otázce (nebo spíše jejích odpovědích).
V případě krlmlra to nebylo "buď-anebo", ale zdánlivě byly potřeba obě části (nikdy jsem to předtím neměl a nikdy jsem ani nepoužil adb_usb.ini
-- ale to neznamená, že takové výjimky neexistují). Přidáním zařízení na obě místa (což stejně nemůže ublížit) se zařízení konečně ukázalo.
Dvě další poznámky:Po změně pravidel UDEV je třeba restartovat službu UDEV, aby byly změny přijaty. Na Ubuntu to lze provést pomocí sudo service udev restart
(Alternativně můžete jednoduše přinutit UDEV, aby znovu načetl svá pravidla pomocí udevadm control --reload-rules
). Pokud vaše zařízení stále není detekováno, s největší pravděpodobností bylo připojeno během provádění změn; poté musíte odpojit a znovu připojit kabel USB. Samozřejmostí je Ladění USB musí být povoleno ve vašem zařízení :)
Příklad
Na základě následujícího výstupu lsusb
pro příslušné zařízení Android:
Bus 002 Device 009: ID 2207:0010
bylo nutné vytvořit /etc/udev/rules.d/51-android.rules
jako root
s následujícím obsahem:
SUBSYSTEM=="usb", ATTR{idVendor}=="2207", ATTR{idProduct}=="0010", MODE="0660", GROUP="plugdev"
a vytvořit ~/.android/adb_usb.ini
s následujícím obsahem:
0x2207
První je vyžadován pro povolení běžných uživatelů (které patří do skupiny plugdev
) pro přístup k zařízení. Všimněte si masky oprávnění 0660
místo často používaného 0666
který je z hlediska bezpečnosti slabší (druhý umožňuje „světový“ přístup, zatímco první umožňuje pouze „uživatelský a skupinový“ přístup). Druhý je povinný, aby adb
pokusí mluvit se zařízením na prvním místě. Poté:
sudo chmod a+r /etc/udev/rules.d/51-android.rules
sudo udevadm control --reload-rules
adb kill-server
a odpojte+zapojte své zařízení Android. Potom,
adb devices
konečně ukázal zařízení Android.
Pro můj LG Optimus 4X HD , stačilo přidat jeden řádek do /etc/udev/rules.d/51-android.rules
:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1004", ATTRS{idProduct}=="61a6", MODE="0666" GROUP="androiddev", SYMLINK+="android%n"
Možná SYMLINK
volba znamená, že jsem nepotřeboval další položku v ~/.android/adb_usb.ini
.