LinuxでiPhoneを接続して写真などを転送する方法

# LinuxでiPhoneとデータ転送を行う

今回はLinuxでiPhoneをUSB接続してデータ転送(差分バックアップ)を行います。

## 用意するもの
- iPhone
- Linuxマシン (今回はArch Linuxを使用します。): 追記 Ubuntuでも問題なく可能でした。
- USB A => Lightningケーブル
- パッケージ [libimobiledevice](https://www.archlinux.jp/packages/?name=libimobiledevice) 

<details><summary>マシン詳細</summary><div>

+ Arch Linux

```sh:Terminal
$ uname -a
Linux haruki 6.1.7-hardened1-1-hardened #1 SMP PREEMPT_DYNAMIC Thu, 19 Jan 2023 00:16:46 +0000 x86_64 GNU/Linux

$ cat /etc/os-release
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo
```

+ Ubuntu

```sh:Terminal
$ uname -a
Linux haruki 6.5.0-27-generic #28~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 15 10:51:06 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/os-release 
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
```

</div></details>

## パッケージのインストール
```sh:Terminal
sudo pacman -S libimobiledevice ifuse
```
- Ubuntuの人は
```sh:Terminal
sudo apt-get install -y libimobiledevice6 libimobiledevice-dev ifuse libimobiledevice-utils
```
を実行してください。

## iPhoneとの接続
**USB**でマシンと接続してください。

先程インストールしたパッケージのlibimobiledeviceはusbmuxdに依存していて、低レベルにiOSとの接続を行うことができます。
iPhoneとの接続後`usbmuxd.service`が立ち上がっているか確認しましょう。

```sh:Terminal
$ systemctl status usbmuxd.service

● usbmuxd.service - Socket daemon for the usbmux protocol used by Apple devices
     Loaded: loaded (/usr/lib/systemd/system/usbmuxd.service; static)
     Active: active (running) since Sat 2023-02-04 18:32:29 JST; 2min 27s ago
       Docs: man:usbmuxd(8)
   Main PID: 1478 (usbmuxd)
      Tasks: 2 (limit: 19107)
     Memory: 2.1M
        CPU: 16ms
     CGroup: /system.slice/usbmuxd.service
             └─1478 /usr/bin/usbmuxd --user usbmux --systemd

Feb 04 18:32:29 haruki systemd[1]: Started Socket daemon for the usbmux protocol used by Apple devices.
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.248][3] usbmuxd v1.1.1 starting up
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.249][3] Successfully dropped privileges to 'usbmux'
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.249][3] Using libusb 1.0.26
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.260][3] Initialization complete
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.260][3] Enabled exit on SIGUSR1 if no devices are attached. Start a new instance with "--exit" to>
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.260][3] Connecting to new device on location 0x30009 as ID 1
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.260][3] Connected to v2.0 device 1 on location 0x30009 with serial number ***************************>
```

### ペアリング
```sh:Terminal
$ idevicepair pair
``` 
を実行してください。するとiPhoneから信頼するか聞かれるので信頼してパスコードを入力してください。
```
SUCCESS: Paired with device
```
が出たら完了です。何度かエラーが出るかもしれませんが、信頼ができていればSUCCESSになります。

## マウント
iPhoneとの接続は終わったのですがマウントをしないとデータ転送ができません。
どこでもいいのですが、`/mnt/iphone`にマウントしたいと思います。
+ ディレクトリ作成と権限の付与
```sh:Terminal
sudo mkdir /mnt/iphone
sudo chmod 755 /mnt/iphone
```
```sh:Terminal
ifuse /mnt/iphone
```

ここでWindowsだと`DCIM`しか出現しませんが、Linuxだとさらに多くのディレクトリにアクセス可能です。
```sh:Terminal
$ ls
AirFair DCIM Downloads iTunes_Control MediaAnalysis Photos Podcasts Purchases Recordings
```
あとはcpなどでコピーするだけです！
## 差分バックアップ
`rsync`を使って更新された分だけコピーします。

`--dry-run` オプションをつけることで、送信されるファイルが出力されるので差分バックアップになっているかまずはこのオプションで試すことをおすすめします。
```sh:Terminal
rsync -auv --progress DCIM/ ~/DCIM --dry-run
```
+ 差分バックアップ
```sh:Terminal
rsync -auv --progress DCIM/ ~/DCIM
sending incremental file list
.MISC/Incoming/
112APPLE/
112APPLE/IMG_2885.HEIC
      2,799,629 100%   26.65MB/s    0:00:00 (xfr#1, to-chk=157/14541)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
112APPLE/IMG_2987.HEIC
      1,702,779 100%    6.25MB/s    0:00:00 (xfr#158, to-chk=0/14541)

sent 1,090,678,523 bytes  received 3,080 bytes  15,254,288.15 bytes/sec
total size is 64,147,123,048  speedup is 58.81
```
これで差分バックアップができました。
以上です。お疲れ様でした。