iOS

来自 Arch Linux 中文维基

iOS 是由 Apple Inc. 所创的用于iPhone系列手机的操作系统。虽然Apple官方并不支持将iOS设备连接到Linux,但 libimobiledevice 项目提供了连接iOS与Linux设备并传输数据所需的库与工具。

提示:还可以使用 KDE Connect 来在iOS和Linux间传输文件。

安装[编辑 | 编辑源代码]

安装 libimobiledevice 包。

连接到设备[编辑 | 编辑源代码]

使用 Usbmux 守护进程[编辑 | 编辑源代码]

libimobiledevice 包依赖 usbmuxd,它负责与iOS设备间的底层连接。usbmuxd 包也包含了一条 udev 规则,使得在设备连接或断开连接时可以自动启动和停止守护进程。

连接iOS设备并确认 usbmuxd.service 已经自动启动。

$ systemctl status usbmuxd.service
...
Active: active (running) since Sun 2020-01-19 19:23:18 UTC; 22s ago
...

配对[编辑 | 编辑源代码]

连接iOS设备后解锁屏幕,您将会在设备上看到“是否信任此电脑?”的弹窗。点击“信任”,然后输入您的设备密码来完成配对过程。

如果您没有看到上述弹窗,您也可以手动开始配对过程。连接设备,并在解锁屏幕后运行:

$ idevicepair pair
SUCCESS: Paired with device d8e8fca2dc0f896fd7cb4cb0031ba249

如果您同时连接了多台iOS设备,也可以通过传递 --udid ios_udid 参数来选定一个特定设备。

要验证配对已成功,可以运行:

$ idevicepair validate
SUCCESS: Validated pairing with device 00008030-001D3562367A402E

传输数据[编辑 | 编辑源代码]

配对后,iOS会在电脑上显示两个不同的文件系统。其一是媒体文件系统,包含了设备的照片、视频与音乐。 第二个文件系统用来直接与特定应用程序共享文件。它有时被称为“iTunes 文档共享”。[1] [2]

使用图形化文件管理器[编辑 | 编辑源代码]

使用 GVFS 的文件管理器可以与iOS设备交互。要访问媒体文件系统, 安装 gvfs-gphoto2。要访问应用程序文档文件系统,需安装 gvfs-afc

注意: 访问媒体文件系统时,GVFS 只会显示设备的照片与视频,而不会显示音乐。

kio-extras 包中包含有对 Dolphin 的iOS设备支持,它现在已经是 Dolphin 的依赖之一。[3]

手动挂载[编辑 | 编辑源代码]

安装 ifuse 包。您可以通过运行以下命令来挂载您的iPhone上的媒体文件系统:

$ ifuse mountpoint(挂载点)

您可以通过此在 mountpoint/DCIM 中访问设备中的照片。

注意: 借此,设备的音乐数据库也可以在 mountpoint/iTunes_Control 访问。您不能以这种方式向设备添加新的曲目,但可以借此将设备中的歌曲复制到您的电脑。
警告: 手动编辑 iTunes_Control 中的数据库会导致其损坏,这将使您已同步的歌曲变为只能通过重置系统(抹掉iPhone)来移除的过时失效数据。

要访问一个应用程序的文档文件系统,您首先需要辨认该应用程序。

$ ifuse --list-apps
"CFBundleIdentifier","CFBundleVersion","CFBundleDisplayName"
"org.videolan.vlc-ios","432","VLC"
"org.wikimedia.wikipedia","1932","Wikipedia"
"org.kde.kdeconnect","2","KDE Connect"
[...]

然后您便可以使用以下命令挂载一个应用程序的文件:

$ ifuse --documents APPID mountpoint(挂载点)

其中,APPID是所需应用程序的包的识别符(包名),例如 org.videolan.vlc-ios

完成后,卸载文件系统:

$ fusermount -u mountpoint

导入视频与图像[编辑 | 编辑源代码]

视频与图像一般都可以在 <mountpoint>/DCIM/100APPLE 下找到。

HTML5 视频[编辑 | 编辑源代码]

一般来讲您会想要使用 ffmpeg2theora 把 MOV 文件转为 OGV 之类的 HTML5视频格式。需要注意的是转换后的视频不会保留元数据中的创建时间,所以您需要使用如下的脚本:

#!/usr/bin/sh

find -name "*.MOV" | while read mov
do
    d=$(gst-discoverer-1.0 -v $mov | awk '/datetime:/{print $2}' | tr -d \")
    base=${mov%.*}
    if test -f $base.ogv
    then
        touch -d${d} $base.ogv
        ls -l $base.ogv
    else
        echo $base.ogv missing
    fi
done

然后使用 cp -arsync -t 以便保存文件的日期与时间数据。

疑难解答[编辑 | 编辑源代码]

ifuse 无法挂载应用程序文件目录[编辑 | 编辑源代码]

使用 ifuse 挂载应用程序目录并尝试列出挂载点下的内容时,您可能会遇到下面的错误:

".": Input/output error (os error 5)

这是一个 已知问题 ,已经在现在的 libimobiledevice 开发版本中被修复,但尚未进入稳定版中。解决办法是安装 libimobiledevice-gitAUR

设备无法被重定向至虚拟机[编辑 | 编辑源代码]

如果您使用USB来在 Windows 虚拟机中同步设备,尝试将其重定向可能会因 "其他应用程序正在使用该设备" 而失败。这是由于 usbmuxd.service 在设备连接后自动启动。这可以通过 停用或屏蔽 usbmuxd.service 来解决。

参考[编辑 | 编辑源代码]