メインマシンが壊れたのでWindows代わりにArchを使ってみる。

何番煎じかわかりませんが（汗
注：本記事は2021/2/15現在の記載となっています。

# 発端
### メインマシン突然の死
組んでから3年8ヶ月、たまに起動失敗などもありつつ、安定していたメインマシンが突如BSoD連発の再起動ループに陥り、何をしても直らなかったので、諦めて組み直すことに。

# 計画
## コンセプト
1. メインマシンとして利用
2. 脱Windows
3. 遊べる

メインマシンと言っても、ブラウズ、動画・音楽視聴、ほんの少しのコーディング、あとは艦これくらいしかしないので、~~最近WindowsUpdateの品質がどんどん落ちてるし~~久々にお勉強も兼ねてWindows以外で組んでみる。

## 機器選定
実は2年半前に組み終わって放置していたマシンがあったので流用。スペックは下表の通り。

|項目|内容|
|---|---|
|CPU|AMD Ryzen7 1700|
|Memory|Crucial DDR4-2400 16GB x 4 Dual channel|
|Chipset|AMD X370
|MainBoard|Asrock X370 GAMING K4|
|GPU|AMD RADEON RX 470|
|SSD|SAMSUNG 960 EVO M.2 500GB|
|HDD|HGST 0S04007 6TB x2|
|Power|750w|
|備考|SSDにGentooインストールの痕跡有り|

もともと仮想マシンプラットフォーム用として買ったマシンなので無駄にハイスペックな一品。

## OS選択
遊ぶのであればちょうど良いので、そのままGentooのインストールを継続するという案もあったが、メインマシンで使うには流石に辛いので却下。
Gentoo同様、なんでも出来ることに定評のあるArchLinuxを選択した。

# 実施
## 基礎設計
- BIOSなんて古いしUEFIブート
- OSはSSDにインストールし、データ領域はHDDに事後で設定
- SSD時代らしく(?)、~~パーティションわけはめんどいので~~/boot 128MiB、/root 100GiBのみ
- HDD2台の先端部に32GiBずつswap領域。
- あとは適当

## インストールの準備
### インストールイメージの準備
*注：インターネット接続環境が有り、USBポートを備えたWindowsPCがあることを前提としています。*

