Windows10のWSL2でiPhoneの写真をインポートする

# はじめに

## 概要

この記事では、Windows10(おそらくWindows11でも同様とは思われます)のWSL2でiPhoneの写真をインポートする方法について、手順を簡単にまとめます。

## 想定読者

- WSL2やUbuntuについて、基本的な知識があり、自分で操作できる方
- WSL2でiPhoneの写真にアクセスする方法を探している方
- Windows10で、エクスプローラのコンテキストメニューからのiPhoneの写真のインポートが上手くいかない(*下記画像参照)などで、他の手段を探している方

図：筆者が困っていた事象「このデバイス上に画像とビデオが見つかりませんでした」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/fe624575-1d5c-78b5-a2aa-467a1f4cab25.png)

### 補足

前述のエラーについては、iPhoneに関するサイトでいくつかの方法が例示されていますが、筆者はことごとくうまくいきませんでした。

筆者の環境でも、macOS(Sonoma)や、Windows11のマシンでは、同じiPhoneであってもインポートができている状況でした。Windows 10 Proのマシンでは、上記と同じエラーが出ていました。

## 本メモの全訂

- 2023年12月時点の情報
- Windows 10 Home (22H2)
- WSL バージョン: 2.0.9.0
- カーネル バージョン: 5.15.133.1-1
- usbipd-win 4.0.0

# 手順

## WSL2でUbuntu22.04を使えるようにする

WSL2を使えるようにします。

- Microsoftのサイト[WSL を使用して Windows に Linux をインストールする方法](https://learn.microsoft.com/ja-jp/windows/wsl/install)
- Qiitaなら、[wsl2にUbuntu環境を構築する【windows】](https://qiita.com/ryome/items/240f36923f5cb989da27)

（ご参考）WindowsからUEFI(いわゆるBIOS)のメニューに入るには、スタートメニューからたどれる「再起動」をShiftキー付きでクリックするというショートカットがあります。

## Ubuntu22.04の初期設定

### アカウントを作る

コンピュータの再起動後、Ubuntuのインストーラにより、ユーザ名とパスワードが聞かれるので、設定します。

## パッケージ導入

### パッケージをアップデート

Ubuntuで以下を実施します。

```bash
sudo apt-get update
```

### マウントに必要なパッケージをインストール

以下2つの記事を参考に、

- [inuxでiPhoneを接続して写真などを転送する方法](https://qiita.com/H-goto16/items/c9d46cf12935d4828d90)
- [Ubuntu18.04からiPhone(iOS 10.2)にアクセスする](https://qiita.com/nekochango/items/64ae7244e4bf023715db)

Ubuntuで以下を実施します。

```bash
sudo apt-get install -y libimobiledevice6 libimobiledevice-dev
sudo apt-get install -y libimobiledevice-utils
sudo apt-get install -y ifuse
```

```bash
sudo apt install linux-tools-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20
```
## /etc/fuse.confを編集

Ubuntuで/etc/fuse.confの以下の行のコメントアウトを外す

```
user_allow_other
```

## USBIPD-WINをインストール

以下のMicrosoftのサイトを参照し、USBIPD-WINをインストールします。（本記事執筆時点では4.0.0）

- [USBIPD-WIN プロジェクトをインストールする](https://learn.microsoft.com/ja-jp/windows/wsl/connect-usb#install-the-usbipd-win-project)

## USBIPD-WINで、USBポートをWSL2から見えるようにする

以下のMicrosoftのサイトを参照し、USBIPD-WINでiPhoneのUSBポートをWSL2から見えるようにします。

- [USB デバイスを接続する](https://learn.microsoft.com/ja-jp/windows/wsl/connect-usb#attach-a-usb-device.)

WindowsのPowerShellを _管理者モードで_ 起動し、以下を実施します。

PCのUSBポートに接続されている機器を確認します。

```Powershell
usbipd list
```

一覧が表示され、iPhoneの行が出てきます。このBUSIDを後で使います。

```PowerShell
PS C:\WINDOWS\system32> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
1-4    05ac:12a8  Apple Mobile Device USB Composite Device                      Not shared
```

Windowsの _管理者モードの_、PowerShellで、以下を実施します。
(筆者の環境では、「--force」をつけない場合にはbindができませんでした。エラーメッセージに従って「--force」を付けているのが下記の例です)

```PowerShell
 usbipd bind --force -b "1-4"
```

Windowsの _管理者モードの_、PowerShellで、以下を実施します。

```PowerShell
usbipd attach -w -b "1-4"
```

以下のようなメッセージが出力され、USBポートがWSL2から見えるようになります

```
sbipd: info: Using WSL distribution 'Ubuntu-22.04' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Using IP address 172.22.224.1 to reach the host.
```


## マウントポイントを用意

Ubuntuで以下を実施します。

```bash
sudo mkdir /media/iPhone
sudo chmod 777 /media/iPhone
```

## マウント

Ubuntuで以下を実施します。

```bash
sudo idevicepair pair
```

## 確認

Ubuntuで以下を実施します。

```bash
ls /media/iPhone/DCIM
```

あとは、Ubuntuのターミナルで、適宜お好きな位置にファイルをコピーします。

```bash
cp -a /media/iPhone/DCIM/* ${コピー先をここに指定}
```

## マウント解除

Ubuntuで以下を実施します。"1-4"の部分は、「usbipd list」で出てきたiPhoneの行のもので読み替えてください。

```bash
fusermount -u /media/iPhone
usbipd detach -b "1-4"
usbipd unbind -b "1-4"
```




# おわりに

この記事では、Windows10のWSL2でiPhoneの写真をインポートする方法について紹介しました。

筆者はこの方法で、iPhone内の約170GB、約60000個の写真と動画をPC上にコピーすることができました。

Lightningケーブル接続で、外付けのUSB3.0接続のSSD上にコピーする作業で、約4時間くらいかかりました。(LightningはUSB2.0のスピード)

## 補足

筆者の場合、約60000個のファイルのうち、4ファイルだけエラーが出ました。気になるところではあるのですが、本記事の範囲としては一旦終了、ということにします。

```
cp: cannot open '/media/iPhone/DCIM/105APPLE/IMG_xxxx.JPG' for reading: Input/output error
```