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. KDE 4.10 预览 | I, KDE

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.