Linux MTP 的故事

csslayer | 2012/10/04

Linux下面有许许多多糟糕的故事,输入法算是其中之一,不过今天我们要讲的是另外一个故事。

这个故事本质上和KDE关系不大,不过也算让我纠结了许久了。

首先来介绍一下MTP,MTP是Media Transfer Protocol的缩写,由Microsoft设计并在Windows Media Player中引入,之前曾经有一个协议是PTP,缩写是Picture Transfer Protocol,PTP被设计为传输图片而MTP主要被设计为传输媒体。有些人可能想问了,和移动设备传输文件的话,直接用挂载USB存储的方式就好了,何必用一个特殊的协议呢?挂载的方式将会独占设备上的某个分区,如果你在这个时候使用手机的话,可以注意到某些程序提示在挂载时无法使用。

MTP和PTP表现为一个文件系统,而不是一个块设备(你需要在块设备上建立文件系统才能使用),因此避免了USB存储方式访问的问题。

但是相对带来的一些缺点就是需要有人来实现对他们的支持。有些设备只提供了MTP的访问方式从而来避免使用FAT32的专利问题。

那么我们回到MTP的Linux的支持上,Linux的MTP支持是通过libmtp来实现的,但这玩意如果能在你系统上正常工作,你应该已经要谢天谢地了。

按道理我的N9是应该支持MTP的,但几乎从来没工作过。首先遇到的第一个问题是权限问题,你没有权限去访问这个设备。这个某种意义上可以用一些 udev rules来workaround,虽然还不知道那些所谓“正确”的做法是什么,不过自己的电脑先这么凑合好了。但是接下来就是所有对mtp的调用都stuck在某个地方,今天我非常蛋疼的去libmtp的代码库看了看README,然后看到了这么一句话:

  • mtp-* tools doesn’t work because someone else is already hogging the device

简单来说,就是你必须保证对设备的独占访问。我的n9插上之后nm就会自动连接一个以太网设备。于是我终于意识到我应该把它断掉才有希望访问mtp。

然后通过kio mtp,我终于看到了手机上的文件……我都要泪流满面了。

然后你就会悲剧的发现,你没法同时访问一个设备,即使是MTP访问,同时也只能进行一个,研究许久也不知是mtp协议的限制,还是设备的限制,还是libmtp的限制。如果继续翻阅MTP的README,还会发现各种各样设备奇葩的行为,不如说这个协议本身也命途多舛……

[1] http://en.wikipedia.org/wiki/Media_Transfer_Protocol

Tags:

18 FEEDBACKS

  1. “有很多糟糕的故事”哎呀好像很糟糕呢…(喂喂不要往奇怪的地方想啊) 诶…我都是用SSH来给N9传文件呢。感觉挺好的呀。 dolphin的fish做得也不错。我把手机的wlan固定ip和usb的固定ip都记在dolphin里当快捷方式了,还挺好的。

  2. fish 多慢……用sftp啊。

  3. Ma Xiaojun

    你用非mass storage的方式访问N9?

  4. rcher

    https://github.com/hanwen/go-mtpfs 强烈推荐试一下这个 !!!!

  5. tmk

    amarok 的MTP插件好像也完全不管用

  6. 還好啦,巨硬自家的 Zune 用的 mtp 還有些不同,就算裝了 libmtp-zune 我的 wp7 手機接上也只能識別設備和剩餘空間看不到東西

  7. KDE 4.10 预览 | I, KDE

  8. Justin Wong
  9. jun4rui

    真要用的,mtpfs也是不行的,这东东也是基于libmtp的。我现在换用adb方式管理Android手机了。现在有个QtAdb,图形UI做的不错,功能类似豌豆荚,不过开发者11年放弃扔源代码到github上了,对中文支持渣。

  10. 现在应该好多了吧。毕竟已经两年过去了啊。

  11. 目前 KDE4 上 mtp 也就相当于相机连接,连接后只能复制出文件,别的都不能操作。 悲剧的是 WIN 上可以和文件夹一样直接读写

    • csslayer

      也可以复制入文件啊……

      有 kio 直接打开个文件修改完成后也会自动上传啊…我用 inkscape 打开修改个 svg 没有啥问题。

  12. haulm

    现在找不出问题在哪,KDE4 是以相机模式打开设备的,打开后就是只读的。 我用 mtpfs 指令看不到连接后任何文件。

  13. haulm

    很奇怪的问题哈,用 gmtp 可以工作,可是每一次操作得花上几分钟,卡的要命。

  14. haulm

    好吧,终于找到 kio-mtp 项目用上了,终于可用了,真不好找啊。 gmtp mtpfs 都不顶用哈。

Leave a Reply

Your email address will not be published. Required fields are marked *

Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).