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).

This site uses Akismet to reduce spam. Learn how your comment data is processed.