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,还会发现各种各样设备奇葩的行为,不如说这个协议本身也命途多舛……
KDE 4.10 预览 | I, KDE