Ubuntu: adbでno permissionsでデバイスに接続できない
Xperiaでadbで接続は正常に行ってたのに、うちのXOOMで接続したら
と出てしまってadbで認識出来ませんでしたので、その解決方法。
そもそもこのエラーが表示される時はadbのdaemonの持っている権限が不足してusbデバイスのデバイスファイルを開けない事によります。
対処方法は二通り考えられます。
対処方法その1
root permissionでdaemonを動かす。
- USBケーブルを抜く
- sudo adb kill-server
※ sudoした状態でadbのpathが解決できない場合 sudo \`which adb\` kill-server
- sudo adb start-server
※ sudoした状態でadbのpathが解決できない場合 sudo \`which adb\` start-server
- 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が必要になるかもしれません。