让 Linux 和 Android 和睦相处(其实没那么难)
许多自由软件爱好者,如果他们像我一样,当 Android 操作系统进入市场时,都集体松了一口气。在拥有我的第一部智能手机(我相信是一部运行 Windows Mobile 5.5 的三星 Blackjack,我不得不通过在分区上安装 Windows XP、安装手机驱动程序,然后运行更新程序这一繁琐的组合来更新它)之前,我是一个坚定的“PDA 和手机”爱好者,像牛仔一样自豪地将这两款设备都挂在腰带上。但 Blackjack 向我展示了携带一部设备的便捷性,自从拥有我的第一部 Android 设备(我至今仍在使用的第一代 Droid)以来,我无法想象使用搭载其他移动操作系统的设备。Linux 内核、基于 Java 的应用程序——这些都非常符合我的胃口。
但是,像许多优秀的消费级 Linux 产品(我就是在说你,夏普 Zaurus)一样,几乎在所有情况下,制造商都假定您的“另一台”计算机将运行 Windows。现在,在单独的分区上安装 Windows 以进行双启动,或者在 VM 中安装 Windows 以在 Linux 中运行,这很容易。但这有点像用火箭筒打苍蝇。基于 Web 的应用程序和“云”缓解了其中的一些困难,但这仍然不像 Windows 用户那样是“开箱即用,从 CD 快速安装后即可使用”的过程。
好消息是,通过安装或配置几个程序,让您的 Android 设备(除非另有说明,否则本文中的所有步骤同样适用于手机和平板电脑)与您的 Linux 机器友好相处非常容易。在本文中,我将重点介绍文件以及一些方法,以确保您始终在移动设备上拥有最新的电子表格或源文件副本。
在云端云计算运动在很大程度上促进了平台无关性,从一致的(基于 Web 的)UI 到允许应用程序同步数据的跨平台 API。并且由于大多数用户始终通过 3/4G、Wi-Fi 或有线网络连接到互联网,因此云服务已成为跨设备提供数据的最轻松方式之一。
Dropbox在现有的免费文件共享服务中,Dropbox 无疑是最受欢迎的,也许是因为它是最简单的——没有花哨的功能,没有冗长复杂的特性列表,只有良好的旧式云存储。并且它支持 Android(通过 Google Play 中的应用程序,网址为 https://play.google.com/store/apps/details?id=com.dropbox.android&hl=en)和 Linux,对于 GNOME 和其他以 GTK 为中心的桌面(使用 Dropbox 的 Nautilus 插件,如图 1 所示,可在 https://www.dropbox.com/install?os=lnx 获取),或 KDE(通过出色的 KFilebox——在撰写本文时,该项目的主页列出了 0.4.7 作为最新版本,http://kdropbox.deuteros.es,但 SourceForge 页面 http://sourceforge.net/projects/kdropbox 列出了版本 0.4.8,该版本运行良好——如图 2 所示)。

图 1. Nautilus 上下文菜单

图 2. KFileBox 菜单和配置窗口
将上述每个都指向相同的文件夹树将有助于将您的所有重要文件夹放在手边。但是,重要的是要注意,上面提到的“官方” Dropbox 应用程序会保留您的文件列表,但实际上并不同步文件本身——也就是说,如果您从 Linux 机器上传一个修订后的文件到 Dropbox,然后在您的移动设备离线后,Android 设备将知道该文件已更改,但在您重新上线之前,您将无法查看或编辑它。但是,一个名为 DropSync 的免费应用程序(https://play.google.com/store/apps/details?id=com.ttxapps.dropsync&hl=en)将为您执行此操作(图 3)。此外,Dropbox 在各种独立的 Android 应用程序中都得到了内部支持,这将使您可以直接从 Dropbox 帐户编辑文件或将文件直接保存到 Dropbox 帐户。我的 Transformer Prime 上的一个例子是 Epistle (https://play.google.com/store/apps/details?id=com.kooklab.epistle&hl=en),这是一个非常优雅的 Markdown 编辑器,它会自动将其文件夹中的文件列表更新到 Dropbox 上的文件夹。

图 3. DropSync 配置屏幕
BoxBox 与 Dropbox 类似,为用户提供可通过 Web 界面访问的免费在线存储空间。Box 在应用市场中也有一个应用程序(https://play.google.com/store/apps/details?id=com.box.android&hl=en,图 4)。Box 应用程序优于 Dropbox 的一个优点是,它会自动通知您文件的更新。Box 服务本身也具有一些不错的功能,其中一些功能仅适用于高级订阅,包括版本管理以及与其他 Web 应用程序的集成,例如 LinkedIn、SalesForce、NetSuite 和 Basecamp。但是,它也存在与官方 Dropbox 应用程序相同的弱点之一:当应用程序在线时,它仅更新有关 Box 帐户中文件的信息,而不是缓存文件的版本。尽管它确实有一个选项可以将文件标记为“离线可用”(图 5)。

图 4. Box Android 应用程序

图 5. Box “离线可用”菜单
在 Linux 端,虽然 Box 没有可用的本机客户端程序,但它允许通过 WebDAVS 访问您的文件。这意味着您可以在 Nautilus 中设置快捷方式(通过“连接到服务器”选项连接到 dav://www.box.net/dav,确保按照以下说明选择“安全 WebDAV”:http://benjaminkerensa.com/2011/10/27/how-to-mount-box-net-securely-on-ubuntu-11-10)或 Dolphin(由于某种原因,我无法让“添加网络文件夹”对话框连接,但只需在 Dolphin 的地址栏中键入 webdavs://www.box.net/dav
即可提示我输入凭据并像魅力一样工作,如图 6 所示)。在某些方面,我更喜欢这种方式,而不是被迫使用专有客户端程序;另一方面,Linux 的 Dropbox 客户端确实会自动更新文件的本地副本,而 Box 的 WebDAV 访问功能将要求您在线,除非您采取其他步骤。

图 6. 通过 WebDAVS 访问 Box
Google Drive有些人预示着 Google Docs 品牌重塑为 Google Drive 是 Dropbox 及其同类产品末日的开始(也许有些人仍然认为情况如此)。凭借 Google Docs 背后的内置编辑功能,Google Drive 无疑是协作和生产力的强大工具。我曾与客户和同事一起使用共享文本文档和电子表格,并且拥有一个在线位置来存储这些重要信息以及实时处理这些信息,这在不止一次的情况下节省了大量时间。
但是,将所有数据都放在 Google Drive 中并非没有缺点。Google 在 Google Drive 中对其文本文档、电子表格、演示文稿和绘图使用自己的内部格式。虽然它非常友善地允许您以 Linux 友好的格式(甚至文本和电子表格的 ODF 格式,万岁!)下载文件,但这仍然涉及转换,这带来了错误转换的风险。
最近更新的 Google Drive 应用程序,网址为 https://play.google.com/store/apps/details?id=com.google.android.apps.docs(是的,我包含了一个链接,但是如果您有 Android 设备,您已经有了它,不是吗?)比初始版本有了很大的改进,在初始版本中,文档编辑器通过基于 Web 的文本区域进行操作。不幸的是,电子表格编辑器仍然需要您在行的开头单击“编辑”链接才能编辑该行中的值(基于 Web 的文本字段),如图 7 所示。至于文件管理,与 Box 类似,Google Drive 会在本地保存文件供您离线编辑,但前提是您为每个需要访问的文件选择“离线可用”选项。此外,Google Drive 也受各个应用程序(如上面的 DropBox)的支持。除了自己的应用程序外,Google Drive 还是 Polaris Office(预装在我的 Prime 上,如图 8 所示)和 Documents to Go 的可接受存储位置。

图 7. Google Drive Android 电子表格编辑器

图 8. Polaris Office 显示 Google Drive 内容
其他以下项目也值得特别提及,尽管它们在 Android 社区中尚未像上面那些项目那样广为人知、接受和/或支持,但每个项目都有一些不错的功能,值得一看。
-
Ubuntu One:Canonical 进入云存储和 Web 服务领域的尝试,它受益于 Linux 客户端的商业支持者。此外,Ubuntu One 不仅限于简单的文件同步,而且未来还将能够使您的一些更以数据为中心的应用程序(例如联系人和笔记)保持最新,并流式传输音乐。支持有点不稳定(例如,它将同步联系人,但不同步日历或任务数据,并且目前仅在 Ubuntu 上),但 Ubuntu One 的“个人云”承诺无疑令人向往。
-
Spideroak:如果您对将所有敏感数据委托给服务提供商的 BOFH 感到紧张(就您所知),那么 Spideroak 可能非常适合您。该服务最大的卖点是对您所有数据的“零知识”加密——也就是说,即使该公司托管它,即使是它也无法破解您的文件。它还维护文件的版本历史记录,此功能通常仅适用于其他服务的高级客户。最后,除了移动设备(iOS、Android 和 Nokia N900)之外,该公司还提供全面的 Linux 支持,以 DEB (Ubuntu/Debian)、RPM (Fedora/OpenSUSE/RHEL/CentOS) 甚至 TGZ 格式为 Slackware 用户提供客户端。
对于我们这些有偏执倾向的人来说,将所有敏感数据留在企业霸主手中令人担忧。幸运的是,即使是最反企业的 shell 爱好者也有一些选项可以通过本地网络连接 Android 和 Linux。
“Linux”方式:SSHDroid一种选择是从 Linux 端同步,这意味着需要一种机制让您的 Linux 机器查看和操作 Android 设备上的文件。SSHDroid (https://play.google.com/store/apps/details?id=berserker.android.apps.sshdroid&hl=en) 为您的设备提供完整的 SSH 服务器。如图 9 所示,启动此应用程序会显示一个屏幕,告诉您需要了解的所有信息,包括您当前的 IP 地址、要连接到的 URL(它使用 SFTP 协议,默认端口为 2222)以及服务器的状态。

图 9. SSHDroid 主屏幕
我已经使用这种方法相当多地通过 SFTP 直接编辑文件(这是我喜欢 kioslaves 的原因之一),我可以肯定地说,这可能是我最喜欢的使用 Linux 和 Android 机器的方式,原因有几个。首先,它需要的设置最少:您安装 SSHDroid,启动它,然后从 Linux 机器转到 URL。一切就绪。其次,它是安全的。第三,虽然我通常使用它通过 SFTP 直接编辑文件,但一旦您连接,您就可以使用像 Unison 或 Krusader 这样的应用程序来同步文件。最后,大型传输的性能在我的 Prime 上还不错。
也就是说,此方法最适合那些将 Android 设备用作其桌面机器的移动扩展的人员——也就是说,对于那些以 Linux 机器为主导的人员。对于我们这些在平板电脑和其他移动设备上进行越来越多的计算的人来说,安装 SSHDroid 永远不会有坏处(它是免费的,并且占用空间不到 1MB,这在如今很少见)。下面描述了一种更以 Android 为中心的解决方案。
“Android”方式:FolderSync (S/FTP, Samba, WebDAVS)对于我们这些在后院的吊床上享受浏览互联网或写作的自由(如果您还没有尝试过,我强烈建议您尝试一下)但仍然希望实践良好的备份程序的人来说,FolderSync (https://play.google.com/store/apps/details?id=dk.tacit.android.foldersync.full&hl=en) 是一个出色的解决方案。它不是开源的,甚至不是免费的,但是对于 Pro 版本 2.29 美元的价格,一旦您弄清楚它可以为您做什么,它几乎是无需动脑筋的。
那是什么呢?它将使您设备上的一个文件夹与您 Linux 机器上的一个文件夹通过 SFTP 同步。您可以选择手动启动同步作业,或安排它们,并提供有用的选项,例如将某些作业(称为 Folderpairs,如图 10 所示)限制为某些无线网络,仅在电源插入时同步,以及文件应单向还是双向更新。

图 10. Foldersync 的配置选项

图 11. FolderSync 支持的协议
但 FolderSync 的伟大之处在于它支持的所有不同协议(图 11 显示了该选择列表的一部分)。在工作场所拥有导出 Samba 共享的文件服务器?FolderSync 将连接到该服务器,没问题。想要对 Web 服务器上的站点进行一些更新?在 Apache 上运行 WebDAV(S),您就设置好了。哦,还记得我们谈到的所有云服务吗?Dropbox、Box 和 Google Drive?FolderSync 也支持这个、那个和那个。
“Lite”版本将允许您与一台设备上的另一个文件夹同步,因此如果这就是您所需要的全部,您可以避免掏钱。但是 Pro 版本将允许您将 Android 设备设置为您存放文件的任何地方的中央枢纽。现在,如果他们开始制造带有 1TB 闪存驱动器的设备就好了……
直接连接将您的 Android 设备连接到 Linux 机器的最后一种方法,也是稍微老式的方法,是通过直接 USB 连接。虽然这可能会唤起长期以来对小工具着迷的人的怀旧之情,他们记得将 Palm 放入底座并按下“HotSync”按钮,但我发现这对于较新的设备来说是最糟糕的体验,原因我将在下面解释。
姜饼 (2.3.6 及更低版本) 方式在 v.3.0 之前的 Android 设备上,Google 做了“正确的事情”来启用对设备文件系统的访问。当通过 USB 电缆插入时,该设备看起来就像另一个 USB 驱动器。您可以来回移动文件,直接访问设备上的文档,并且基本上可以将手机或平板电脑视为您对待任何其他 U 盘一样(除了可能将其留在您的口袋中进行清洗之外)。
与上面的 SSHDroid 类似,一旦安装了此 USB 存储,您就可以使用您可用的任何 Linux 工具(Unison、Krusader、rsync)来确保它们是最新的。一切都很好,直到 Google 试图变得太聪明而弄巧成拙。
蜂巢 (3.0 及更高版本) 方式从 Android v3.0 及更高版本开始,通过 USB 插入设备不再显示为 USB 存储(即“简单方法”)。相反,您需要在设备设置中选择,在 USB 连接时,您希望设备使用 MTP 协议(即,在另一台机器上显示为媒体播放器)还是 PTP 协议(即,显示为相机)。
现在,我读到 Google 做出此决定是有技术原因的,主要是所有应用程序和数据现在都可以驻留在单个文件系统上(而不是必须选择例如将应用程序安装在“手机”上还是“SD 卡”上,就像我在我的 OG Droid 上所做的那样)。我只想说,对于这个用户来说,这些好处并不超过在 Linux 上尝试使用 MTP 的糟糕体验(PTP 实际上运行良好,但只允许您访问“DCIM”文件夹,因此除非您想将所有其他内容与内置摄像头拍摄的照片一起存储,否则这是行不通的)。
我花了一个周末的大部分时间在 XDA 论坛(http://forum.xda-developers.com")上搜索帖子,这是一个非常棒的 Android 黑客资源,试图找到一种在 Prime 上安装 SD 卡的漂亮、自动化方法。我找到了一些资源(http://www.omgubuntu.co.uk/2011/12/how-to-connect-your-android-ice-cream-sandwich-phone-to-ubuntu-for-file-access 和 http://forum.xda-developers.com/showthread.php?t=1143044),但最终选择了通过此 YouTube 视频提供的脚本和说明:http://www.youtube.com/watch?v=3ehnoJn6CEk)。在完成所有这些之后,我坐下来,准备像过去一样将 Prime 视为 /media 中的另一个驱动器。
好吧,不仅 Linux 上的 MTP 访问使用不方便,而且速度也慢得令人无法忍受。连接后,我开始将我的音乐收藏复制到 Prime,并将其插入一夜以进行复制。当我第二天早上起床时,它大约完成了 5%。在您开始询问传输速率等等之前,我没有这些数据,但我能够在几个小时内传输大约一半的相同收藏,并且通过 SFTP(因此具有加密/解密开销),速度也不慢。所以我几乎发誓不再使用直接连接来连接 Prime 了……有这么多其他方法可以传输文件和数据,谁还需要它呢?
结论Android 的伟大之处之一在于,生态系统可以自由地提出各种解决方案来解决问题,并让用户找出最适合自己需求的解决方案。可能上述方法中没有一种单独的方法适合您——我自己几乎每天都使用 SSHDroid 和 FolderSync。但是,上述所有应用程序要么是免费的,要么具有免费试用版,因此没有任何阻止您试用它们。试一试,机器人和企鹅很快就会相处融洽!