web-dev-qa-db-ja.com

Android Debug Bridge(adb)デバイス - 権限なし

デバッグモードのHTC Wildfire A3333を私のFedora Linux 17に接続するのに問題があります。

./adb devices
List of devices attached 
????????????    no permissions

私のudevルール(Samsungの最初のルールは問題なく動作し、HTCの場合は動作しません):

SUBSYSTEM=="usb",SYSFS{idVendor}=="04e8",SYMLINK+="Android_adb",MODE="0666",GROUP="plugdev" 
SUBSYSTEM=="usb",SYSFS{idVendor}=="0bb4",SYMLINK+="Android_adb",MODE="0666",GROUP="plugdev"

サムスンのデバイスではすべて問題ありません。

 ./adb devices
List of devices attached 
00198a9422618e  device

私は、幸運なことに同じようなスレッドで与えられたすべての答えを試してきました: Android開発にHTCの山火事を使う

186
Kristopher

その問題の原因はシステムのパーミッションに関係しています(この提案をくれてありがとう@ IsaacCisneros)。どういうわけかHTC Wildfire(そしておそらく他の人たち)はSamsungのデバイスよりもシステムからもっと何かが必要です。単純な解決策はEclipseをルートとして実行することですが、これはFedoraのようなSudo以外のLinuxシステムではあまり快適ではありません。

同じ目標を達成するための別の方法を見つけました。それはよりユーザーフレンドリーで、セキュリティホールが少ないことで、スーパーユーザー権限でIDE全体を実行することです。これはまだ問題の回避策にすぎないことに注意してください。システムルートの使用は管理タスクに限って最小限に抑えられるべきであり、「adb」はSUIDなしで通常のユーザーアカウントで動作するように設計されています。 SUIDの適切な設定は非常に安全であるという事実にもかかわらず、許可が1つ増えるごとにシステムセキュリティホールになる可能性があります。

1. adbバイナリの所有権の設定(所有者 - ルート、所有者グループ - ユーザグループ):

chown root:user_group adb

2. SUIDでパーミッションを設定します。

chmod 4550 adb

これは次のような結果になるはずです(ls -llh):

-r-sr-x---. 1 root user_name 1.2M Jan 8 11:42 adb

その後は通常のユーザーアカウントを使用しますが、adbをrootイベントとして実行できるようになります。あなたは普通のユーザーとしてEclipseを走らせることができます、そしてあなたのHTCはきちんと発見されるべきです。

./adb devices 
List of devices attached 
HT0BPPY15230    device 
107
Kristopher

私はDebian Wheezyのもとでこの問題を抱えていました。私はSudoでadbデーモンを再起動しました。

Sudo ./adb kill-server
Sudo ./adb start-server
Sudo ./adb devices

すべてうまくいっています:)

345
Leon

私は同様の問題を抱えています:

$ adb devices
List of devices attached 
4df15d6e02a55f15    device
????????????    no permissions

調査

lsusbを実行すると、接続しているデバイスを確認できます。

$ lsusb
...
Bus 002 Device 050: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone ...
Bus 002 Device 049: ID 18d1:4e42 Google Inc. 

これは私のSamsung Galaxy S​​そして私のNexus 7(2012) connectedを示しています。

それらの権限を確認します。

$ ls -l /dev/bus/usb/002/{049,050}
crw-rw-r--  1 root root    189, 176 Oct 10 10:09 /dev/bus/usb/002/049
crw-rw-r--+ 1 root plugdev 189, 177 Oct 10 10:12 /dev/bus/usb/002/050

待つ。何?その "plugdev"グループはどこから来ましたか?

$ cd /lib/udev/rules.d/
$ grep -R "6860.*plugdev" .
./40-libgphoto2-2.rules:ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="6860", \
  ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="proprietary", \
  ENV{ID_MEDIA_PLAYER}="1", MODE="0664", GROUP="plugdev"
./40-libgphoto2-2.rules:ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", \
  ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="proprietary", \
  ENV{ID_MEDIA_PLAYER}="1", MODE="0664", GROUP="plugdev"

(私はそれらの行を折り返しました)

GROUP="plugdev"行に注意してください。また、これは他のデバイスIDでは機能しません。

$ grep -Ri "4e42.*plugdev" .

(何も返されません)

それを修正する

OK。それでは、修正は何ですか?

ルールを追加する

次の行を含むファイル/etc/udev/rules.d/99-adb.rulesを作成します。

ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e42", ENV{ID_GPHOTO2}="1",
  ENV{GPHOTO2_DRIVER}="proprietary", ENV{ID_MEDIA_PLAYER}="1",
  MODE="0664", GROUP="plugdev"

これは単一行にする必要があります。読みやすくするためにここで折り返しました

Udevを再起動

$ Sudo udevadm control --reload-rules
$ Sudo service udev restart

それでおしまい

お使いのデバイスを取り外してください。

それを試してみてください

