使启用MTP的设备可以与Ubuntu一起使用?


69

由于Ubuntu的13.04经由存储访问外部设备MTP应该工作开箱经由GVFS-MTP模块。

尽管此问题与Galaxy Nexus有关,但也支持其他Android设备以及Windows Phone和启用MTP的媒体播放

有关故障排除,请参阅此答案


我在使用Galaxy Nexus通过MTP进行文件传输时遇到很多问题。我正在使用Kubuntu 11.10 64位,这是我所做的以及得到的结果:

  1. 在中为设备添加了规则/etc/udev/rules.d/51-android.rules。该规则如下并适用于adb

    SUBSYSTEMS=="usb", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", MODE="0666", OWNER="leob" #Galaxy Nexus
    
  2. 重新启动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-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.

在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模式。同样,阅读工作正常,但我无法向设备写入任何内容。


我不认为它是三星...。我认为它是Android。我的蜂窝供电设备与只需要使用MTP的方式完全相同。我认为这就是所有发布2.3版Android设备的方式。

Answers:


37

从Ubuntu 13.04开始,通过GVFS-MTP模块即可通过MTP对外部设备进行存储访问。

相关问题:是否有计划在未来的Ubuntu版本中改善mtp支持?

有关故障排除,请参见此答案


对我来说,这是libmtp我的系统上没有最新文件的问题。所以我解决了这个问题,并写这篇文章来帮助别人

链接摘要:libmtp与较早的Ubuntu版本捆绑在一起存在一个错误。此错误已在的最新源中修复libmtp


1
这个问题似乎在Ubuntu 12.04的软件包中已解决,因此如果您足够勇敢,可以使用那些软件包。我从launchpad.net/ubuntu/+source/libmtp/1.1.1-1抓取了它们,并为系统创建了软件包(与gmtp相同)
Tatu Lahtela 2011年

@香农 谢谢。这是最好的解决方案。希望我先找到它。
MountainX

2
rhythmbox仍然冻结,并在尝试访问联系时出现错误(LIBMTP_Send_Representative_Sample():无法获取对象信息。),而鹦鹉螺提示:无法安装Galaxy Nexus;初始化相机时出错:-60:无法锁定设备。便便。
waspinator

最好更新说明以获取最新的mtp,而不是1.1.1
Kostiantyn

21

您是否在omgubuntu尝试了Bilal Akhtar的建议?

使用MTPFS将Android手机或平板电脑连接到Ubuntu

  1. 设定

    首先,使用以下命令安装必要的工具 sudo apt-get install mtp-tools mtpfs

    将您的Galaxy Nexus连接到计算机。在您的手机上,打开通知抽屉,然后单击“ USB连接类型”。确保选择了MTP。

    该图显示了Android USB连接设置

    然后,运行以下命令:

    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"
    

    替换VENDORIDidVendor您先前记下的内容。同样,PRODUCTIDidProduct您记下来的内容替换。就我而言,它们分别是04e8685c,但是对于您来说它们可能有所不同。

    保存并关闭文件。然后,断开手机并运行以下命令:

    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)开头的,如下所示:

    在此处输入图片说明

    你几乎完成!现在,重新启动计算机,然后运行以下三个命令:

    echo "alias android-connect=\"mtpfs -o allow_other /media/GalaxyNexus\"" >> ~/.bashrc
    echo "alias android-disconnect=\"fusermount -u /media/GalaxyNexus\"" >> ~/.bashrc
    source ~/.bashrc
    
  2. 用法

    连接手机,确保手机正在使用MTP并运行android-connect

    瞧!您现在可以使用Nautilus浏览Android手机的内容。只需启动文件管理器,然后在侧栏中单击GalaxyNexus即可浏览电话内容,就像使用USB记忆棒一样。您也可以像添加普通文件系统一样添加,删除和修改文件。

    Nautilus显示电话内容的屏幕截图

    要安全地取下电话,只需运行android-disconnect

  3. 结论

    从现在开始,您只需要运行android-connect安装电话,然后android-disconnect安全地卸下电话。其他所有内容应自动处理。我尝试了多种方法来使安装和卸载在电缆连接上自动进行,但这是我能想到的最佳解决方案。

    这两个命令不需要root权限即可运行。属于熔丝用户组的所有用户都应能够运行这些命令而无需root用户访问权限。

    而已!您已成功将Ice Cream Sandwich手机连接到Ubuntu计算机。对于一个新手来说,这个过程可能很长,但是我敢肯定有人会来为这一切做一个GUI,以便一切顺利进行。:)


是的,已经尝试了使用mtpfs-tools的大多数方法。香农发现,这显然是libmtp中的错误。
Leo

它有效,但是我有一些疑问。1. udev配置有什么作用,如果没有它,它为什么不起作用?2.通过什么魔术,您知道在安装时要安装哪个设备mtpfs,或者一次仅支持一台已连接的设备?
Bart van Heukelom'3