[ArchLinuxのサイト](http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/latest/)からISOをダウンロードして、[rufus](https://rufus.ie/ja_JP.html)でUSBメモリにブートイメージをインストール。rufusの使い方など詳細についてはググってください。

注意点は、rufusでUEFIパーティションを選んで、ファイルシステムをFAT32にすることくらい。

### インストーラの起動

の前に。

####しばらく放置していたPCなのでおまじない
- 起動時DelでUEFIメニューに入り、とりあえずOptimize Defaultして再起動。
- もう一度起動時にDel押して、仮想化系をオン、オンボードサウンド、Serialポートをオフ、起動モードをUEFIにして再起動。この辺は好みでどうぞ。

### 改めて再起動
無事ArchLinuxのインストーラが立ち上がり、なんの変哲もないシェルのプロンプトが出ます。
うん、インストーラってこういうもんだよね！

立ち上がったらいろいろやる前にキーボードレイアウトを日本語に変更。
英語キーボードを使っている場合不要です。

`loadkeys jp106`

### まずはディスク認識の確認

```
# lsblk
sda           8:0    0   5.5T  0 disk 
sdb           8:16   0   5.5T  0 disk 
nvme0n1     259:0    0 465.8G  0 disk 
├─nvme0n1p1 259:1    0   128M  0 part
├─nvme0n1p2 259:2    0   100G  0 part
```

今回インストールしたいのは、NVMe接続のSSDなので、nvme0n1がターゲットです。
過去の遺産が眠っているので、綺麗サッパリ消えてもらいます。

### NVMeディスクの初期化

SSDはHDDと違い、単純にパーティション消しただけだとパフォーマンスが出ませんし、物理フォーマットも禁忌です。
今回、NVMe接続のSSDなので、nvme-cliを使って、Secure Eraceを行います。
//何度も「NVMe接続の」と書くのは、ハマったからです。。。
//SATA接続の場合はhdparmを使います。

#### nvme-cliのインストール
ArchLinuxのインストーラにはnvme-cliが入っていないため、インストールします。

その前にまずはインターネット接続を確認。
*注：DHCPでつながることを前提にしています。
　　ここでつながらない人は、[Archのインストールガイド](https://wiki.archlinux.jp/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)を参考に設定してください。*

```
# ping archlinux.jp
PING archlinux.jp (160.16.119.98) 56(84) bytes of data.
64 bytes from tk2-235-27344.vs.sakura.ne.jp (160.16.119.98): icmp_seq=1 ttl=53 time=5.39 ms
64 bytes from tk2-235-27344.vs.sakura.ne.jp (160.16.119.98): icmp_seq=2 ttl=53 time=4.74 ms
```

無事つながっていたら、ArchLinuxのパッケージ管理ツール、pacmanでnvme-cliをインストール。

`pacman -S nvme-cli`

#### しめやかにSecure Erase
さよなら、そしてごめんなさい、過去の自分。

`nvme format /dev/nvme0n1`

## ArchLinuxのインストール

[Archのインストールガイド](https://wiki.archlinux.jp/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)が親切なので、全部任せてもよいのですが、念の為手順を記載。

### 時刻合わせ

まずはとにもかくにも時計をあわせます。

`timedatectl set-ntp true`

### パーティショニング

改めてパーティショニング。ここではpartedを使います。
まずはSSDから。

```
# parted -a opt /dev/nvme0n1
GNU Parted 3.3
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.

# 実際にはパーティションテーブルが無い旨の警告が出ます。

(parted) 
```
ここからはpartedのコマンドを叩いていきます。

今回はSSDには/bootと/を切ります。
後は必要に応じてディレクトリ単位でHDDに切っていくことにします。
なお、今回は/bootは128MiB、/は100GiBで作成します。
数字は好きなように調整してください。

まずはパーティションテーブルを作成します。今回はUEFIインストールなので、GPTを使います。
詳細な説明はpartedのヘルプや[Archのガイド](https://wiki.archlinux.jp/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#%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3)に譲り、コマンドだけを羅列します。

`mklabel gpt`
`unit MiB`
`mkpart primary 1 129`
`name 1 boot`
`set 1 esp`
`mkpart primary 129 102529`
`name 2 root`

終わったら念の為パーティションテーブルを見てみましょう。

```
(parted) p                                                                
Model: Samsung SSD 960 EVO 500GB (nvme)
Disk /dev/nvme0n1: 476940MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start      End        Size       File system  Name      Flags
 1      1.00MiB    129MiB     128MiB                  boot      boot, esp
 2      129MiB     102529MiB  102400MiB               rootfs
```
思い通り設定できていれば、`quit`でpartedを抜けます。

続いてHDDにswap領域の作成。
メモリ64GiBに対して、swapも64GiBにします。
なお、swapは2台のHDDに作成すると一応負荷分散されるので、2台ある場合は今回の様に半々などで作成してもよいでしょう。

`parted -a opt /dev/sda`
`mklabel gpt`
`unit GiB`
`mkpart primary 1GiB 33GiB`
`name 1 swap`
`q`
`parted -a opt /dev/sdb`
`mklabel gpt`
`unit GiB`
`mkpart primary 1GiB 33GiB`
`name 1 swap`
`q`

### フォーマット


作成したパーティションをフォーマットしていきます。

/bootに関してはESPとして使う前提のため、vfatとしています。
ルートパーティションは、今回はext4でフォーマットしますが、ここはお好みで。
swap領域は当然swapで。ついでにswaponもしてしまいます。

`mkfs.vfat /dev/nvme0n1p1`
`mkfs.ext4 /dev/nvme0n1p2`
`mkswap /dev/sda1`
`mkswap /dev/sdb1`
`swapon /dev/sda1`
`swapon /dev/sdb1`

### パーティションのマウント
ルートパーティションとESP（EFI System Partition）をマウントします。
まずはルートパーティション

`mount /dev/nvme0n1p2 /mnt`

次にESP。今回は/bootをESPとするので、/mnt/bootにマウントします。

`mount /dev/nvme0n1p1 /mnt/boot`

### パッケージミラーの選択

/etc/pacman.d/mirrorlistを編集して、最も近いミラーを使うようにしましょう。
とりあえずJAISTあたりの、日本の速そうなサーバを残してほかはすべてコメントアウトするのが良いかと思います。
サンプルでドメイン名が.jpのサーバだけを残すsedを作ってみましたが、ご利用は自己責任で。
なお、筆者はviでやりました。

注：2021/4月現在だと、何も考えずにJapanのミラーだけにするのが良さそうです。

`cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.org`
`sed -i 's/\(^Server\)/#\1/g' /etc/pacman.d/mirrorlist`
`sed -i 's/#\(.*\.jp.*\)/\1/g' /etc/pacman.d/mirrorlist`

### カーネルとパッケージのインストール
[Archのガイド](https://wiki.archlinux.jp/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#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)の内容に加えてviを入れておきます。エディタは好きなものを入れるのがよいと思います。
極めてあっさりしていますが、Linuxカーネルと基本的なコマンドがこれで全部インストールされます。

`pacstrap /mnt base linux linux-firmware vi`

### chroot

新しくインストールしたArchLinuxにchrootします。
ここで叩いてるコマンドはそれぞれなんかをラッピングしてますが、何をやっているか知りたい人は、別の機会にgentooのインストールをしてみたらなんとなくわかるかもしれません。

`genfstab -U /mnt >> /mnt/etc/fstab`
`arch-chroot /mnt`

### システム設定

ここまでの作業はメモリ上に展開されたOSでの作業でしたが、ここから先の設定はすべてインストールしたOSの設定となり、設定はすべて新環境のものとして保存されます。

インストールした環境に入ったら、まずはタイムゾーンを設定して、BIOS時計を更新します。
下記の場合、BIOS時計はUTCで設定されます。


`ln -sf /usr/share/zoneinfo/Region/Asia/Tokyo /etc/localtime`
`hwclock --systohc`

SSDを使う場合は忘れずにfstabを更新しておきましょう。
noatimeをつけておかないと、SSDの劣化が早くなる原因になります。
なお、SSDにはdiscardをつけることにより、trimを有効にする、と言われていた時期も有りますが、discardはNVMeでは実行すべきではないそうです。

```
vi /etc/fstab
# Static information about the filesystems.
# See fstab(5) for details.

# <file system> <dir> <type> <options> <dump> <pass>
# /dev/nvme0n1p2
UUID=xxxxxxxx     /       ext4    rw,noatime      0 1
#　　　　　　　　　　　　　　　　　　　　　　　↑noatimeを追加

# /dev/nvme0n1p1
UUID=xxxxxxxx     /boot   vfat    rw,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro     0 2
#　　　　　　　　　　　　　　　　　　　　　　　↑noatimeを追加

# /dev/sda1
UUID=xxxxxxxx     none    swap    defaults        0 0

# /dev/sdb1
UUID=xxxxxxxx     none    swap    defaults        0 0
```

#### ローカライゼーション
どうでもいいですが、ローカライゼーションのことをL11nというらしいです。
最近流行りのK8sといい、わけがわからないのでやめてほしいです。

/etc/locale.genの編集は、実際はviを使ってやりましたが、スマートにやるならこういう感じかと思います。こちらもご利用は自己責任で。
日本語のインストールガイドに従うと日本語と英語のUTF-8が設定されます。

`sed -i 's/#\(en_US.UTF-8\)/\1/' /etc/locale.gen`
`sed -i 's/#\(ja_JP.UTF-8\)/\1/' /etc/locale.gen`
`locale-gen`

LANGの設定はコンソールを使う間はめんどくさいので一般的にはこうです。
フレームバッファドライバやkonsoleを使うのであれば、日本語設定しても良いかと思います。

`echo "LANG=C" > /etc/locale.conf`

インストールガイドには、コンソールキーマップを設定している場合は、と説明がありますが、キーボードレイアウトの話なので、設定はインストールの最初にやったキーボードレイアウトと同じ話です。
キーボードレイアウトはjp106で設定しているので、下記の通り。

`echo "KEYMAP=jp106" > /etc/vconsole.conf`

#### ネットワーク設定

何も考えずにやるといろいろと失敗します。
まずはガイド通り、hostnameを設定して、/etc/hostsを編集します。
ホスト名はご随意に。
*注：DHCPを使っていない人は、この節は無視して、[Archのガイド](https://wiki.archlinux.jp/index.php/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A)を参考に設定してください。*

```
# echo "mydesktop" > /etc/hostname

# vi /etc/hosts
127.0.0.1	localhost
::1		localhost
127.0.1.1	mydesktop.localdomain	mydesktop
```

ここから先、ガイドでは見えにくいリンクを踏まないとスルーしてしまうのでが見落としやすいですが、ネットワーク設定をちゃんとしておかないと、再起動後ネットワークに繋がりません。
現時点ではインストーラが起動するdhcpcdでIPアドレスが自動設定されていますが、インストール直後はdhcpcdは無効になっています。

前提として、筆者の環境ではネットワークはブロードバンドルータ配下にあり、dhcpを利用して、MACアドレスによるIPアドレスの固定化を実施しています。

今回はsystemd-networkdとsystemd-resolvedを用いて動的IPアドレスの設定を行います。
なお、IPv6設定は何度やってもうまく行かなかったので割愛。別記事にします。

まずはNICのデバイス名を把握します。

```
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp31s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
3: enp36s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
```

このマシンにはNICが2枚刺さっているので3つ並んていますが、1枚なら2つになります。
UPになっているのがenp36s0なので、今回はこのNICに対して設定します。

```
# vi /etc/systemd/network/20-wired.network
[Match]
Name=enp36s0

[Network]
DHCP=ipv4

[DHCP]
ClientIdentifier=mac
```

最後の1行が無いと少なくとも我が家のルータではIPアドレスが固定になりませんでした。
この行を追加する必要があるかどうかは、インストール完了後にIPアドレスが固定出来ているか確認することで判別出来ます。

続いてresolve.confをsystemd-resolvedが用意するスタブに置き換えます。
*注：DNS設定をdhcpに任せない場合はこの手順は無視してください。*

`systemctl start systemd-resolved`
`mv /etc/resolve.conf /etc/resolve.conf.org`
`ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf`

設定がすべて終わったらsystemd-networkdとsystemd-resolvedを有効にします。

`systemctl enable systemd-networkd`
`systemctl enable systemd-resolved`

#### rootパスワードの設定

パスワードはご随意に。最近は8桁英数混じりは"脆弱"だそうです。
理想は英数大文字小文字記号混じり10桁以上らしいです。

`passwd`

#### ブートローダーのインストール

ESPを/bootにマウントしている前提です。

まずはgrubとefibootmgr、ついでにCPUのマイクロコード（筆者はAMCのCPUなのでamd-ucode）をインストールします。
*注：IntelCPUの場合はintel-ucodeです。*

`pacman -S grub efibootmgr amd-ucode`

続いて、ブートローダー起動時にCPUのマイクロコードがロードされるように設定ファイルを作成します。

`grub-mkconfig -o /boot/grub/grub.cfg`

最後にブートローダーをインストールします。

`grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub`

インストール作業は以上です。お疲れ様でした。

### 再起動

さよならArchインストーラ。こんにちはArchLinux。

`exit`
`reboot`

## OS初期設定

無事起動に成功したら、最低限の設定をいろいろとしていきます。

### まずはユーザ作成

とにもかくにもroot以外のユーザを作ります。
なんでもいいですが、ここではadminを作ります。
以降は基本sudoによってadminさんがrootの代役を努めます。

`useradd -m -G wheel admin`
`passwd admin`

続いてwheelグループによるsuやsudoの制御を有効にします。

```
# vi /etc/pam.d/su
#%PAM-1.0
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth            required        pam_wheel.so use_uid　　#＜＝ココをコメントアウト
auth            required        pam_unix.so
account         required        pam_unix.so
session         required        pam_unix.so

# vi /etc/pam.d/su-l
#%PAM-1.0
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth            required        pam_wheel.so use_uid　　#＜＝ココをコメントアウト
auth            required        pam_unix.so
account         required        pam_unix.so
session         required        pam_unix.so
```

続いてsudoをインストール。

`pacman -S sudo`

/etc/sudoersを編集します。
筆者は知りませんでしたが、visudoで編集するそうです。
wheelグループのユーザのみがsudo出来るように設定します。

```
# visudo
## sudoers file.
##
## This file MUST be edited with the 'visudo' command as root.
## Failure to use 'visudo' may result in syntax or file permission errors
## that prevent sudo from running.
##
## See the sudoers man page for the details on how to write a sudoers file.
##
.
.
.
%wheel      ALL=(ALL) ALL　#＜＝ココをコメントアウト
.
.
.
```

編集後、/etc/sudoersのパーミッションを変更します。

`chown -c root:root /etc/sudoers`
`chmod -c 0440 /etc/sudoers`

ここまで出来たらrootを抜けて、一般ユーザで入り直します。

自宅のデスクトップマシンで、ssh含め、なんのサービスも動かしていないので、割とザルです。

### pacmanのミラーリスト更新

インストール直後は、ミラーリストが初期値に戻ります。
このままだと実用に耐えないので、/etc/pacman.d/mirrorlistを更新します。
インストール時は手動で日本のサイトのみを残しましたが、今回はせっかくなのでArchのツールを使ってみます。
当然のことながら、別に前と同じ手順でもOKです。
詳細は[ここ](https://wiki.archlinux.jp/index.php/%E3%83%9F%E3%83%A9%E3%83%BC)に任せます。

`sudo pacman -S pacman-contrib`
`sudo su -`
`cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup`
`exit`
`sudo rankmirrors -n 10 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist`

### 時刻同期の設定

[ここ](https://wiki.archlinux.jp/index.php/Systemd-timesyncd)の解説が必要十分なので、こちらを参考に設定するのがよいかと思います。

### iptables

[ここ](https://wiki.archlinux.jp/index.php/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%95%E3%83%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB)の解説が必要十分なので、こちらを参考に設定するのが良いかと思います。
読んでもわからない人は多分まだarchは早いので、まずはubuntuあたりから始めて、iptablesとはなんぞやから勉強しましょう。

### タブ補完

bash-completionをインストールしましょう。

`sudo pacman -S bash-completion`

### syslogの設定

初期状態ではログはjournalにしか出ず、著しく使い勝手が悪いので、syslog-ngとlogrotateをインストールしましょう。

`sudo pacman -S syslog-ng`
`sudo pacman -S logrotate`

基本的には何もしなくてもinfoが使えるのでいらないですが、古式ゆかしいユーザはmanを入れても良いかもしれません。
`sudo pacman -S man-db`
`sudo pacman -S man-pages`


## GUIの整備

OSの最低限の設定は終わったので、そろそろデスクトップ環境を入れていきましょう。
基本的には[このあたり](https://wiki.archlinux.jp/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#%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%82%AB%E3%83%AB%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9)を参照して設定となります。
ただ、一部引っかかったので念の為流れにそっていきます。

#### Xサーバ

Waylandはまだまだ枯れていないという話もあるので、今回はXorgで行きます。
筆者の環境はAMDのGPUなので、xf86-video-amdgpuを入れます。

`sudo pacman -S xf86-video-amdgpu`

#### デスクトップ環境

続いて統合デスクトップ環境をインストールします。
好きなものを選べばいいのですが、筆者は軽量を目指してLXQtを入れました。

`sudo pacman -S lxqt`

デフォルトのアイコンセットをインストールします。

`sudo pacman -S oxygen-icons`

#### ディスプレイマネージャ

デスクトップ環境をチョイスするマネージャ。このあたりWindowsとは大きく違うところ。
なんでもよいですが、LXQtの推奨マネージャであるSDDMを入れました。

`sudo pacman -S sddm`
`sudo systemctl enable sddm`

念の為設定ファイルも用意しておきます。[この辺](https://wiki.archlinux.jp/index.php/SDDM)を参照して必要に応じて設定してください。

`sudo su -`
`sddm --example-config > /etc/sddm.conf.d/sddm.conf`
`exit`

ついでにスクリーンセイバーや画面のパスワードロック機能も入れておきます。

`sudo pacman -S slock`
`sudo pacman -S xscreensaver`

忘れずにフォントも入れます。
LXQtのガイドには無いのですが、筆者はこれを忘れた結果、文字が何も表示されないGUIが出て焦りました。
筆者はgoogleの信者なので今回はnoto-fontsを入れておきます。
別にIPAフォントとかでもよいと思います。
*notoはNoTofuらしいです。□のことを豆腐というらしいですが。。。*

`sudo pacman -S noto-fonts`
`sudo pacman -S noto-fonts-cjk`
`sudo pacman -S noto-fonts-emoji`
`sudo pacman -S noto-fonts-extra`

IPAフォントなら
`sudo pacman -S otf-ipafont`
`sudo pacman -S otf-ipamjfont`
という感じです。

pacmanのログを見る限り、ここまで明示的にXorgをインストールしていませんが、依存性解決で勝手にインストールされているようです。

エラーがなければ、再起動するとguiで起動するはずです。

なにか設定があった気がしますが、筆者がやったときはフォントを入れ忘れていてさっぱりわからなかったのと、多分感性でなんとかなったので忘れました。

無事起動したら、セッションマネージャでLXQtを選んでログイン。
問題なければデスクトップ環境が表示されるはずです。

#### ブラウザのインストール

ここからはQTerminalで作業していきます。正しくインストールされていれば、Ctrl-Alt-Tで起動します。

まずはオープンソースの味方、firefoxから。

`sudo pacman -S firefox`

*※複数のブラウザが不要な人は読み飛ばしてください。*

続いてchromeのOSS版、Chromium。

`sudo pacman -S chromium`

#### 日本語入力環境のインストール

この時点ではまだ日本語が入力出来ないので、IMEをインストールしていきます。
今回はgoogle日本語入力ベースのfcitx-mozcを使います。

`sudo pacman -S fcitx-mozc`
`sudo pacman -S fcitx-qt5`
`sudo pacman -S fcitx-configtool`
`sudo pacman -S fcitx-im`

終わったらユーザホームの.xprofileを編集します。
これがわからず、日本語入力が出来ず右往左往していました。
xセッションにおける環境変数等は.xprofileや.xsessionで設定します。どれくらいいるかわかりませんが、コンソール環境で.bash_profileを使っていた人は注意してください。

```
# vi .xprofile 
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
```

終わったらログインし直すと半角/全角キーで日本語入力が出来るようになっているはずです。
多分この辺でデスクトップ環境の日本語化をいろいろやっていますが、GUIベースですべて片付くので、ググりつつやってみてください。

ついでにfirefoxの日本語対応をやっておきます。

`sudo pacman -S firefox-i18n-ja`

#### その他諸々のツール

まずはエディタ。
メモ帳代わりのleafpadとコーディングに便利なvscodeを入れます。

`sudo pacman -S leafpad`
`sudo pacman -S code`

フォト代わりにLXImage-QTも入れておきます。

`sudo pacman -S lximage-qt`

NASをマウントしたい場合などは、cifs-utilsも入れましょう。
さらにLXQtのファイルマネージャと統合する場合は、gvfs-smbも入れます。

`sudo pacman -S cifs-utils`
`sudo pacman -S gvfs-smb`

今の状態ではろくさ音が出ないのでPulseAudioを入れます。

`sudo pacman -S pulseaudio`
`sudo pacman -S pavucontrol`

動画プレイヤーのsmplayerと音楽プレイヤーのAudaciousを入れます。

`sudo pacman -S smplayer`
`sudo pacman -S audacious`

フォトレタッチしたい場合はGIMPを入れましょう。

`sudo pacman -S gimp`

VNCがほしければTigerVNCを入れましょう。

`sudo pacman -S tigervnc`

リモートデスクトップが使いたい場合はRemminaを入れましょう。

`sudo pacman -S tigervnc`


## AURの利用

Archには[AUR（Arch User Repository）](https://wiki.archlinux.jp/index.php/Arch_User_Repository)というArchユーザが整備したすばらしいリポジトリが存在しています。これを使うために、これまたユーザが作成した様々なツールが用意されていますが、ここではyayを使用します。
これを使うことにより、Archの使い勝手が10倍（筆者比）良くなります。

まずは前提となるパッケージのインストール。

`sudo pacman -S base-devel`
`sudo pacman -S git`

ご自身の管理ポリシーに応じて、適当にgitリポジトリを置きたいディレクトリに移動します。
筆者はユーザリポジトリは/home/*'ユーザ名'* 配下に置きたいので下記の様にしました。

`cd ~`
`mkdir local_rep`
`cd local_rep`

yayをインストールします。

`git clone https://aur.archlinux.org/yay.git`
`cd yay`
`makepkg -si`

### Archをさらにデスクトップっぽく

なんだかんだでデフォルトではArchはサーバ向けのOSです。
十分にデスクトップ環境として使えますが、更に使いやすくしていきます。

#### Linux Zenカーネルのインストール

デスクトップで動かすにあたって色々とメリットのあるZenカーネルをインストールします。Zenカーネルについては[こちら](https://wiki.archlinux.jp/index.php/%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB)を参照のこと。

`sudo pacman -S linux-zen`

無事インストール出来たら再起動しましょう。
再起動したら、自動的にlinux-zenで上がっているはずです。上がっていない場合は、ググってみましょう。

#### chromeのインストール

Chromiumで十分という人もいると思いますが、より親しみのあるchromeをインストールします。Chromiumもそうですが、Linux環境では色々と不具合もあるので、ブラウザにこだわりのない人、Google信者ではない人はfirefoxだけで十分だと思います。
先程インストールしたyayを早速使っていきます。

`yay -S google-chrome`

#### Compizのインストール

WindowsVista以降、ウインドウを上や下にスナップするとウィンドウが最大化されたり、左右にスナップすると1/2サイズでタイル化されたりという素敵（？）機能がありました。LinuxでもCompizというウインドウマネージャを使うことで実現可能なのでよりデスクトップマシンぽさを出すために、インストールします。

`sudo pacman -S compiz`
LXQtでCompizが使われるように設定ファイルを書き換えます。
ここはArchのLXQTのマニュアルが古いため、後ろにccpをつけないのが正解です。

```
vi ~/.config/lxqt/session.conf

[General]
window_manager=compiz
```

## 一旦クロージング

ここまでくればデスクトップマシンとしてまずまず使い物になっているかと思います。
あとは新しいデスクトップマシンで、ググりながら試行錯誤して、快適な環境を作っていきましょう。

なお、筆者はこのあとKDEにして戻したりJACKにチャレンジして挫折したり、色々しましたが、特に共有できることもないので割愛。。。
メインマシンをArchLinuxにして良かったこと、悪かったこと色々ありますが、概ね良かったことが多い気がします。

■良かったこと
1. 最近の不安定なWindowsUpdateから開放された。
2. yayで大体のアプリがインストールできる。
3. 常にほぼ世界の最新に追随可能なので、セキュリティも常にほぼ世界最新。
4. ALSAでUSB-DACの音を聞くと別次元だったこと。
5. RetroArchの存在を知り、出会えたこと。

■悪かったこと
1. たまにアップデートすると不安定になることがある
2. Windowsのゲームはなんだかんだでかなりプレイしにくい

### 最後に

Archはなんだかんだ言って、gentoo同様に大体の他のディストロとは比較にならないくらい突っ走ったディストロ（ディストロと呼ぶのも何か違うくらい）です。何かがうまく行かなかったとしても、数日たってpacman -Syしてから再試行したら何もかもうまくいくこともあります。
仮に不安定だったとしても、挫折せずに再試行してみましょう。