$ adb devices
List of devices attached 
4df15d6e02a55f15    device
015d2109ce67fa0c    device
88
Roger Lipscombe

あなたの規則は間違っているようです。私はこれを使いましたが、うまくいきました。

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

ATTRの代わりにSYSFS

36

ubuntu 12.04、Eclipse junoの下で。私は同じ問題に直面しています。これは私が見つけたもの Yi Yu Blog

解決策はLeonと同じです。

Sudo -s
adb kill-server
adb start-server
adb devices
24
Chan

...これまでのところ、OP自身の答えは間違っているです。「特別なシステム権限」はありません。 - 「権限なし」の問題は、...権限なしということになります。

残念ながら、adbはどのデバイスにアクセスしようとしているのかを秘密にしているため、デバッグは容易ではありません。 Linuxでは、電話の「USBシリアルコンバータ」デバイスを開こうとします。/dev/bus/usb/001/115(あなたのバス番号とデバイスアドレスは変わります)これは時々/ dev/Android_adbからリンクされ使用されます。

lsusbは、バス番号とデバイスアドレスを見つけるのに役立ちます。使用する速度についてポートが混乱した場合のバス番号と同様に、再接続するとデバイスアドレスが確実に変更されることに注意してください(たとえば、1つの物理ポートが別の論理バスに接続されるなど)。

Lsusb-lineは、これに似ます。バス001デバイス115:ID 4321:fedc bla bla bla

「bla bla bla」があまりヒントにならない場合は、lsusb -vを使用してデバイスを見つけることができます(製造元も電話のモデルも含まれていない場合があります)。

あなたがデバイスを知ったら、ls -a /dev/bus/usb/001/115が問題のユーザーにとって本当にアクセス可能であることをあなた自身の目で確かめてください!それがchmodで動作することを確認して、udevの設定を修正してください。

PS1:/ dev/Android_adbは1つのデバイスだけを指すことができるので、それがあなたが望むことをすることを確認してください。

PS2:この質問とは無関係ですが、あまり知られていません:adbにはベンダーIDの固定リストがあります。このリストは、0x4321を含める必要がある〜/ .Android/adb_usb.iniから拡張できます(上の例のlsusbの行に従った場合)。 - ベンダーIDがわからない場合は、「権限なし」と表示されないため、ここでは必要ありません。

22
Robert Siemer

Stephanの答えは(Sudo adb kill-serverを使用して)機能しますが、それは一時的なものです。再起動のたびに再発行する必要があります。

恒久的な解決策のためには、udev設定を修正する必要があります。

Witrantの答えは正しいアイデアです(Androidの公式ドキュメントからコピー)。しかし、それは単なるテンプレートです。それがあなたのデバイスでうまくいかない場合は、あなたはあなたのデバイス用の正しいデバイスIDを記入する必要があります。

lsusb

Bus 001 Device 002: ID 05c6:9025 Qualcomm, Inc.
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
...

リストであなたのAndroidデバイスを見つけます。

次に、idVendorにIDの前半(4桁)を使用します(後半はidProductですが、adbを動作させる必要はありません)。

Sudo vi /etc/udev/rules.d/51-Android.rulesを作成し、一意のidVendorごとにルールを1つ追加します。

SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"

それはとても簡単です。いくつかの答えで与えられている他のすべてのフィールドは必要ありません。ファイルを保存してください。

その後再起動します。変更は永続的です。 (再起動したくない場合は、Rogerがudevを再起動する方法を示しています)。

22
Brent Faust

電話からUSBモードを変更することは私のためにトリックをしました。 (ファイル転送に設定します)

13
NuttLoose

このポストスクリプトの先頭には、この冒頭部分を追加しますので、これまでの説明でも見逃してはいけません。

USB接続の種類をカメラ(PTP)からメディアデバイス(MTP)に変更するだけで、権限のない問題を確実に生成して解決できます。カメラモードではデバッグが可能です。メディアモードでは、ADBで無許可の応答が発生します。

その理由は、しばらくの間それを熟考した後ではっきりしているように思われます。デバイス上のセキュリティ保護されていないコンテンツは、メディアサーバーモードでデバッガによってアクセス可能になります。

===========

デバッグされたデバイスでRSA暗号化警告を受け入れるまで、デバイスは許可されていません。接続後のある時点で、デバイスはデバッグ接続を受け入れるように要求します。これは、最初のスワイプロックを超えてデバイスにアクセスできるようにするための最低限のセキュリティプロトコルです。開発者モードを有効にする必要があると思います。

"権限なし"フラグは、実際にはadbがデバイスを有効なデバッグターゲットとして認識するための優れた最初の指標です。他のUSBデバイスが表示されていないことに注意してください。

以下のページと関連ページに詳細があります。

http://developer.Android.com/tools/device.html

8
MikeW

6月4日の4.2.2在庫からアップグレードした後のPipo S1Sと同じ問題。