同样,在复制大型文件(使用Nautilus)时,复制速度似乎非常快(50MB / s),但是在此期间它不会复制任何内容。仅当进度条达到100%时,它才会启动真实副本(并且界面将挂起)。也许可以禁用某种缓冲区选项?
巴特·范·海克洛姆

不幸的是,我不知道您想要的答案。对不起。
desgua 2012年

完成所有这些操作,但在尝试进行android-connect时收到此消息:fusermount:无法打开/etc/fuse.conf:权限被拒绝的fusermount:选项allow_other仅当在/etc/fuse.conf中设置了'user_allow_other'时才允许尽管我按照指示编辑了/etc/fuse.conf。
德米特里·谢韦多夫

21

通过MTP和GVFS连接设备

自从Ubuntu 13.04起,就可以通过GVFS后端对具有MTP功能的设备进行存储访问。请查看是否有计划在未来的Ubuntu版本中改善mtp支持?13.04之前的安装说明。

该解决方案应适用于所有提供MTP功能的Android设备,并且可能适用于所有具有MTP功能的非Android设备,例如Windows PhonePortable Media Player

不要困惑

出现了一些混乱,让我们尝试清除问题:

  • 并不需要做任何可能导致保修失效!

    • 您不需要植根设备。
    • 您无需解锁引导加载程序。(您可以找到有关Android her e的说明。)

    解锁仅指此答案中的操作系统锁屏。

  • 您无需通过某些udev规则配置开发人员对设备的访问权限,例如ADB,fastboot或类似功能。(你可以找到章Android版的说明配置USB访问é或她ē)。

  • 据我所知,您也不需要FUSE或配置与FUSE相关的选项。

