Microsoft Surface GoをLinuxデュアルブートにする

こんな感じになります。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Surface GoにUbuntuいれてみた。タッチパネルとかキーボードカバーとか普通にそのまま使える。<br>あまりに何事も無かったかのように動くのでちょっとびっくりしたんだけど、こういうのは対応していて当たり前な感じなのかな。ドライバの中身とか知らないからどういう事なのかあまり想像がつかない <a href="https://t.co/IpBkgG4Mwy">pic.twitter.com/IpBkgG4Mwy</a></p>&mdash; s2terminal /suzuki.sh (@suzukiterminal) <a href="https://twitter.com/suzukiterminal/status/1174358768085164032?ref_src=twsrc%5Etfw">September 18, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

## 環境
- Surface Go 128 GB / 8 GB RAM / WiFi モデル
- Windows 10 Home 1903
- Ubuntu 18.04.3 LTS

そのほか細かいものとして、インストール用メディアに**USBメモリ**が必要になります。
また、最初は無線LANに繋がらないため**有線LAN接続用USBアダプタ**を用意しておきます。
もちろんどちらかがType-Cでなければ**Type-C変換アダプタ**も必要です。
いずれも特別な物は必要なく、普通のWindows対応のもので動作します。本稿では下記を利用しました。

- [LUA4\-U3\-AGTE\-BK : LANアダプター \| バッファロー](https://www.buffalo.jp/product/detail/lua4-u3-agte-bk.html)
- [Type\-C変換アダプタ \- USB3\-AFCMADWH | エレコム](https://www.elecom.co.jp/products/USB3-AFCMADWH.html)
- [spot \| GH\-UFY3EBシリーズ \| GREEN HOUSE グリーンハウス](https://www.green-house.co.jp/products/gh-ufy3eb/)

Surface GoにはUSB Type-Cポートが1つしか無いため、USBハブを使ってLANアダプタとUSBメモリを同時に挿入すると便利かもしれませんが、無くてもできます。

入力デバイスとして、キーボード、タッチパッド、タッチパネルもそのまま使えるため、特別に用意する必要はありません。今回Microsoft公式のTypeCover、SurfacePenをそのまま利用しました。
(なおUEFIもUbuntuもタッチで操作できるため、万が一キーボード等が何も無かったとしてもSurfaceGoの本体だけで下記作業は可能だと思いますが...)

## 準備
まず、失敗したときのリカバリ用として、Windowsが使える状態に戻せるよう**回復キー**を用意しておきます。Microsoftアカウントにログインすることで確認できますので、SurfaceGo以外のデバイスで確認するか、印刷しておきます。

- [BitLocker 回復キーを探す](https://support.microsoft.com/ja-jp/help/4026181/windows-10-find-my-bitlocker-recovery-key)
- [ASCII\.jp：Windows 10でドライブから回復するときに入力する「回復キー」って何？｜ズバッと解決！ Windows 10探偵団](https://ascii.jp/elem/000/001/161/1161054/)

Windowsのデータについてはバックアップを取っておいたほうが良いですが、今回デバイスには大したデータは入っていなかったので省略しました。本来は、回復キーでもリカバリできない事態に備えてバックアップを取っておいたほうが良いと思います。

## インストール作業
### インストールメディアの作成
まず下記手順に沿って、[Rufus](https://rufus.ie/)を使ってUbuntuインストール用メディアを作成します。

- [Create a bootable USB stick on Windows \| Ubuntu tutorials](https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-windows#0)

この作業は別のPCで行っても問題ありません。

### インストール用パーティションの作成
インストール用のパーティションを作成します。
「ディスクの管理」から「ボリュームの縮小」で、Ubuntu用に確保したい分だけの容量をWindowsから縮小します。

- [Windows でパーティションを増やすには?](https://support.microsoft.com/ja-jp/help/944248)

### セキュアブートの無効化
UEFIのセキュアブートコントロールを無効化しておきます。
これをしていないとUbuntuを起動することができません。

- [Surface UEFI の使用方法](https://support.microsoft.com/ja-jp/help/4023531/surface-how-to-use-surface-uefi)
- [How to configure Surface Go UEFI/BIOS settings](https://surfacetip.com/configuring-surface-go-uefi-bios-settings/#how-to-change-system-boot-order-on-surface-go)

### インストール
準備が整ったら、下記手順でUbuntuをインストールします。

- [Install Ubuntu desktop \| Ubuntu tutorials](https://tutorials.ubuntu.com/tutorial/tutorial-install-ubuntu-desktop#0)

## Surface GoでのUbuntuの起動
一度Windows10を起動し、「設定」→「更新とセキュリティ」→「回復」→「PCの起動をカスタマイズする」→「今すぐ再起動」から、起動オプションでUbuntuを選択すると、Ubuntuを起動できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50391/6272f0a4-edfa-7185-772b-3097ad35b441.png)

- https://www.reddit.com/r/Surface/comments/9i4y3t/boot_from_usb_on_the_surface_go/

なお私の知識では直接Ubuntuを起動する方法は分かりませんでした。UbuntuのgrubやWindowsのbcdの設定が必要になってくると思うのですが、再起動時に設定が元に戻ってしまい、どうしてもWindowsが先に起動してしまいました。

### Wi-Fiを有効化する
Ubuntuで起動したらターミナルを実行し、[lshwコマンド](https://www.atmarkit.co.jp/ait/articles/1904/11/news023.html)でハードウェア情報を探します。

```bash
$ sudo lshw -class network
```
今回SurfaceGoに使われていたのは`QCA6174 802.11ac Wireless Network Adapter`であり、[こちらのリポジトリ](https://github.com/kvalo/ath10k-firmware)にドライバがあるようだったので、下記を参考にインストールします。この作業に有線LANが必要になります。

[Ubuntu日本語フォーラム / ubuntu16\.04ltsにてpc内蔵の無線lanドライバが認識しません](https://forums.ubuntulinux.jp/viewtopic.php?id=18477)

これでUbuntuが起動し、無線LANに繋がる状態になりました。あとはChromeやVSCode等をインストールして使うだけです。

## 参考
- [【Ubuntu】SurfaceにUbuntuは入れられるのか？！ デュアルブートを試してみる【Windows】 \- Milkのメモ帳](https://www.milkmemo.com/entry/surface_ubuntu_install)
- [How to fix Surface Go issues using a USB recovery device \| Windows Central](https://www.windowscentral.com/how-fix-surface-go-using-usb-recovery-device)
- [今スグ始められる！ Linuxスタートブック｜日経Linux](https://info.nikkeibp.co.jp/media/LIN/atcl/books/062700018/)