adb als non-root unter Debian

(2011-06-13)

Um via adb mit seinem Android-Gerät sprechen zu können, habe ich bisher den adb-Server immer als root starten müssen. Daran konnte auch die udev-Regel von android.com nichts ändern.

Da mir das nun aber auf die Nerven ging, habe ich das Problem debugged. Als Test habe ich hierbei den Befehl adb devices verwendet, es sind aber alle Befehle gleichermaßen betroffen.

Die Anleitung auf android.com beschreibt, dass man eine Datei /etc/udev/rules.d/51-android.rules anlegen soll, mit folgendem Inhalt:

SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666"

Hieran stören mehrere Punkte:

  1. Die MODE-Direktive funktioniert nicht auf meinem System (Debian testing), ich weiß nicht genau warum. Stattdessen hat man bei Debian aber eine Gruppe namens plugdev, die man für diesen Zweck verwenden kann.
  2. Der Zugriff auf Attribute via SYSFS{} ist deprecated, stattdessen sollte man ATTR{} verwenden.
  3. Auf android.com wird erklärt, dass das subsystem auf manchen Systemen usb und auf manchen usb_device heißt. Das kann man mittels SUBSYSTEM=="usb|usb_device" bereits in der Regel erschlagen.

Meine udev-Regel sieht also folgendermaßen aus:

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

Das resultiert beim Anstecken des Telefons dann in folgendem Device Node:

crw-rw-r-- 1 root plugdev 189, 144 2011-06-13 19:13 017

…wodurch ein adb devices fortan auch als non-root klappt :).