解决问题

  1. 我无法将文件放到设备上。

    您的设备必须已解锁才能通过MTP使用Ubuntu来访问设备的存储。

    显示鹦鹉螺处于锁定和解锁状态的设备

  2. 我收到一条错误消息,指出无法安装该设备。

    如果收到以下错误消息,请尝试重新插入设备一次

    连接时可能弹出的错误消息

    如果错误消息再次出现,请从启动器中打开一个新的Nautilus窗口(最好单击设备图标),并可能关闭当前的Nautilus窗口。可能相关:如何创建udev规则以禁用其中一台Android设备?

  3. 检查您的设备是否有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以下模式创建一个自定义条目,然后重新启动

    # 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提交错误,以使您的设备包含在将来的版本中(如果这对您有用)。

  4. 我仍然无法连接

    您的设备不受基础支持,libmtp或者您可能遇到与Lumia 620相同的问题,请按照我在LP#1247572中发布的解决方法(重现步骤)进行操作:诺基亚Lumia 620(WP8)无法通过以下方式可靠地安装nautilus中的gvfs-mtp。(该设备在这里仍然无法正常运行,但可以使用mtp-detect帮助。)

    您应该在libmtp错误跟踪器中搜索您的设备,并按照项目页面上有关新设备的说明打开错误报告。

  5. 错误跟踪器将我的设备列为受支持的设备,但仍然无法正常工作

    在某些情况下,与您的设备有关的错误报告可能已经在libmtp发行版中(而不是与发行版一起提供的版本)提交和解决(例如:Motorola Moto G)。如果是这种情况,您要么必须等待官方存储库进行更新,要么就去寻找更新的PPA。

    您可以在此处找到通过官方Ubuntu软件渠道和私有PPA提供的所有libmtp版本的更新列表(请确保在不受信任的档案中展开“ libmtp”的其他版本)。从2014/02/13开始, Mattaeueu Baerts的PPA提供了可用于Ubuntu的最新libmtp软件包。

    警告:此PPA包含各种不同的和可能不稳定的软件包。我建议不要将其添加到您的系统中。相反,您可以单独下载libmtp软件包,然后在系统上手动安装它们。

    在继续之前,请先熟悉PPA及其风险。在继续执行以下步骤之前,还请阅读以下有关恢复原始软件包的段落:

    1. 前往PPA软件包详细信息页面,并展开libmtp条目
    2. 下载下面的包:libmtp-commonlibmtp-runtimelibmtp9mtp-tools。确保为您的系统选择正确的体系结构(通常为amd64)。

      以下是截至2014/02/13的软件包链接:libmtp-commonlibmtp-runtimelibmtp9mtp-tools

    3. 继续使用dpkg手动安装更新的软件包(更改$HOME/Downloads为下载文件夹,并确保没有其他deb文件存在:

      cd "$HOME/Downloads"
      sudo dpkg -i *.deb
      
    4. 一切安装成功后,重新启动计算机,解锁Android设备,通过USB连接它,它应该会显示在文件管理器中。

    我的Motorola Moto G对我(@Glutanimate)来说效果很好。因为我正在运行Ubuntu 12.04 LTS,所以我首先必须安装的更新版本gnome-gvfs。有关更多信息,请参阅顶部13.04之前的安装说明

    要在出现问题或仍无法识别设备时撤消更改,则必须手动安装原始软件包。转到libmtp源概述并找到您的Ubuntu版本。展开有问题的条目,然后继续下载软件包,就像之前在第2步中所做的一样。按照步骤3中所述继续安装,然后重新引导系统。现在一切应该恢复正常了。


1
+1“不要混淆”虽然不适用于我的s3迷你银河:(
雨果·德·汉格里2014年

适用于装有Android 4.1.2的Samsung Galaxy平板电脑,但我不能在旅途中编辑文件。您也有解决方案吗?
Vesnog 2014年

“有些指南建议将udev规则添加到名为51-android.rules的文件中。这些规则不适用于MTP,...” 当您那样说时,您失去了所有信誉。udev / rules.d /中的规则完全灵活。51-android-rules非常适合他们。您可能同样合理地将该规则纳入了52个电话规则中
Auspex

@Auspex该行本来可以写得更好,但您可以这样做(而不是抱怨)(这需要阅读并理解整个文章),或者提供更好的答案。查看您的个人资料,我想您知道SE网站应该如何工作。如何(错误)管理文件/etc完全取决于您。如上所述,理想情况下,应为所有udev规则提供ootb。如果不是,应该提交一个错误以将缺少的规则包括在中/lib/.../69-libmtp.rules,以便每个人都对下一个版本感到满意。
LiveWireBT 2014年

1
@Auspex我不明白您要在这里实现的目标。我再说一遍:如何管理文件/etc由您决定。/lib/udev/rules.d/69-libmtp.rules是软件包维护者选择的,我建议为遇到此问题的用户针对该软件包提交错误(我已更新答案)。如果您仍然对此有疑问,请与维护人员联系或发表您自己的答案。我现在不愿与您就这个话题进行对话。
LiveWireBT 2014年

5

所有基于的程序libmtp似乎仍然与Galaxy Nexus(从libmtp 1.1.3开始)存在问题。基于对gphoto2我有用的程序。

就我个人而言,我正在使用gphotofs,该软件包具有相同的名称。

gphotofs ~/mymountpoint完成安装后,使用进行安装fusermount -u ~/mymountpoint和卸载。


刚升级到12.04,看来libmtp 1.1.3不能像您所说的那样正常工作。将不得不对此进行更多调查。gphotofs运行正常,但是感谢您的建议!
2012年

1
使用gphotofs使我只有一个空目录。
内森·奥斯曼

4

安装以下内容并重新启动:

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

是的,这个答案也适用于“ Ubuntu 13.04 [及更高版本;其中]应该通过GVFS-MTP模块对通过MTP对外部设备的存储访问开箱即用”。因为它可能不是开箱即用的。即使您的MTP设备已经以某种方式自动安装!(但是给您只读访问权限或其他问题。)
tanius

1
@tanius我必须说MTP太慢了,以至于我不再使用它了。esfile Explorer具有ftp服务器,我只是使用curl将文件上传到本地网络上的设备。
mchid

该命令指出了问题的根源:The following packages have unmet dependencies: gvfs-backends : Depends: gvfs (= 1.28.2-1ubuntu1~16.04.2) but 1:1.20.3-4salbabix27trusty is to be installed Depends: gvfs-daemons (= 1.28.2-1ubuntu1~16.04.2) Depends: gvfs-libs (= 1.28.2-1ubuntu1~16.04.2) but 1:1.20.3-4salbabix27trusty is to be installed Depends: gvfs-common (= 1.28.2-1ubuntu1~16.04.2) but 1:1.20.3-4salbabix27trusty is to be installed E: Unable to correct problems, you have held broken packages.
NoBugs

1
您应该注意的是,当上述操作失败时,请使用sudo apt-get install --reinstall删除并重新安装“ ubuntu-desktop”及以上版本。然后重新启动。
NoBugs

0

第一步,我将安装jmtpfssudo apt-get install jmtpfs在终端- Ctrl+ Alt+中T),然后使用创建一个文件夹,mkdir foldername然后使用安装该设备jmtpfs foldername,然后转到nautilus(文件)。

如果您的设备与libmtpubuntu中的版本不兼容。您必须下载并构建最新版本libmtp(> 1.1.12),例如: 如何安装最新版本的libmtp?

您还应该能够mtp-folders在终端或图形界面中使用文件夹gmtp

如果在不使用sudo以下命令的情况下运行上述步骤,则可能会显示错误:

libusb_open() failed!: Permission denied

为避免使用sudo,应按上述方法将设备添加到/etc/udev/rules.d/51-android.rules文件中(请参阅desgua),然后重新加载规则或重新启动。


-1

只需执行一个较小的解决方法,即可将基于ICS的电话与良好的旧MASS STORAGE连接起来http://forum.xda-developers.com/showthread.php?t=1556367

adb install UMS1.0.apk

1
尽管这对于某些手机来说是一个很好的解决方案,但仅在手机具有单独的SD卡的情况下才有效。关于原始问题,这不适用于Galaxy Nexus。
Covernail 2012年

即使有单独的SD卡,我也不认为在较新版本的Android上安装大容量存储设备是不可行的。虽然,“某处总是有后门”,所以我不会说这是不可能的。
mchid '16

那是4年前;)
jflaflamme's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.