VAIO Z で Arch LinuxとWindows 10をデュアルブートする

VAIO Z (クラムシェルモデルのZ1311です)を購入しました。
Arch Linuxが好きで、かつ、たまに再インストールするので、インストール手順を残しておこうと思います。
Arch自体の詳細なインストール手順は[公式インストールガイド](https://wiki.archlinuxjp.org/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89)がしっかりしているので、そちらも参照してください。

# VAIO Z
* Z1311
* Windows 10 Home
* 英字配列
* NVMe対応SSD 256GB
* Core i7-6567U
* メモリー16GB
* 13.3型ワイド（16:9） WQHD 2560×1440

# ArchのUSBインストールメディアを用意する
[Archlinux - Download](https://www.archlinuxjp.org/download/)からISOファイルをダウンロードして
[Archwiki - USB インストールメディア](https://wiki.archlinuxjp.org/index.php/USB_%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2)を参考にUSBインストールメディアを作成する。

# Windowsでやること

## **高速スタートアップを無効化する**
これを無効化していないとArchもWindowsも起動しないという悲しいことになる。
"コントロールパネル"→"ハードウェアとサウンド"→"電源オプション"→"カバーを閉じたときの動作を選択"
から無効化する。

2016/09/06追記
oruminさんから、切らなくても両方起動しないことはないというコメントをいただきました。
自分で検証はしていないので、誰かしてくれるとうれしいなあと思います。

## パーティション操作
Windowsからみた初期パーティションは*boot, C, Recovery*となっている。
以下の手順でパーティションに変更を加える。

1. Windowsのディスクの管理からパーティションを縮小する
2. 縮小して空いた部分をLinuxのroot用とhome用の二つに分割
3. フォーマットはarchでext4にするので、このときにフォーマットはしない

この時の、サイズなどはご自由に。

# UEFI設定
F3 or F4を押しながら電源ボタンを押すと、UEFIの画面が出るので、そこから"BIOSの設定"(実際BIOSではない)を起動
以下を行う

* Secure Bootを無効化
* USB Device Bootをenableへ
* 起動順序を変更し、USB deviceを最上位に

2016/09/07
BIOSはもう存在しないのだという意見を発見したのでUEFIに変更
ただし、VAIO Zの画面上は"BIOS設定"という表記になっていることに注意

# Archのインストール
USBインストールメディアからブートして行う。

## パーティションの設定
ルート、ブート、ホームで計3つのパーティションを使用する。
なお、ホームとルートを分ける必要は無い。
ホームを分けておくと、Linuxがぶっ壊れた時などに、ホームはそのままで、システムの再インストールだけで済むという利点がある。

Archからみたパーティション

```zsh
$ lsblk
nvme0n1
|-nvme0n1p1 260M   - EFI システムパーティション
|-nvme0n1p2 128M   - Windowsのなんかしらが入ってる気がする(Windowsのディスクの管理では表示されない)
|-nvme0n1p3 80GB   - Windows 10本体
|-nvme0n1p4 64GB   - Archのroot
|-nvme0n1p5 93.1GB - Archのhome
|-nvme0n1p6 1G     - リカバリ領域
```

ext4でフォーマットして、マウントしてやる。
このときbootパーティションはWindowsと共用する。(ブートローダがうまいことやってくれる)
デバイスファイルの番号を間違わないように注意。

```zsh
$ mkfs.etx4 /dev/nvme0n1p4
$ mkfs.etx4 /dev/nvme0n1p5 
$ mount /dev/nvme0n1p4 /mnt
$ mkdir /mnt/boot /mnt/home
$ mount /dev/nvme0n1p1 /mnt/boot
$ mount /dev/nvme0n1p5 /mnt/home
```

## システムのインストール
インストールガイドにならって、ディスクにArchをインストールしていく。

```zsh
$ wifi-menu
$ timedatectl set-ntp true
$ vim /etc/pacman.d/mirrorlist
$ pacstrap /mnt base base-devel zsh git dialog wpa_supplicant
$ # `wifi-menu`を使おうとすると、`dialog`と`wpa_supplicant`が無いと言ってうまく動かないので、それらも入れてやる
$ genfstab -p /mnt >> /mnt/etc/fstab
```

ここからインストールしたシステムに切り替えて操作する。

```zsh
$ arch-chroot /mnt 
$ echo computer_name > /etc/hostname
$ ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ vi /etc/locale.gen
$ locale-gen
$ echo LANG=en_US.UTF-8 > /etc/locale.conf
$ mkinitcpio -p linux
$ passwd
```

これで、arch自体のインストールは終了

## ブートローダのインストール
`grub`を使おうと思っていたら、`grub`はNVMeに対応していないようでブート出来ないらしい。
[ふれめも - ArchLinuxをインストールした](http://flareolatry.hatenablog.com/entry/2016/07/09/084058)にならって、`systemd-boot`を使うことにする。
詳細は[Archwiki - systemd-boot](https://wiki.archlinuxjp.org/index.php/Systemd-boot)を参照のこと

ここで、systemd-bootは、systemdに同梱されているらしいので、既にインストール済ということになる。

```zsh
$ bootctl --path=/boot install
$ vi /boot/loader/loader.conf
$  # default  arch
$  # timeout  1
$  # editor  0
$ cp /usr/share/systemd/bootctl/arch.conf /boot/loader/entries/
$ pacman -S intel-ucode
$  # Intelのマイクロコード修正もここで入れておく
$ blkid -s PARTUUID -o value /dev/nvme0n1p4 >> /boot/loader/entries/arch.conf
$  # 手打ちは大変なので、rootパーティションのPARTUUIDを追記しておく
$ vi /boot/loader/entries/arch.conf
$  # title   Arch Linux
$  # linux   /vmlinuz-linux
$  # initrd  /intel-ucode.img
$  # initrd  /initramfs-linux.img
$  # options root=PARTUUID=hogehoge rw 
```

2016/10/31追記
詳細はコメントを参照
`options`に`noefi`を追加しないとうまく起動しないようです。

これで、Arch linuxのインストールは終了なので、再起動する。

```zsh
exit
umount -R /mnt
shutdown -h now
```

これでデュアルブートされているはず！



# Arch Linuxの設定
インストール後の設定も毎回ググっているので、ついでに書いておくことにしました。
大体は、[Archwiki - 一般的な推奨事項](https://wiki.archlinuxjp.org/index.php/%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AA%E6%8E%A8%E5%A5%A8%E4%BA%8B%E9%A0%85)をなぞっていけばいいはずです。

## 時刻の設定
詳細は[Archwiki - 時刻](https://wiki.archlinuxjp.org/index.php/%E6%99%82%E5%88%BB)を参照
Windowsとデュアルブートする場合は少し面倒くさい。
Wikiには、
>Linux を使う時はハードウェアクロックを UTC 時刻系に設定するのが有益です。

とあるので、これに従い、ハードウェアクロックをUTCにする。

```
$ timedatectl set-local-rtc false
```

大抵、このあたりで時計がずれていたりするので、ntpを使って同期し、ハードウェアクロックに書き込みます。
ついでに、ntpdも自動起動するようにしておきましょう。

```zsh
$ pacman -S ntp
$ ntpd -gq
$ hwclock --systohc
$ systemctl enable ntpd.service
```

Linuxの設定はこれで大丈夫そうです。
しかし、Windowsはハードウェアクロックをlocaltimeとして読む込むらしいので、レジストリに手をいれる必要があります。
[Windows で UTC を使う](https://wiki.archlinuxjp.org/index.php/%E6%99%82%E5%88%BB#Windows_.E3.81.A7_UTC_.E3.82.92.E4.BD.BF.E3.81.86)に従い、`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal`の値をDWORD値の1に設定します
また、"日付と時刻"の設定から"時刻を自動的に設定する"をオフにします。
これをしないと、Windowsがハードウェアクロックを変更してしまうようです。

## Wifiの自動接続
netctlに自動接続をしてもらいます。
[既知のネットワークに自動で接続する](https://wiki.archlinuxjp.org/index.php/%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E3%82%BA%E3%82%AC%E3%82%A4%E3%83%89#.E6.97.A2.E7.9F.A5.E3.81.AE.E3.83.8D.E3.83.83.E3.83.88.E3.83.AF.E3.83.BC.E3.82.AF.E3.81.AB.E8.87.AA.E5.8B.95.E3.81.A7.E6.8E.A5.E7.B6.9A.E3.81.99.E3.82.8B)と[Archwiki - netctl](https://wiki.archlinuxjp.org/index.php/Netctl)を参照します。

```zsh
$ ip link
$  # 無線インターフェース名を確認します。
$  # wlp5s0みたいな名前のはずです
$ pacman -S wpa_actiond
$ systemctl enable netctl-auto@wlp5s0.service 
```

## ユーザの追加
デフォルトではrootユーザしかないので、自分でユーザを作成します。
その前に、`sudo`も入っていないのでインストールしておくとよいです。

```zsh
$ pacman -S sudo
$ useradd -m -g users -G wheel -s /usr/bin/zsh mopp
$ passwd mopp
$ visudo
```

## yaourt
[Archwiki - yaourt](https://wiki.archlinuxjp.org/index.php/Yaourt)にある通り、`/etc/pacman.conf`に以下を追加します。

```
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
```

```zsh
$ pacman --sync --refresh yaourt
```

## GUI周り
色々とごちゃごちゃしてるので、気が向いたら追記します。

```zsh
$ yaourt -S xf86-video-intel xorg-server xorg-xinit xf86-input-libinput i3-wm i3lock i3status dmenu rxvt-unicode ttf-ricty
```

## HiDPI
今回のVAIO Zは13.3インチなのにWQHD(2560×1440)なので少し文字が窮屈です。
目が悪い人だとむしろ作業しづらいはずですので、HiDPIの設定も必要になりますね。
[Archwiki - HiDPI](https://wiki.archlinuxjp.org/index.php/HiDPI)に色々書いてありますが、`~/.Xresources`に`Xft.dpi: 144`と書くだけで十分でした。
DPIが96なのが基本のようだったので、1.5倍の144に設定しました。
Windowsのデフォルトは175%みたいなので、1.75倍の168のはずです。

今の所、大体うまく動いていますが、chrome上でuim-mozcを使用すると変換候補リストが入力欄に重なってしまったり、あらぬところに表示されたりするので不便です。
どうやらchromeのバグのようで、2016/08/31現在まで修正はされていないようです。
[Issue 475718 - The coordinates send to input method on Hi-DPI Linux environment are not scaled	](https://bugs.chromium.org/p/chromium/issues/detail?id=475718&q=hidpi%20ime&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified)

## Bluetoothマウス
今まで、logicoolのunifying無線マウスを使っていましたが、PCをケースにしまうときにレシーバが引っかかって邪魔だなあと思っていたのでbluetoothマウスに乗り換えました。
[Archkiwi - Bluetooth](https://wiki.archlinuxjp.org/index.php/Bluetooth)の通りにやれば全く問題ありませんでした。

```zsh
$ yaourt -S bluez bluez-utils
$ systemctl start bluetooth
$ systemctl enable bluetooth
$ bluetoothctl
[bluetooth]# power on
[bluetooth]# scan on
[bluetooth]# agent on
[bluetooth]# pair E3:C4:E5:DF:20:64
[bluetooth]# trust E3:C4:E5:DF:20:64
[bluetooth]# connect E3:C4:E5:DF:20:64
[bluetooth]# quit
$ sudo nvim /etc/udev/rules.d/10-local.rules
  # # Set bluetooth power up
  # ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig hci0 up"
```

ただし、

* Windowsをブートして、そっちでペアリングすると、Linuxでペアリングされない
* たまに起動してもマウス操作出来ず、上記手順を繰り返す必要がある

ことがあるので、少し不便です。

2016/12/17追記
`systemctl status bluetooth.service`すると`Sap driver initialization failed.`というメッセージが赤く出ていました。
このSAPドライバ、調べてみるとSIM Access Profileの略称みたいです。
このPCにSIMカードは入りませんし不要ですね。
なので、`/etc/systemd/system/bluetooth.target.wants/bluetooth.service`の`ExecStart`を`ExecStart=/usr/lib/bluetooth/bluetoothd --noplugin=sap`として、`Sap driver`を読み込まなくしてやるといいみたいです。
[bluetoothd sap driver issue](https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=131999)

## 英単語辞書
Vimの英単語補完機能(<C-X><C-K>)で必要な辞書を`/usr/share/dict/words`にインストールします。
入れておくと捗るのでおすすめです。

```zsh
$ yaourt -S words
```

# 参考記事
[Archwiki - USB インストールメディア](https://wiki.archlinuxjp.org/index.php/USB_%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2)
[Archwiki - インストールガイド](https://wiki.archlinuxjp.org/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89)
[Archwiki - systemd-boot](https://wiki.archlinuxjp.org/index.php/Systemd-boot)
[Archwiki - 一般的な推奨事項](https://wiki.archlinuxjp.org/index.php/%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AA%E6%8E%A8%E5%A5%A8%E4%BA%8B%E9%A0%85)
[ふれめも - ArchLinuxをインストールした](http://flareolatry.hatenablog.com/entry/2016/07/09/084058)