由于Ubuntu的13.04经由存储访问外部设备MTP应该工作在出厂时就经由GVFS-MTP模块。
虽然这个问题是关于 Galaxy Nexus 的,但也支持其他 Android 设备以及Windows Phone和支持 MTP 的媒体播放器。
有关故障排除,请参阅此 anwser。
我在使用 Galaxy Nexus 通过 MTP 进行文件传输时遇到了很多问题。我使用的是 Kubuntu 11.10 64 位,这就是我所做的和我得到的结果:
在/etc/udev/rules.d/51-android.rules
. 规则如下,适用于adb
:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", MODE="0666", OWNER="leob" #Galaxy Nexus
Run Code Online (Sandbox Code Playgroud)重新启动udev
(和计算机只是为了确保)。
Adb 有效,并且所有通过 MTP 从设备读取的方法似乎都有效(我尝试使用 mtpfs、gmtp 安装并直接使用 mtp-tools 包)。但是,当我尝试写入设备时,我尝试的任何方法都不起作用。
例如,运行mtp-newfolder test_dir 0 0
提供以下输出:
libmtp version: 1.1.0
Device 0 (VID=04e8 and PID=6860) is a Samsung GT-P7510/Galaxy Tab 10.1.
Folder creation failed.
ERROR: Could not close session!
Run Code Online (Sandbox Code Playgroud)
如果我mtp-folders
在没有重新插入设备的情况下运行失败的 mtp-newfolder,我会得到以下输出:
Attempting to connect device(s)
Device 0 (VID=04e8 and PID=6860) is a Samsung GT-P7510/Galaxy Tab 10.1.
PTP_ERROR_IO: failed to open session, trying again after resetting USB interface
LIBMTP libusb: Attempt to reset device
mtp-folders: Successfully connected
Friendly name: (NULL)
Error 1: Get Storage information failed.
Error 2: PTP Layer error 02fe: get_all_metadata_fast(): could not get proplist of all objects.
Error 2: (Look this up in ptp.h for an explanation.)
Error 2: PTP Layer error 02fe: get_handles_recursively(): could not get object handles.
Error 2: (Look this up in ptp.h for an explanation.)
LIBMTP_Get_Storage()
: Resource temporarily unavailable
OK.
Run Code Online (Sandbox Code Playgroud)
在 dmesg 中附有以下内容:
[ 1000.912082] usb 2-4: reset high speed USB device number 7 using ehci_hcd
[ 1001.045877] usb 2-4: usbfs: process 3166 (mtp-folders) did not claim interface 0 before use
Run Code Online (Sandbox Code Playgroud)
有没有人知道该怎么做?
编辑:
我也试过PTP模式。同样,读取工作正常,但我无法向设备写入任何内容。
小智 38
从 Ubuntu 13.04 开始,通过 GVFS-MTP 模块开箱即用地通过 MTP 访问外部设备。
相关问题:是否有计划改进未来 Ubuntu 版本的 mtp 支持?
有关故障排除,请参阅此答案。
对我来说,libmtp
我的系统上没有最新文件是一个问题。所以我解决了这个问题并写了这篇文章来帮助别人。
链接摘要:libmtp
与较旧的 Ubuntu 版本捆绑在一起时存在一个错误。这个错误已经在最新的libmtp
.
des*_*gua 22
您是否在omgubuntu尝试过Bilal Akhtar 的建议?
设置
首先,安装必要的工具 sudo apt-get install mtp-tools mtpfs
将您的 Galaxy Nexus 连接到您的计算机。在您的手机上,打开通知抽屉,然后单击“USB 连接类型”。确保选择了 MTP。
然后,运行这些命令:
mtp-detect | grep idVendor
mtp-detect | grep idProduct
Run Code Online (Sandbox Code Playgroud)
你会得到这样的输出:
现在,运行这些命令:
gksu gedit /etc/udev/rules.d/51-android.rules
Run Code Online (Sandbox Code Playgroud)
Gedit 窗口应该打开。在其中输入此文本,全部在一行中:
SUBSYSTEM=="usb", ATTR{idVendor}=="VENDORID", ATTR{idProduct}=="PRODUCTID", MODE="0666"
Run Code Online (Sandbox Code Playgroud)
替换VENDORID
为idVendor
您之前记下的。同样,替换PRODUCTID
为idProduct
您记下的。就我而言,它们分别是04e8
和685c
,但它们对您来说可能有所不同。
保存并关闭文件。然后,断开手机并运行以下命令:
sudo service udev restart
sudo mkdir /media/GalaxyNexus
sudo chmod a+rwx /media/GalaxyNexus
sudo adduser $USER fuse
Run Code Online (Sandbox Code Playgroud)
$USER
是默认的 shell 变量,应该是您要添加的用户(通常是您自己)。现在,运行此命令:
gksu gedit /etc/fuse.conf
Run Code Online (Sandbox Code Playgroud)
在 Gedit 窗口中,删除#
最后一行(以 开头的那一行#user_allow_other
)的开头,如下所示:
你几乎完成!现在,重新启动计算机,然后运行以下三个命令:
echo "alias android-connect=\"mtpfs -o allow_other /media/GalaxyNexus\"" >> ~/.bashrc
echo "alias android-disconnect=\"fusermount -u /media/GalaxyNexus\"" >> ~/.bashrc
source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)用法
连接您的手机,确保您的手机正在使用 MTP 并运行android-connect
.
瞧!您现在可以使用 Nautilus 浏览您的 Android 手机内容。只需启动文件管理器,然后在侧栏中单击 GalaxyNexus 即可像使用 U 盘一样浏览您的手机内容。您还可以像普通文件系统一样添加、删除和修改文件。
要安全移除手机,只需运行android-disconnect
。
结论
从现在开始,您只需要运行android-connect
以安装手机,然后android-disconnect
安全地取出手机。其他一切都应该自动处理。我尝试了很多方法让安装和卸载在电缆连接时自动发生,但这是我能想出的最佳解决方案。
这两个命令不需要 root 权限即可运行。作为 fuse 用户组成员的所有用户都应该能够在没有 root 访问权限的情况下运行这些命令。
就是这样!您已成功将 Ice Cream Sandwich 手机连接到 Ubuntu 计算机。对于新手来说,这个过程可能很长,但我相信有人会过来为所有这些制作一个 GUI,以便一切顺利进行。:)
Liv*_*eBT 22
由于 Ubuntu 13.04 存储对支持 MTP 的设备的访问通过GVFS后端开箱即用。请查看是否有计划改进未来 Ubuntu 版本的 mtp 支持?13.04 之前的安装说明。
此解决方案应该适用于所有提供 MTP 功能的Android 设备以及可能所有具有 MTP 功能的非 Android 设备,例如Windows Phones和Portable Media Players。
有一些困惑,让我们试着澄清一下:
你并不需要做任何可能导致保修失效!
解锁仅指此答案中的操作系统锁屏。
您不需要通过某些 udev 规则配置开发人员对您设备的访问权限,例如 ADB、fastboot 或类似内容。(您可以在配置 USB 访问her e或 her e一章中找到有关 Android 的说明。)
据我所知,您也不需要 FUSE 或配置与 FUSE 相关的选项。
我无法将文件放到设备上。
您的设备必须解锁才能通过 MTP 使用 Ubuntu 访问设备的存储。
我收到一条错误消息,指出无法安装设备。
如果您收到以下错误消息,请尝试重新插入设备一次。
如果错误消息再次出现,请从启动器打开一个新的 nautilus 窗口(最好通过单击设备图标)并可能关闭当前的 nautilus 窗口。可能相关:如何创建 udev 规则以禁用其中一台 Android 设备?
检查您的设备是否有 udev 规则
打开终端并输入lsusb
. 在输出中找到您的设备并记下 ID(例如0fce:01b1
)。第一部分是供应商 ID,最后一部分是产品 ID。
使用nano /lib/udev/rules.d/69-libmtp.rules
并搜索您的产品 ID(使用Ctrl+ W)打开相应的 mtp udev 规则文件。如果找不到,则必须按照/etc/udev/rules.d/69-libmtp.rules
以下模式创建自定义条目并重新启动。
# SONY Xperia Z2 MTP
ATTR{idVendor}=="01b1", ATTR{idProduct}=="01b1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
Run Code Online (Sandbox Code Playgroud)
如果这对您有用,您应该考虑针对libmtp 包(更准确地说是libmtp-common)提交错误,以便将您的设备包含在未来版本中。
我还是连接不上
您的设备要么不受底层支持,libmtp
要么您可能会遇到与我的 Lumia 620 相同的问题,请按照我在LP#1247572 中发布的解决方法(重现步骤)进行操作:Nokia Lumia 620 (WP8) 无法通过以下方式可靠安装鹦鹉螺中的 gvfs-mtp。(该设备在这里仍然无法正常工作,但使用mtp-detect
帮助。)
您应该为您的设备搜索libmtp 错误跟踪器,并按照项目页面上新设备的说明打开错误报告。
错误跟踪器将我的设备列为受支持的设备,但它仍然无法正常工作
在某些情况下,有关您的设备的错误报告可能已经在比您的发行版(例如:Motorola Moto G)更新的 libmtp 版本中归档和解决。如果是这种情况,您将不得不等待官方存储库更新或寻找更新的 PPA。
可以在此处找到通过官方 Ubuntu 软件渠道和私有 PPA 提供的所有 libmtp 版本的更新列表(确保在不受信任的档案中展开“libmtp”的其他版本)。截至2014 年 2 月 13 日,Matthieu Baerts 的PPA提供了适用于 Ubuntu 的最新 libmtp 包。
警告:此 PPA 包含各种不同且可能不稳定的软件包。我建议不要将其添加到您的系统中。相反,您可以单独下载 libmtp 软件包并在您的系统上手动安装它们。
在进一步行动之前,请先熟悉PPA 及其风险。在继续执行以下步骤之前,还请阅读以下有关恢复原始软件包的段落:
下载以下软件包:libmtp-common
、libmtp-runtime
、libmtp9
、mtp-tools
。确保为您的系统选择正确的架构(通常为amd64
)。
以下是截至2014 年 2 月 13日的软件包链接:libmtp-common、libmtp-runtime、libmtp9、mtp-tools
继续使用 dpkg 手动安装更新的软件包(更改$HOME/Downloads
到您的下载文件夹并确保不存在其他 deb 文件:
cd "$HOME/Downloads"
sudo dpkg -i *.deb
Run Code Online (Sandbox Code Playgroud)成功安装所有内容后,重新启动计算机,解锁您的 Android 设备,通过 USB 连接它,它应该会显示在您的文件管理器中。
这对我 (@Glutanimate) 和我的摩托罗拉 Moto G 来说效果很好。因为我运行的是 Ubuntu 12.04 LTS,所以我首先必须安装gnome-gvfs
. 有关详细信息,请参阅顶部13.04 之前的安装说明。
如果出现问题或设备仍然无法识别,要撤消更改,您必须手动安装原始软件包。前往libmtp 源代码概览并找到您的 Ubuntu 版本。展开有问题的条目并继续下载软件包,就像您之前在第 2 步中所做的那样。按照步骤 3 中的说明继续安装并重新启动系统。现在一切都应该恢复正常了。
所有基于 的程序libmtp
似乎仍然与 Galaxy Nexus 有问题(从 libmtp 1.1.3 开始)。基于gphoto2
为我工作的程序。
我个人正在使用gphotofs
,可在同名包中使用。
使用gphotofs ~/mymountpoint
安装,然后fusermount -u ~/mymountpoint
卸载时,即可大功告成。
归档时间: |
|
查看次数: |
199692 次 |
最近记录: |