让支持MTP的设备与Ubuntu一起使用?
由于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
-
重启
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!
如果我在mtp-folders
失败后运行mtp-folders
而没有重新插入设备,我得到以下输出:
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.
在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
有没有人知道该怎么办?
编辑:
我也尝试过PTP模式。 再次,阅读工作正常,但我不能写任何东西到设备。
从Ubuntu 13.04开始,通过MTP对外部设备的存储访问通过GVFS-MTP模块开箱即用。
相关问题: 有没有计划在未来的Ubuntu版本上改进mtp支持?
有关故障排除,请参阅此答案 。
对我来说,问题是我的系统上没有最新的libmtp
文件。 所以我解决了这个问题并写了这篇文章来帮助别人 。
链接摘要:与旧的Ubuntu版本捆绑在一起的libmtp
存在一个错误。 这个错误已在最新的libmtp
源中libmtp
。
你有没有尝试过Bilal Akhtar在omgubuntu 的建议?
使用MTPFS将您的Android手机或平板电脑连接到Ubuntu
-
建立
首先,使用
sudo apt-get install mtp-tools mtpfs
将Galaxy Nexus连接到您的计算机。 在手机上,打开通知抽屉,然后单击“USB连接类型”。 确保选择了MTP。
然后,运行以下命令:
mtp-detect | grep idVendor mtp-detect | grep idProduct
你应该得到这样的输出:
现在,运行以下命令:
gksu gedit /etc/udev/rules.d/51-android.rules
Gedit窗口应该打开。 在其中键入此文本,所有内容都在一行中 :
SUBSYSTEM=="usb", ATTR{idVendor}=="VENDORID", ATTR{idProduct}=="PRODUCTID", MODE="0666"
将
VENDORID
替换为您之前记下的VENDORID
。 同样,将PRODUCTID
替换为您记下的idProduct
。 就我而言,他们分别是04e8
和685c
,但他们可能会有所不同。保存并关闭文件。 然后, 断开手机并运行以下命令:
sudo service udev restart sudo mkdir /media/GalaxyNexus sudo chmod a+rwx /media/GalaxyNexus sudo adduser $USER fuse
$USER
是一个默认的shell变量,应该是您要添加的用户(通常是您自己)。 现在,运行以下命令:gksu gedit /etc/fuse.conf
在Gedit窗口中,删除最后一行开头的
#
(以#user_allow_other
开头的#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
-
用法
连接手机,确保手机正在使用MTP并运行
android-connect
。瞧! 您现在可以使用Nautilus浏览您的Android手机内容。 只需启动文件管理器,然后在侧栏中单击GalaxyNexus即可浏览手机内容,就像使用USB记忆棒一样。 您也可以像普通文件系统一样添加,删除和修改文件。
要安全地删除手机,只需运行
android-disconnect
。 -
结论
从现在开始,你只需要运行
android-connect
来安装你的手机然后android-disconnect
来安全地删除你的手机。 其他一切都应该自动处理。 我尝试了许多方法来使安装和卸载在电缆连接上自动发生,但这是我能想到的最佳解决方案。这两个命令不需要root权限即可运行。 作为fuse用户组成员的所有用户都应该能够在没有root访问权限的情况下运行这些命令。
而已! 您已成功将Ice Cream Sandwich手机连接到Ubuntu电脑。 对于一个新手来说,这个过程可能很长,但我相信有人会来为所有这些做一个GUI,以便一切顺利进行。 🙂
通过MTP与GVFS连接设备
由于Ubuntu 13.04存储访问支持MTP的设备通过GVFS后端开箱即用 。 请看看有没有计划在未来的Ubuntu版本上改进mtp支持? 有关13.04之前的安装说明。
此解决方案适用于所有提供MTPfunction的Android设备 ,可能适用于所有具有MTPfunction的非Android设备,如Windows Phone和Portable Media Players 。
不要混淆
有一些混乱,让我们试着清理一下:
-
您不需要做任何可能使保修失效的事情!
- 您无需root设备。
- 您无需解锁引导加载程序。 (您可以在Android上找到Android的说明。)
解锁只是指这个答案中的操作系统锁屏。
-
您无需通过某些udev规则配置开发人员对设备的访问权限,如ADB,fastboot或类似的东西。 (您可以在“ 配置USB访问她或她的电子邮件”一章中找到有关Android的说明。)
-
据我所知,您也不需要FUSE或配置与FUSE相关的选项。
疑难解答问题
-
我无法将文件放到设备上。
必须解锁您的设备才能通过MTP使用Ubuntu访问设备的存储。
-
我收到一条错误消息,指出无法安装该设备。
如果您收到以下错误消息,请尝试重新插入设备一次 。
如果再次出现错误消息,请从启动器打开一个新的nautilus窗口(最好通过单击设备的图标),然后关闭当前的nautilus窗口。 可能相关: 如何创建一个udev规则来禁用其中一个Android设备?
-
检查您的设备是否有udev规则
打开终端并输入
lsusb
。 在输出中找到您的设备并记下ID(例如0fce:01b1
)。 第一部分是供应商ID,产品ID的最后一部分。使用
nano /lib/udev/rules.d/69-libmtp.rules
打开相应的mtp udev规则文件,然后搜索产品ID(使用Ctrl + W )。 如果找不到,则必须/etc/udev/rules.d/69-libmtp.rules
以下模式在/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"
您应该考虑针对libmtp软件包 (更准确地说是libmtp-common ) 提交错误 ,以便将您的设备包含在未来版本中(如果这对您有用 )。
-
我仍然无法连接
底层
libmtp
不支持您的设备,或者您可能遇到与Lumia 620相同的问题,请按照我在LP#1247572中发布的解决方法(重现步骤) :诺基亚Lumia 620(WP8)无法可靠地安装通过nautilus中的gvfs-mtp 。 (这里的设备仍然无法正常工作,但使用mtp-detect
帮助。)您应该搜索设备的libmtp错误跟踪器 ,并按照项目页面上新设备的说明打开错误报告。
-
错误跟踪器将我的设备列为支持,但仍然无效
在某些情况下,有关您设备的错误报告可能已经在最新的libmtp版本中提交并解决,而不是您的发行版附带的版本(例如: Motorola Moto G )。 如果是这种情况,您将不得不等待官方存储库更新或寻找更新的PPA。
可以在此处找到通过官方Ubuntu软件渠道和私有PPA提供的所有libmtp版本的更新列表(确保在不受信任的存档中展开“libmtp”的其他版本 )。 截至2014/02/13,Matthieu Baerts提供的这个PPA为Ubuntu提供了最新的libmtp软件包。
警告 :此PPA包含各种不同且可能不稳定的包。 我建议不要将它添加到您的系统中。 相反,您可以单独下载libmtp软件包并在系统上手动安装它们。
在进一步了解之前,请熟悉PPA及其风险 。 在继续执行以下步骤之前,请阅读以下有关恢复原始包的段落:
- 前往PPA的包详细信息页面并展开libmtp条目
-
下载以下软件包:
libmtp-common
,libmtp-runtime
,libmtp9
,mtp-tools
。 确保为您的系统选择正确的架构(通常是amd64
)。以下是截至2014/02/13的软件包链接: libmtp-common , libmtp-runtime , libmtp9 , mtp-tools
-
继续使用dpkg手动安装更新的软件包(将
$HOME/Downloads
更改$HOME/Downloads
下载文件夹,并确保不存在其他deb文件:cd "$HOME/Downloads" sudo dpkg -i *.deb
-
一切安装成功后,重新启动计算机,解锁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
。
使用gphotofs ~/mymountpoint
挂载,然后在完成后使用fusermount -u ~/mymountpoint
卸载。
安装以下并重新启动:
sudo apt-get install gvfs-backends mtpfs jmtpfs libmtp-common mtp-tools libmtp-dev libmtp-runtime libmtp9 gmtp libdbus-cpp5 libgflags2v5 libgoogle-glog0v5 libmtp-dbg libmtp-doc libmtpserver-dev libmtpserver1 libprocess-cpp3 mtp-server
作为第一步,我将安装jmtpfs
(终端中的sudo apt-get install jmtpfs
– Ctrl + Alt + T ),然后使用mkdir foldername
创建一个文件夹,然后使用jmtpfs foldername
挂载设备,然后转到nautilus(Files)。
如果您的设备与ubuntu中的libmtp
版本不兼容。 您必须下载并构建最近的libmtp
(> 1.1.12),如下所示: 如何安装最新版本的libmtp?
您应该能够在终端中使用mtp-folders
或使用图形界面gmtp
查看文件夹。
如果您在没有sudo
情况下运行它们,之前的步骤可能会显示错
libusb_open() failed!: Permission denied
要避免使用sudo,您应该将设备添加到上面的/etc/udev/rules.d/51-android.rules
文件中并重新加载规则或重新启动。
只需一个小的解决方法,将基于ICS的手机连接到良好的旧版MASS STORAGE http://forum.xda-developers.com/showthread.php?t=1556367
adb install UMS1.0.apk