$ adb devices
List of devices attached  
????????????    no permissions

上記の提案のすべては、あなたのUSBデバイスを認識させるために有効であるが、私のために問題を解決しない。 (Mint 15で動作するAndroid Debug Bridgeバージョン1.0.31)

Android SDKツールなどを更新すると、~/.Android/adb_usb.iniがリセットされます。

Pipo VendorID 0x2207を認識するには、次の手順を実行します。

/etc/udev/rules.d/51-Android.rules行に追加します。

SUBSYSTEM=="usb", ATTR{idVendor}=="0x2207", MODE="0666", GROUP="plugdev"

~/.Android/adb_usb.iniに行を追加します。

0x2207

次にadbkeyファイルを削除します

rm -f ~/.Android/adbkey ~/.Android/adbkey.pub

そして正しいadb接続でキーファイルを再構築するためにあなたのデバイスを再接続してください。一部のデバイスは再認証を要求します。

Sudo adb kill-server
Sudo adb start-server   
adb devices
7
Dorian Carlill

同じ問題がありました。それはudevのルールの問題でした。上記のルールをいくつか試しましたが、問題は解決しませんでした。ここで一連のルールを見つけました https://github.com/M0Rf30/Android-udev-rules 。ガイドに従ってください、そして、さて、修正しました。

3

今日も同じ問題に遭遇しました。

私は 公式の指示 に従ったが、私はそれに気付かなかった コマンドを実行する必要があります
"chmod a + r /etc/udev/rules.d/51-Android.rules"

このファイルを読みやすいように設定した後 再接続 私のUSBケーブル、ステータスが不正になった。それから許可を与えるだけですべてがうまくいきます。

3
VicX

私は Robert SiemerMichaëlWitrant に同意します。うまくいかない場合はstraceでデバッグしてみてください。

strace adb devices

私の場合は、すべてのインスタンスを強制終了してソケットファイル/tmp/ADB_PORTを削除するのに役立ちます(デフォルトは/tmp/5037)。

2
pevik

この問題のもう1つの原因はUSBテザリングです。 USBテザリングを使用したことがある場合は、それをオフにしてから、デバイスをUSBから取り外し、再度差し込みます。

adb kill-server
adb devices

私の場合はそれがうまくいきました(Ubuntu 12.04、Nexus S、SDK in home dir、それを実行するためにrootがいりませんでした)。デバイスによっては、rootでadb devicesを実行する必要があるかもしれません。

1
user149408

ls -al /usr/bin/adbの出力は、それがユーザーrootおよびグループrootによって所有されていることを示すはずです。以下のように、Linux ACL(アクセス制御リスト)を使用して、ローカルユーザーにadbに対するアクセス許可を付与できます。

setfacl -m "u:userName:rwx" /usr/bin/adb

これは/usr/bin/adbのSUIDビットを設定するよりも好ましいです。また、adbを使用できるユーザーをserNameおよびrootに制限します。

1
Jun_in_Jeju

「Android update adb」コマンドを試してください。それはサムスンの銀河ギアで私を助けます。

1
Alex Kutsko

答えはここにさまざまな記事の中で編まれています、私は全力を尽くしますが、それは本当に簡単で明白な理由のように見えます。

1)USER = "your_user"のようなudevルールの中にはおそらく "user"変数が通常GROUP = "plugdev"の直後にあるということです。

2)お使いのデバイスには、正しいSYSFS {idVendor} ==” ####”およびSYSFS {idProduct} == "####"の値を使用する必要があります。 Samsung製やHTC製など、複数の製造元からのデバイスがある場合は、各デバイスのエントリではなく使用する各ベンダのエントリ(各ベンダのエントリ)が必要です。 HTCとSamsungのエントリーが必要です。それはあなたが今あなたが別のものが必要なサムスンのためのあなたのエントリーを持っているように見えます。 USER = "your_user"を忘れないでください。 Robert SeimerがidVendorとidProductを見つけるために提案するように 'lsusb'を使用してください、それらは通常このフォーマットのいくつかの数字と文字ですX#X#:#X#Xあなたが持っている携帯電話/タブレットの各ブランドに対してこれを行います。

3)51-adb.rulesと99-adb.rulesがどう違うのか、またその理由がわかりません。

4)多分 "usermod -a -G plugdev your_user"を使って "plugdev"グループをあなたのユーザーに追加してみてください。ルートとしてguiを起動するよりも危険ではないと思いますが、必要ならば私はあなたを信じます少なくとも代わりに "gksudo Eclipse"を使うべきです。

Udevのルールの構文は、いくつかのことを明確にするのにも役立つことを願っていますが、システムによって異なる可能性があるので、少しずつ試してみて、どのような変更が行われるのか注意してください。 。

0
  1. adbを終了します。Android-studioを終了します。

  2. デバイスを一覧表示します。

/usr/local/Android-studio/sdk/platform-tools/adb devices

0
prayagupd