当前位置: 首页>>技术教程>>正文


让支持MTP的设备可以与Ubuntu一起使用?

,

问题描述

Since Ubuntu 13.04 storage access to external devices via MTP is supposed to work out of the box via a GVFS-MTP module.

While this question is about the Galaxy Nexus, other Android devices as well as Windows Phones and MTP enabled media players are also supported.

For troubleshooting see this anwser.


file-transfers使用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!

如果我在没有re-plugging的设备上运行失败的mtp-newfolder后运行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模块开箱即用。

相关问题:Are there any plans to improve mtp support on future Ubuntu releases?

有关故障排除,请参阅this answer


对我而言,这是我的系统中没有最新的libmtp文件的问题。所以我解决了这个问题并制作了this write-up to help others

链接摘要:libmtp与旧版Ubuntu发行版捆绑在一起。该错误已在libmtplatest source中修复。

次佳解决思路

您是否曾在omgubuntu尝试Bilal Akhtar’s建议?

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

  1. 建立

    首先,使用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替换为您之前记下的idVendor。同样,将PRODUCTID替换为您记下的idProduct。在我的情况下,他们分别是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棒一样浏览手机内容。您也可以像正常文件系统一样添加,删除和修改文件。要安全地移除手机,只需运行android-disconnect即可。

    mtp,ubuntu

  3. 结论从现在开始,您只需运行android-connect即可安装手机,然后再安装android-disconnect以安全地取出手机。其他一切都应该自动处理。我尝试了很多方法让电缆连接上的挂载和卸载自动发生,但这是我能想到的最佳解决方案。这两个命令不需要root权限来运行。所有属于熔断器用户组成员的用户都应该能够在无root权限的情况下运行这些命令。而已!您已成功将您的冰淇淋三明治手机连接到您的Ubuntu电脑。这个过程对于一个新手来说可能会很长,但我相信有人会来这里为所有这些做一个GUI,这样一切都会顺利进行。 🙂

第三种解决思路

通过MTP与GVFS连接设备

由于通过GVFS后端,Ubuntu 13.04存储访问支持MTP的设备即可使用。请在13.04之前查看Are there any plans to improve mtp support on future Ubuntu releases?的安装说明。

该解决方案适用于所有提供MTP功能的Android设备,并可能适用于所有带MTP功能的non-Android设备,如Windows手机和便携式媒体播放器。

不要混淆

出现了一些混乱,让我们试着清理一下:

  • 您不需要做任何可能导致保修失效的事情!

    • 您不需要为您的设备创建根目录。

    • 您不需要解锁引导加载程序。 (您可以在Android上查找她的e说明。)

    解锁只是指这个答案中的操作系统锁屏。

  • 您不需要通过特定的udev规则来配置开发人员对设备的访问权限,如ADB,fastboot或类似的东西。 (您可以在她的e或她的e配置USB访问一章中找到有关Android的说明。)

  • 据我所知,你也不需要FUSE或配置FUSE-related选项。

问题排查

  1. 我无法将文件放到设备上。您的设备必须解锁才能通过MTP通过Ubuntu访问设备的存储。

    mtp,ubuntu

  2. 我收到一条错误消息,指出该设备无法安装。如果您收到以下错误消息,请尝试重新插入设备一次。如果错误消息再次出现,从启动器打开一个新的nautilus窗口(最好通过单击设备图标),并可能关闭当前的nautilus窗口。可能相关:How create a udev rules to disable one of Android devices?

    mtp,ubuntu

  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 package(更准确地说是libmtp-common)提交一个错误,以便将您的设备包含在将来的版本中,如果这对您有用。

  4. 我仍然无法连接您的设备要么不被底层的libmtp支持,要么您可能会遇到与我的Lumia 620相同的问题,请按照我发布在LP#1247572: Nokia Lumia 620 (WP8) fails to mount reliably via gvfs-mtp in nautilus中的解决方法(重现步骤)进行操作。 (该设备在这里仍然无法正常工作,但使用mtp-detect有帮助。)您应该搜索设备的libmtp bug tracker,并按照the project page上新设备的说明打开错误报告。

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

    在某些情况下,与您的设备有关的错误报告可能已经提交并在最近的libmtp版本中解决,而不是您的分发版本(例如:Motorola Moto G)。如果是这种情况,您将不得不等待官方存储库得到更新或寻找更新的PPA。

    可以通过官方Ubuntu软件频道和私人PPA获得所有libmtp版本的更新列表,可以找到here(确保在不受信任的存档中扩展其他版本的’libmtp’)。截至2014年2月13日,Matthieu Baerts提供的this PPA为Ubuntu提供了最新的libmtp软件包。

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

    在进一步移动之前,请熟悉什么是PPA,我如何使用它们?。在继续下面的步骤之前,请阅读下面关于恢复原始包装的段落:

    1. 前往package detail page of the PPA并展开libmtp条目

    2. 下载以下软件包:libmtp-commonlibmtp-runtimelibmtp9mtp-tools。确保为您的系统选择正确的体系结构(这通常是amd64)。以下是截至2014年2月13日的包装链接:libmtp-commonlibmtp-runtimelibmtp9mtp-tools

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

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

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

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

第四种思路

所有基于libmtp的程序在Galaxy Nexus上似乎都存在问题(从libmtp 1.1.3开始)。基于gphoto2的程序适用于我。

就我个人而言,我使用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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1025.html,未经允许,请勿转载。