我在调试模式下将HTC Wildfire A3333与我的Fedora Linux连接时出现问题.Adb说:
./adb devices
List of devices attached
???????????? no permissions
我的udev规则(三星的第一条规则适用于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
我一直在尝试用一个简单的线程给出的所有答案,但运气不错:Using HTC wildfire for android development
答案 0 :(得分:345)
我自己在Debian Wheezy下遇到了这个问题。 我用sudo重新启动了adb守护进程:
sudo ./adb kill-server
sudo ./adb start-server
sudo ./adb devices
一切正常:)
答案 1 :(得分:107)
该问题的原因与系统权限有关(感谢@ IsaacCisneros提供此建议)。不知何故,HTC Wildfire(以及其他人)需要的系统比三星设备更多。简单的解决方案是以root身份运行Eclipse,但对于像Fedora这样的非sudo Linux系统来说,这不太舒服。
我找到了实现相同目标的另一种方式,这似乎更加用户友好,并且安全漏洞较少,然后以超级用户权限运行整个IDE。请注意,这仍然只是问题的解决方法。系统根使用率应仅最小化为管理任务,“adb”旨在与没有SUID的普通用户帐户一起使用。尽管SUID的正确设置非常安全,但每次增加权限都是潜在的系统安全漏洞。
1.设置adb二进制文件的所有权(所有者 - root,所有者组 - user_group):
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
之后,您将能够以root用户身份运行adb,尽管您将使用普通用户帐户。您可以作为普通用户运行Eclipse,并且应该正确发现HTC。
./adb devices
List of devices attached
HT0BPPY15230 device
答案 2 :(得分:88)
我有类似的问题:
$ 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.
这显示我的三星Galaxy S3 和我的 Nexus 7(2012)已连接。
检查这些权限:
$ 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" .
(没有回复)
行。那有什么问题呢?
创建一个包含以下行的文件/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"
这应该是一行,我已将其包装在此处以便于阅读
$ sudo udevadm control --reload-rules
$ sudo service udev restart
拔下/重新插入您的设备。
$ adb devices
List of devices attached
4df15d6e02a55f15 device
015d2109ce67fa0c device
答案 3 :(得分:36)
你的udev规则似乎错了。我用过它并且有效:
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
(ATTR
代替SYSFS
)
答案 4 :(得分:24)
解决方案与Leon相同
sudo -s
adb kill-server
adb start-server
adb devices
答案 5 :(得分:22)
斯蒂芬的答案有效(使用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设备。
然后使用ID的前半部分(4位数)作为idVendor(后半部分是idProduct,但没有必要让adb正常工作)。
sudo vi /etc/udev/rules.d/51-android.rules
并为每个唯一的idVendor添加一条规则:
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"
就这么简单。您不需要在某些答案中给出的所有其他字段。保存文件。
然后重启。这种变化是永久性的。 (Roger显示了一种重启udev的方法,如果你不想重启)。
答案 6 :(得分:22)
...到目前为止,OP自己的答案错误,没有“特殊系统权限”。 - “无权限”问题归结为......没有权限。
不幸的是,调试起来并不容易,因为adb使它试图访问的设备秘密!在Linux上,它试图打开手机的“USB串行转换器”设备,例如/ dev / bus / usb / 001/115(您的总线号和设备地址会有所不同)。这有时会链接并使用/ dev / android_adb。
lsusb
将有助于查找总线号码和设备地址。请注意,如果重新插入,设备地址将会发生变化,如果端口对使用的速度感到困惑(例如,一个物理端口最终在一个逻辑总线或另一个逻辑总线上),则可能会发生总线编号。
lsusb-line看起来与此类似: 总线001设备115:ID 4321:fedc bla bla bla
lsusb -v
可能会帮助您找到设备,如果“bla bla bla”不足以提示(有时它既不包含制造商,也不包含手机型号)。
一旦您了解该设备,请亲眼检查相关用户是否真正可以访问ls -a /dev/bus/usb/001/115
!然后检查它是否适用于chmod
并修复您的udev设置。
PS1:/ dev / android_adb只能指向一个设备,因此请确保它能够满足您的需求。
PS2:与此问题无关,但鲜为人知:adb有一个固定的供应商ID列表。这个列表可以从〜/ .android / adb_usb.ini扩展,它应该包含0x4321(如果我们按照上面的示例lsusb行)。 - 此处不需要,因为如果不知道供应商ID,您甚至不会获得“无权限”。答案 7 :(得分:8)
我会在此处附上此附言,以便在我之前的解释中不会丢失。
只需将USB连接类型从Camera(PTP)更改为Media device(MTP),即可可靠地生成并解决无权限问题。摄像头模式允许调试;媒体模式导致ADB中的无权限响应。
在反思一下后,推理似乎很明显。调试器可以在媒体服务器模式下访问设备上的不安全内容。
===========
在您接受调试设备上的RSA加密警告之前,设备将无人值守。在连接后的某个时刻,设备将要求接受调试连接。它是一种最小的安全协议,可确保您可以在初始滑动锁定之外访问设备。我相信需要启用开发者模式。
“无权限”标志实际上是adb将设备识别为有效调试目标的良好第一指示符。请注意,它不会列出您的其他USB设备。
以下及相关页面的详细信息。
答案 8 :(得分:7)
Pipo S1S在升级到4月4日的4.2.2股票后出现同样的问题。
$ 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
答案 9 :(得分:3)
我今天遇到了同样的问题。
我跟着official instructions,但我没有注意到我应该
运行命令
" chmod a + r /etc/udev/rules.d/51-android.rules"
将此文件设置为全球可读且重新插入我的USB电缆后,状态变为未经授权。然后只是授予许可,一切都很顺利。
答案 10 :(得分:3)
有同样的问题。这是udev规则的一个问题。尝试了上面提到的一些规则,但没有解决问题。在这里找到一组规则,https://github.com/M0Rf30/android-udev-rules。按照那里的指南,瞧,固定。
答案 11 :(得分:2)
我同意Robert Siemer和Michaël Witrant。如果它不起作用,请尝试使用strace
strace adb devices
在我的情况下,它有助于终止所有实例并删除套接字文件/tmp/ADB_PORT
(默认为/tmp/5037
)。
答案 12 :(得分:1)
此问题的另一个可能来源是USB网络共享。如果您使用过USB网络共享,请将其关闭,然后从USB上拔下设备,重新插入,然后再进行操作
adb kill-server
adb devices
在我的情况下(Ubuntu 12.04,Nexus S,家庭目录中的SDK,从未需要root来运行它)。根据您的设备,您可能需要以root用户身份运行adb devices
。
答案 13 :(得分:1)
尝试“android update adb”命令。它帮助我使用三星Galaxy装备。
答案 14 :(得分:1)
ls -al /usr/bin/adb
的输出应显示其归用户root
和群组root
所有。您可以使用Linux ACL(访问控制列表)为您的本地用户授予adb
权限,如下所示:
setfacl -m "u:userName:rwx" /usr/bin/adb
这比在/usr/bin/adb
上设置SUID位更受欢迎,并且还限制了可以将adb
用于 userName 和 root 的用户。< / p>
答案 15 :(得分:0)
答案在这里的各个帖子中编织,我会尽我所能,但这看起来是一个非常简单明显的原因。
1)udev规则中通常有一个“user”变量,例如USER =“your_user”,可能就在GROUP =“plugdev”之后
2)您需要为您的设备使用正确的SYSFS {idVendor} ==“####”和SYSFS {idProduct} ==“####”值。如果您有来自多个制造商的设备,比如来自三星和HTC的设备,那么您需要为每个供应商提供一个条目(规则),而不是每个设备的条目,但是对于您将使用的每个不同的供应商,你需要一个HTC和三星的条目。看起来你有三星的入口,现在你需要另一个。记住USER =“your_user”。像Robert Seimer一样使用'lsusb'建议找到idVendor和idProduct,它们通常是这种格式的一些数字和字母X#X#:#X#XI认为第一个是idVendor和第二个idProduct但是你需要为您拥有的每个品牌的手机/平板电脑执行此操作。
3)我还没弄明白51-adb.rules和99-adb.rules是如何不同或为什么。
4)也许尝试使用“usermod -a -G plugdev your_user”将“plugdev”组添加到您的用户,请自行承担风险,尽管我认为它不比以root身份发布gui更好,但我相信如果有必要,你至少应该使用“gksudo eclipse”。
我希望这有助于澄清一些事情,udev规则语法对我来说有点神秘,但从我听到的不同系统可能会有所不同,所以尝试一些事情,一次吃一次,然后注意什么改变有效。
答案 16 :(得分:0)
关闭正在运行adb
,可能正在关闭运行android-studio。
列出设备,
/usr/local/android-studio/sdk/platform-tools/adb devices
答案 17 :(得分:-1)
在THL W100上以root身份运行设备(如上所述)只能与启用网络共享一起工作(我使用了AirDroid)。
答案 18 :(得分:-1)
我有同样的情况,其中三台设备连接到同一台主机,但只有一台设备“没有权限”其他人在线。
在adb上添加SUID或SGID对我来说是另一个问题。每次adb重新启动时,设备都会脱机 - 直到您每次都在设备上确认。
我通过为设备文件添加“o + w”权限解决了这个“无权限”问题。
chmod o + w / dev / bus / usb / 00n / xxx