Arch LinuxでXfce+i3wm環境を作ろう（インストールと設定）

Arch LinuxでXfce+i3wm環境を作る方法を解説します。
このサイトとArch Wikiだけ見ておけばとりあえず大丈夫なように書いています。

![スクリーンショット_2024-12-01_18-26-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931772/54a4088b-0f0b-171c-e90a-48e708e5147b.png)

追記：[archinstall](https://qiita.com/undercover/items/1959970c281dc3b063ef)を使う方法もあります

# isoのダウンロード
[公式サイト](https://archlinux.org/download/)から日本のミラーを選択してisoをダウンロードします。
（ファイル名の例：archlinux-2024.11.01-x86_64.iso）
必要ならチェックサムを計算します。任意。

# USBの作成
WindowsならRufus、MacならRaspberry Pi Imagerが楽で良いです。

# 起動
可能ならUEFIで起動しましょう。PCの設定を弄ってください。
自分はUEFI環境にインストールしましたが、BIOS環境ではパーティション・ブートローダーあたりの設定が異なるので適宜他の記事も参考にしてください。
（ちなみに、私の環境ではArch LinuxのインストールUSBがBIOSモードで起動したのですが、インストール後の環境はUEFIになっていました。謎。）
普通にUEFI環境が使える方は気にする必要はありません。

# ライブ環境を設定する
キーボードを設定します
```
loadkeys jp106
```

Wi-Fi接続をします。デスクトップの場合はLANケーブルを繋げば特にやることはありません。
```
iwctl
```
以下を入力します。
```
device list
```
ここで表示された無線LANデバイス名をdeviceNameとします。
```
station deviceName scan
station deviceName get-networks
```
ここで表示されたアクセスポイントの名前をWifiNameとします。
```
station deviceName connect WifiName
```
exitでiwctlから抜けます。
これでWi-Fiの設定は終わりです。ネットに繋がっているかpingで確認しましょう。
```
ping google.com
```
（PingはControl+Cで終了）

システムクロックを以下のコマンドで合わせます。
```
timedatectl set-ntp true
```
# パーティション分け
デュアルブート環境の場合はミスったら簡単に環境が吹き飛んでしまうのでよく調べましょう。怖いなら物理的にディスクを分けるのも良い手です。

以下のコマンドでディスクの名前を確認します。
```
lsblk
```
sdaにインストールすると仮定します。
```
cgdisk /dev/sda
```
![VirtualBox_arch_11_11_2024_02_49_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931772/40122a42-622b-dbf9-ffec-03674aa2b641.png)
いらないパーティションをdeleteで消します。

### EFIパーティション
freespaceを選択し，Newを押す
そのままEnter
+512Mを入力 (始めから512MiB)
ef00を入力
名前を入力(ここでは"EFI")

### rootパーティション
freespaceを選択し，Newを押す
そのままEnter
-3Gを入力 (終わりから3GiB)
そのままEnter
名前を入力(ここでは"ROOT")

### swapパーティション
freespaceを選択し，Newを押す
そのままEnter
そのままEnter
8200を入力
名前を入力(ここでは"swap")

↓こうなればOK
![VirtualBox_arch2_11_11_2024_03_08_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931772/7b6f9da9-a137-1c6e-e6b1-146c247d517e.png)

Writeを選択して変更を確定させた後、Quitで終了します。

# フォーマット
もう一度lsblkでパーティションを確認します。
```
lsblk
```
EFIパーティション（ここではsda1）をフォーマットします。
```
mkfs.fat -F32 /dev/sda1
```
ROOTパーティション（ここではsda2）をフォーマットします。
Btrfsはext4に代わるなんか新しいやつらしいです。
```
mkfs.btrfs /dev/sda2
```
swapパーティション（ここではsda3）をフォーマットします。
```
mkswap /dev/sda3
```

# マウント
rootパーティションをマウントします。必要に応じてまたlsblkで確認します。
```
mount /dev/sda2 /mnt
```
/mnt/bootを作成し，EFIパーティションをマウントします。
```
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
```
swapを起動します。
```
swapon /dev/sda3
```

# システムのインストール
さて、ここまででもう嫌気が差しましたがいよいよ本体をインストールします。

ミラーを選択します。
```
reflector --country Japan --age 12 --protocol http,https --sort rate --save /etc/pacman.d/mirrorlist
```
次に、pacstrapコマンドで"Arch Linux"本体を形成します。
Arch Linuxのインストールではこれを手動で行う必要があります。

（余談ですがWindowsとかと違いLinuxにはchrootという便利なものがあります。
例えばdebootstrapでDebian環境を作りchrootすれば「Arch Linux上でDebianのパッケージ管理ツールであるaptを使う」こともできます。
また、既存のisoからsquashfsを抽出しchrootで（isoは起動せずとも）中身に変更を加え、再度squashfsをisoに戻すことでオリジナルディストリビューションを作ることもできます。（同じパッケージに同じ.configを用意すれば簡単に同じ環境を再現できる）
実際にこういった方法で作成されているディストリビューションは存在します。
Arch Linuxの場合はarchisoでビルドされているのですが（公式も）、chrootを用いた手動でのisoの編集も可能なのです。）

pacstrapで必須の linux linux-firmware base パッケージと、パッケージのビルドに必要な base-devel パッケージグループをインストールします。また、パッケージ管理に便利な pacman-contrib もインストールします。
nano や neovim など好みのテキストエディタも追加でインストールしましょう。
```
pacstrap /mnt linux linux-firmware base base-devel pacman-contrib nano
```
# システムの設定
fastabを設定します。
```
genfstab -U /mnt >> /mnt/etc/fstab
```
pacstrapでインストールしたArch Linuxの中にchrootします。
これにより/mntがルートディレクトリになります。
```
arch-chroot /mnt
```

タイムゾーンをTokyoに設定します。
```
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```
ハードウェアクロックを設定します。
```
hwclock --systohc
```

# ローカライゼーション
/etc/locale.gen の 「en-US.UTF-8」 と 「ja_JP.UTF-8」 の行の#を消してコメントを解除します。
nanoで編集します。
```
nano /etc/locale.gen
```
コメントを解除したらlocale-genでロケールを生成します。
```
locale-gen
```
使用するロケールを /etc/locale.conf に書き込みます。
文字化け対策で一旦英語にして、後で日本語へ変更することにします。
```
echo LANG=en_US.UTF-8 > /etc/locale.conf
```
日本語配列のキーボードを使用している場合はコンソールキーマップを設定します。
```
echo KEYMAP=jp106 > /etc/vconsole.conf
```

# コンピュータ名の設定
コンピュータ名を設定します。（ここではarch）
好きな名前で良いです。
決められないときは「OS名＋PCやCPUの名前」で良いでしょう。
```
echo arch > /etc/hostname
```
この名前を /etc/hosts にも書き込みます。
```
nano /etc/hosts
```
```
127.0.0.1 localhost
::1       localhost
127.0.0.1 arch.localdomain arch
```

# ネットワーク設定
現在のライブ環境とは異なりインストールされたシステムではネットワーク接続自体が有効になっていません。
```
pacman -S networkmanager wpa_supplicant dialog iw iwd dhcpcd netctl
```
networkmanagerが起動時に立ち上がるようにします。
```
systemctl enable NetworkManager
```

# パスワード
rootアカウントのパスワードを設定します。
```
passwd
```

# ブートローダーの設定
systemd-bootを使います。
```
bootctl --path=/boot install
```
/boot/loader/loader.confを弄ります。
```
nano /boot/loader/loader.conf
```
```
default arch
timeout 2
editor  no
```
arch エントリを /boot/loader/entries/arch.conf に作成します。
（お使いの環境に応じてsda2をrootパーティションの値に置き換えてください）
```
blkid -s PARTUUID /dev/sda2 > /boot/loader/entries/arch.conf
nano /boot/loader/entries/arch.conf
```
```
title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=PARTUUID=********-****-****-****-************ rw
```
AMD の CPU を使用している場合は /intel-ucode.img を /amd-ucode.img に変更してください。
またPARTUUIDのダブルクオーテーションは要らないので外しましょう。

 Intelの場合は intel-ucode を、 AMDの場合は amd-ucodeをインストールします。
 ```
 pacman -S intel-ucode
 ```
 # 再起動
exitコマンドでchroot環境から抜け、rebootコマンドで再起動します。
長かったですがArch Linux本体のインストールはここで終了です。お疲れ様でした！

# 起動とログイン
正しくインストールできていると以下の画面が出ます。
![VirtualBox_arch2_11_11_2024_22_29_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931772/392243d4-57e7-1f70-f57a-2965ad5021a6.png)
rootと打ってログインしましょう。

ネット関連の設定をします。
```
nmtui
```
activate a connectionを選択してWi-Fiに接続してください。

また、念の為pacmanでパッケージのアップグレードをしておきましょう。
```
pacman -Syu
```
# 一般ユーザーの作成
rootのまま作業を続けるのは好ましくないので、一般ユーザーを作成します。
ここではユーザー名はarch-userとしていますが、好きな名前で構いません。
```
useradd -mg wheel arch-user
```
一般ユーザーのパスワードを設定します。
```
passwd arch-user
```
wheelグループのユーザーがsudoコマンドを使用して一時的に特権を得られるように設定を変更します。
以下のコマンドを打った後、「%wheel ALL=(ALL:ALL) NOPASSWD: ALL」という行を探してコメントアウトします。
```
EDITOR=nano visudo
```
logoutコマンドでrootからログアウトし、先程作成した一般ユーザーでログインしましょう。
```
logout
```
# AURヘルパーのインストール
AURヘルパーをインストールします。
AURとはArch User Repositoryの略で、AURヘルパーを用いると公式リポジトリにないパッケージのビルドとインストールがコマンド一つでできます。Arch Linuxの一番便利なところです！

yayが好きなのでyayをインストールします。
```
sudo pacman -S git go
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
```
homeディレクトリに戻ります。
```
cd ~
```
ついでにpacmanのミラーを設定しておきます。
```
yay -S reflector
sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/__mirrorlist.hoge
sudo reflector --country Japan --age 12 --protocol http,https --sort rate --save /etc/pacman.d/mirrorlist
yay -Syu
```

# zshのインストール
zshを入れます！
yayでzshをインストールします

（yayにはsudoをつける必要がありません）
```
yay -S zsh
```
ログインシェルをzshに変更します。
```
chsh -s $(which zsh)
```
zshの設定ファイルを作ります。
自作するのは大変なのでgrml-zsh-configというのを利用しましょう
```
yay -S wget
cd ~ && wget -O .zshrc https://git.grml.org/f/grml-etc-core/etc/zsh/zshrc
```
デフォルトのEditorをnanoにしておきます。
ファイルの末尾に「export EDITOR=nano」を追加します。
```
nano ~/.zshrc
```
設定ファイルができたので、ログインシェルを手動で起動します。
```
exec zsh -l
```
zshになった事を確認します。
```
echo $0
```
pacman の出力をカラー化します。
「Color」と書いてある行を探してコメントアウトします。
```
sudoedit /etc/pacman.conf
```

# GUI環境のインストール
ディスプレイサーバーをインストールします。
```
yay -S xorg-server
```

# グラフィックドライバのインストール
私の環境では特に必要ないので割愛しますが、必要な場合は適宜調べてください。

# フォントのインストール
Google Noto Fontsをインストールします。
```
yay -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra
```

# ディスプレイマネージャのインストール
ディスプレイマネージャとはログイン画面とウィンドウマネージャの起動を担うソフトウェアです。
```
yay -S lightdm lightdm-gtk-greeter
```
以下のコマンドでLightDMを有効化します。
```
sudo systemctl enable lightdm
```

# デスクトップ環境とウィンドウマネージャのインストール
ここからが醍醐味です。本記事ではXfce+i3wmというかなり尖った構成にしていきます。

まずXfceをインストールします。
```
yay -S xfce4 xfce4-goodies
```
続いてi3wmを入れます。
(i3wmを入れる時はi3statusとか余計なアドオンは不要です)
```
yay -S i3-wm
```
picomとrofi、fehをインストールします。
（注：VirtualBox上に導入している場合、picomがあるとバグります）
ついでにxarchiverも入れておきましょう。
```
yay -S picom rofi xarchiver feh
```
後で必要になるのでブラウザを入れます。
```
yay -S google-chrome
```

# キーボードとロケールの設定
Xorgでのキーボードレイアウトを設定します。
```
sudo localectl set-x11-keymap jp
```
システム全体のロケールを日本語へ変更します。
「LANG=en_US.UTF-8」をコメントアウトして「LANG=ja_JP.UTF-8」を追記します。
```
sudoedit /etc/locale.conf
```

さて、ここで再起動です。
```
sudo reboot
```

# GUI環境を起動
起動するとこういう画面になります。
右上からXfceを選択して起動します。
![VirtualBox_arch2_12_11_2024_05_32_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931772/d78c8bbe-b053-9e58-1dbc-b0a94886d041.png)

本題です。i3wmをXfceに統合していきましょう。

設定から「セッションと起動」を開いてxfwm4とxfdesktopを「しない」に変更します。
その後「セッションを保存」をクリックします。
![VirtualBox_arch2_12_11_2024_05_39_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931772/c48e138a-ad91-79d2-6f41-7032cec5cfe5.png)

次に「自動開始アプリケーション」を開きます。
i3を自動起動アプリケーションに追加してください。
（名前もコマンドも「i3」）
![VirtualBox_arch2_12_11_2024_05_42_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931772/2100f9a6-a356-1e29-3c79-fc0a381930ea.png)

Xfceのキーボードショートカットをすべて削除します。
![VirtualBox_arch2_12_11_2024_05_45_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931772/6a0d40ad-1cd5-ed19-001e-f556ccc732de.png)

さて、本来はi3wmやrofi、picomの設定をする必要があるのですが、自力で１からやるのはめんどくさいです。
というわけで、予めすごい人が作ったdotfilesを移植して動かすことにしましょう。
（Linuxのソフトウェアの設定ファイルは基本的にホームディレクトリと「~/.config」の中の２箇所にあります。同じパッケージに同じ設定ファイルがあれば簡単に環境を移植できます。）
Archmageというディストリビューションがあります。その[ソースコード](https://github.com/totalsouldisorder/Archmage/archive/refs/tags/archmage1.4.tar.gz)を拝借してきましょう。
airootfs/home/liveuser以下のディレクトリのファイルを、すべて自分のホームディレクトリにコピペします。
途中ファイルを置き換えるか否か訊かれますが、全て置き換えてください。

終わったら再起動します。
```
sudo reboot
```
再起動したらXfce+i3wmの環境ができているはずです。（いよいよ）

# 細々とした設定
スクリーンロッカーをインストールします。
```
yay -S light-locker
```
ログイン時に自動起動するようにします。
.xprofileに「light-locker --lock-on-suspend &」と追記します。
```
nano ~/.xprofile
```

おなじみFcitxとMozcをインストールします。
普通にインストールするとFcitx4が入るのですが、今回はより新しいFcitx5を入れていきます。
```
yay -S fcitx5-im fcitx5-mozc
```
これも.xprofileに記述します。
```
nano ~/.xprofile
```
↓以下の文章を書きます
ーーーーーーーーーーーーーーーー
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
ーーーーーーーーーーーーーーーー

仕上げに、サウンドに必要なPluseAudioと、パネルから音量を管理するのに必要なpavucontrolをインストールします
```
yay -S pulseaudio pavucontrol
```

これで基礎的なソフトウェアのインストールは本当に本当に終わりです。お疲れ様でした！

# Optionalな設定
・マウスを自動的に非表示にするツールのunclutterをインストール
```
yay -S unclutter
```
i3の時と同じように、xfceでログイン時に自動起動するように設定をします。

・Powerlineをインストール
[この記事](https://qiita.com/undercover/items/7aae5636316cb1b1a4a2)を見ます

・zshをいい感じにする
[こっちの記事](https://qiita.com/undercover/items/ac22c4750b2f34f16410)を見ます

・ゴミ箱を導入する
素のXfceのファイルマネージャ（Thunar）にはゴミ箱機能がありません。
以下のコマンドで導入します。
```
yay -S gvfs
```

・TRIMを有効化する
もしSSDにArch Linuxをインストールした場合、TRIMを有効化しておくべきです。
TRIMには定期的なTRIMと連続的なTRIMがあります。定期的なTRIMが通常推奨される方法なので、それを有効化します。
```
yay -S hdparm
sudo hdparm -I /dev/sda |grep TRIM
```
suporttedと書いてあることを確認します。
```
sudo systemctl enable fstrim.timer
sudo systemctl status fstrim.timer
```

# 参考文献
参考文献の作者様に感謝申し上げます。
https://blog.livewing.net/install-arch-linux-2021
https://qiita.com/Hayatann/items/09c2fee81fcb88d365c8
https://zenn.dev/imzrust/articles/28f8f5babd23ed
https://forum.endeavouros.com/t/tutorial-easy-setup-endeavour-xfce-i3-tiling-window-manager/13171
https://motorailgun.hatenadiary.jp/entry/2023/05/25/214500

# †Arch Linux† 沼をenjoyしよう！
（Arch Linuxというかi3wm）使うと普通のWindowsとかMacOSには戻れなくなります