Ubuntu: adbでno permissionsでデバイスに接続できない

Xperiaでadbで接続は正常に行ってたのに、うちのXOOMで接続したら

と出てしまってadbで認識出来ませんでしたので、その解決方法。

そもそもこのエラーが表示される時はadbのdaemonの持っている権限が不足してusbデバイスのデバイスファイルを開けない事によります。

対処方法は二通り考えられます。

対処方法その1

root permissionでdaemonを動かす。

  1. USBケーブルを抜く
  2. sudo adb kill-server
※ sudoした状態でadbのpathが解決できない場合 sudo \`which adb\` kill-server
  1. sudo adb start-server
※ sudoした状態でadbのpathが解決できない場合 sudo \`which adb\` start-server
  1. USBケーブルを刺す

上記の操作でroot permissionでdaemonが動きますので一応問題解決できます。

ただ、Xperiaで出来ているのにXOOMでできないのは何だか腑に落ちませんので、もう少し調べてみました。

Xperiaで認識出来ている状態は以下。ポイントはgroup idとacl設定を示す+。

一方XOOMを接続した時のデバイスは以下。

Xperiaの方はgroup idがplugdevでaclが追加(+)されています。

ここでplugdevというgroupですが、これはユーザ権限のうち「自動的に外部ディスク接続時にアクセスできる」という権限に対応したグループになります。

XperiaはMTPモードにしていますが、この場合以下の様にPhoto Deviceとして認識しています。

このためudevの認識行及び関係する行は、以下になります。

これに対してXOOMは特にアクセス可能なデバイスとして認識されていません。

というわけで、対応策としてはgroup idを変更するか、aclを設定してやることになりそうです。

今回は以下のファイルを/etc/udev/rules.dに作成してやることで対応が出来ました。これでroot権限がなくてもXOOMに対してadbで接続することが可能になりました。

実はGROUP=”plugdev”も試してみたのですが、それだけではNGでした。ENV{ACL_MANAGE}=”1″がある場合、デバイスファイルのaclにログイン中のユーザを追加する動作が行われるため、この設定で良さそうです。

adb start-serverはeclipse中で起動される事が多いと思います。このためserverはloginしたuser権限で動作しています。

もしかするとdaemonスタート後にlogoutして別ユーザでloginした場合、daemonのkill-server/start-serverが必要になるかもしれません。