Arch Linux + i3 快適環境を構築したときのログ

以前の Arch Linux + Xfce のインストール記事 がだいぶ古くなり、インストール方法が変わりましたので新しく記事を書きます。また、筆者の Arch Linux 環境も大きく変わりましたので、それも併せて紹介します。

Arch Linux とは

Arch Linux は、常に最新・最先端を追い求める人に最適な Linux ディストリビューションです。シンプル・最新・実用的・ユーザー中心・汎用であることを原則としています。必要なものを必要なだけインストールするので、自分の求めるようにシステムを構成できます。

Arch Linux はこんな人におすすめです。

  • 常に最新のものを使いたい
  • 余計な物は入れたくない
  • 自分で理解して構成したい
  • Linux の勉強のきっかけが欲しい

Arch Linux はユーザーフレンドリーというわけではなくユーザー中心なディストリビューションです。こんな人にはおすすめできないかもしれません。

  • 他力本願寺
  • 全部自分でやるの面倒
  • 英語を読む気が更々ない
  • 黒画面アレルギー

自分でドキュメントを読んで問題を解決する DIY (Do It Yourself) の姿勢を持った人にぴったりのディストリビューションだと思います。

インストールする環境

UEFI (Unified Extensible Firmware Interface) が使えるコンピュータにインストールします。 BIOS のシステムでもインストールできますが、インストール方法はこの記事と大きく異なります。 CPU は Intel で、 GPU は NVIDIA のものを使用します。 OS をインストールするストレージは SSD で、 Arch Linux 専用にします。なお、インターネット接続が必須です。

Linux メインのマシンを仕立てるなら GPU は AMD の方が良いかもしれません。 NVIDIA はドライバをオープンにしていないため、 Linux では面倒なことになる場合があります。 Linux の生みの親である Linus Torvalds 氏が中指を立てて "NVIDIA, f*ck you!" と言った のはあまりにも有名です。

インストールの構成

インストール作業は自分の手でコマンドを打ってインストールします。最近は archinstall という実験的なインストーラが付属するようになりましたが、 OS の構成の理解のためこれは使わないようにします。

ディスプレイサーバは Xorg をインストールします。 AMD の GPU なら Xorg の後継の Wayland でも問題ないでしょう。

ディスプレイマネージャは LightDM で、ウィンドウマネージャは軽量な i3 をインストールします。 i3 は Windows や macOS などのスタック型とは違い、タイル型のウィンドウマネージャです。ウィンドウが重ならないよう自動的に敷き詰められるので、情報の見落としがなくなります。また、ウィンドウの操作のほとんどをキーボードで行えるため、手の移動量が圧倒的に少なくなり作業効率が上がります。 Vim のキーバインドが好きならきっと気に入るでしょう。 Web ブラウザに Vimium を入れれば Web ブラウジングですらキーボードでできます。

システムが少し大きくなってしまいますが、 Windows や macOS のようなウィンドウマネージャをサクッと使いたい人は GNOME や KDE や Xfce など、 ウィンドウマネージャとアプリケーションがセットになったデスクトップ環境をインストールするのがおすすめです。

パーティションは簡単のためブートパーティションとルートパーティションの 2 つのみ作成します。メモリ 32 GB の環境下でスワップパーティション無しで困ったことは今のところありませんのでスワップパーティションは作りません。メモリが少ないコンピュータならスワップパーティションが効果を発揮するでしょう。

インストールする前に

ArchWiki はスマートフォンなど別の端末で開いておきましょう。この記事と環境が違う場合や、分からなくなったときに役に立ちます。また、この記事が古くなった際はインストール方法が変わっている可能性がありますので、 ArchWiki で最新の情報を必ず確認しましょう。

記事の読み方

コマンド入力表記で、行頭が # で始まっているコマンドは rootroot 権限で実行します。

# fdisk -l

行頭が $ で始まっているコマンドは一般ユーザーで実行します。

$ nano ~/.xprofile

行頭の #$ 自体は入力する必要はありません。

コマンドを実行する前にコマンドの意味を考えましょう。何も考えずコピペして実行すると危険な場合もありますし、勉強になりません。

ファイル編集で変更箇所を diff 形式で表す場合があります。行頭が - の行は削除行、 + の行は追加行です。

-LANG=en_US.UTF-8
+LANG=ja_JP.UTF-8

ファイルに行を追記する場合、追加行のみ表記する場合があります。

~/.xprofile
+light-locker --lock-on-suspend &

いずれの場合も、行頭の + を実際に書く必要はありません。

ライブ環境の起動

Arch Linux のダウンロード

まずは Arch Linux JP Project - ダウンロード から Arch Linux の ISO イメージをダウンロードします。 Arch Linux は毎月頭に最新の ISO イメージが公開されます。改竄されたイメージを掴まされないよう、 HTTPS のミラーサイトからダウンロードすることをおすすめします。

チェックサムの計算や PGP 署名の検証を行うことで、ダウンロードしたものが正しいファイルであることを確認することができます。これは任意ですが推奨です。

ISO イメージの検証

ISO イメージのチェックサムを計算することで、ダウンロードしたファイルが壊れていないか確認することができます。ダウンロードページに記載されているチェックサムと比較します。

$ sha1sum archlinux-xxxx.xx.xx-x86_64.iso
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  archlinux-xxxx.xx.xx-x86_64.iso

PowerShell の場合は Get-FileHash コマンドレットを使用してチェックサムを計算します。

> Get-FileHash -Algorithm SHA1 archlinux-xxxx.xx.xx-x86_64.iso | Select-Object Hash

Hash
----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

また、 PGP 署名を検証することで、ダウンロードしたファイルが改竄されていないかどうか確認することができます。署名ファイル (archlinux-xxxx.xx.xx-x86_64.iso.sig) をダウンロードし ISO ファイルと同じディレクトリに配置して、 GPG を実行します。 正しい署名 と表示されれば OK です。

$ gpg --keyserver keyserver.ubuntu.com --keyserver-options auto-key-retrieve --verify archlinux-xxxx.xx.xx-x86_64.iso.sig

ライブ USB の作成

ISO イメージをダウンロードしたら、 USB メモリなどのストレージに書き込みます。光ディスクや USB 2.0 のストレージなど低速なものは非推奨です (今時そんなものを使っている人はいないと思いますが) 。

Linux を使用して作成

既存の Linux 環境から書き込む場合は、コンピュータに USB メモリを挿して、デバイスファイルを確認します。

# fdisk -l

/dev/sda/dev/sdb/dev/sdc などのデバイスが USB メモリだと認識されているはずです。筆者の環境では /dev/sdc でした。

dd コマンドを使用して ISO イメージを USB メモリに書き込みます。 USB メモリの内容は全て失われます。 dd コマンドは確認なしでデータを書き込むので、書き込み対象の指定には十分注意して下さい。間違えた場合は大事なデータが吹き飛びます。

# dd if=archlinux-xxxx.xx.xx-x86_64.iso of=/dev/sdc status=progress && sync

これで ISO イメージの書き込みは完了です。

macOS を使用して作成

macOS を使用する場合、手順は Linux とほぼ同じです。 Mac に USB メモリを挿して、デバイスファイルを確認します。

$ diskutil list

/dev/disk0/dev/disk1/dev/disk2 などのデバイスが USB メモリだと認識されているはずです。筆者の環境では /dev/disk2 でした。 dd コマンドで書き込む前にアンマウントしておきます。

$ diskutil unmountDisk /dev/disk2

アンマウントしたら dd コマンドを使用して ISO イメージを USB メモリに書き込みます。 USB メモリの内容は全て失われます。 dd コマンドは確認なしでデータを書き込むので、書き込み対象の指定には十分注意して下さい。間違えた場合は大事なデータが吹き飛びます。

# dd if=archlinux-xxxx.xx.xx-x86_64.iso of=/dev/disk2 && sync

これで ISO イメージの書き込みは完了です。

Windows を使用して作成

Rufus を使用して DD モードで書き込むのが簡単です。 Cygwin など別の方法でも構いません。

USB メモリからのブート

インストール対象のコンピュータに USB メモリを挿して起動します。起動方法はマザーボードの説明書を参照してください。 BIOS モードか UEFI モードで起動できると思いますが、必ず UEFI モードで起動しましょう。 BIOS は古い形式です。

USB メモリを選択してブートすると以下のようなメニューが現れますので、 Arch Linux install medium (x86_64, UEFI) を選択します。

すると、シェルが立ち上がります。

このシェルでコマンドを叩いて Arch Linux をインストールします。

ライブ環境の設定

ライブ環境で作業を開始する前に、ライブ環境の設定を行います。ライブ環境の設定は保存されませんので、起動毎に設定する必要があります。

ライブ環境のキーボード配列はデフォルトで US 配列に設定されています。日本語配列のキーボードを使用している場合は以下のコマンドで変更します。キーボード配列が合っていないと記号の入力で苦労することになります。

# loadkeys jp106

ちゃんと UEFI モードで起動しているかどうかを確認します。

# ls /sys/firmware/efi/efivars

ヒント: Tab キーでコマンド名やパス名などを補完できます。

このコマンドを実行し No such file or directory (そのようなファイルやディレクトリはありません) と出た場合、 UEFI モードではなく BIOS モードで起動しています。

インターネット接続も必要です。ライブ環境では DHCP クライアントが自動的に動いていますので、有線接続のコンピュータならほとんどの場合で接続可能になっているでしょう。 DHCP サーバが動いていない場合や Wi-Fi 接続の場合は適宜設定をして下さい。インターネット接続を確認するには、 ping を飛ばしたり curl でリクエストを投げるなどの方法があります。

# ping -c4 archlinux.jp

インターネット接続を確認したら、システムクロックを合わせます。

# timedatectl set-ntp true

ディスクのフォーマット

Arch Linux をインストールするストレージにパーティションテーブルを作成し、パーティションとファイルシステムを作成します。

最初に、 Arch Linux をインストールするストレージを確認します。

# fdisk -l
Disk /dev/nvme0n1: 238.47 GiB, 256060514304 bytes, 500118192 sectors
(略)


Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
(略)


Disk /dev/sdb: 223.57 GiB, 240056459264 bytes, 468860272 sectors
(略)

NVMe ストレージは /dev/nvme0n1 などと認識され、 SATA ストレージは /dev/sdb などと認識されます。本記事では /dev/sdb にインストールするものとします。各自インストール先に合わせて適宜読み替えてください。

パーティションテーブルの作成

ディスクを初期化してパーティションテーブルを作成します。 パーティションテーブルは MBR (Master Boot Record) と GPT (GUID Partition Table) の 2 種類あります。今回は UEFI に最適な GPT で作成します。 cgdisk コマンドを実行します。

# cgdisk /dev/sdb

カーソルキーの左右でコマンドの選択、上下でパーティションの選択を行います。すでにパーティションがあったらそれらをすべて Delete で消去しておきましょう。 free space のみの状態からスタートします。

最初にブートパーティションを作成します。これは UEFI ブートのために必要です。 New を実行し、下記の値を設定していきます。デフォルト値を入力する場合は、空欄のまま Enter キーを押します。

質問
First sectorデフォルト
Size in sectors or {KMGTP}512M
Hex code or GUIDef00
Enter new partition nameEFI System

入力が完了すると、 1007.0 KiB の free space の後にブートパーティションが作成されます。

次にルートパーティションを作成します。カーソルキーの下を押して後ろの方の free space を選択してから New を実行し、下記の値を設定していきます。

質問
First sectorデフォルト
Size in sectors or {KMGTP}デフォルト
Hex code or GUIDデフォルト (8300)
Enter new partition nameLinux

値の入力が完了したら、 Write を選択してディスクに書き込みます。パーティションテーブルを上書きするので、ストレージの内容が失われます。確認の入力がありますので yes と入力して書き込んだら Quit を選択して cgdisk を終了します。

パーティションは fdisklsblk コマンドで確認できます。

# lsblk /dev/sdb
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sdb      8:16   0 223.6G  0 disk
|-sdb1   8:17   0   512M  0 part
`-sdb2   8:18   0 223.1G  0 part

/dev/sdb1 がブートパーティション、 /dev/sdb2 がルートパーティションとなります。

パーティションのフォーマット

各パーティションをフォーマットしてファイルシステムを作成します。

ブートパーティション (/dev/sdb1) は FAT32 形式でフォーマットします。

# mkfs.fat -F32 /dev/sdb1

ルートパーティションは Btrfs 形式でフォーマットします。

# mkfs.btrfs /dev/sdb2

Linux では以前から ext4 形式がよく使われてきましたが、今回は次世代のファイルシステム Btrfs を採用しています。

パーティションのマウント

作成したパーティションをマウントし、ファイルシステムを /mnt 経由で操作できるようにします。

最初にルートパーティション (/dev/sdb2) を /mnt にマウントします。

# mount /dev/sdb2 /mnt

次に /mnt 中に boot ディレクトリを作成し、そこにブートパーティション (/dev/sdb1) をマウントします。

# mkdir /mnt/boot
# mount /dev/sdb1 /mnt/boot

マウントポイントは lsblk コマンドで確認できます。

# lsblk /dev/sdb
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sdb      8:16   0 223.6G  0 disk
|-sdb1   8:17   0   512M  0 part /mnt/boot
`-sdb2   8:18   0 223.1G  0 part /mnt

システムのインストール

Arch Linux のシステムをインストールします。

ミラーの選択

パッケージ取得先のミラーサーバを選択します。 reflector コマンドで自動的に最適なミラーサーバを選択できます。今回は 日本国内のミラーサーバ の中で 12 時間以内に同期されているものを選択し、ダウンロード速度で並び替えます。使用されるミラーサーバのリストは /etc/pacman.d/mirrorlist に書き込まれます。

# reflector --country Japan --age 12 --protocol http,https --sort rate --save /etc/pacman.d/mirrorlist

パッケージのインストール

pacstrap コマンドで、必須の linux linux-firmware base パッケージと、パッケージのビルドに必要な base-devel パッケージグループをインストールします。また、パッケージ管理に便利な pacman-contrib もインストールします。 base パッケージには vi どころか ed すらありませんので、 nanoneovimemacs など好みのテキストエディタも追加でインストールしておきます。本記事では nano をインストールします。エディタに迷ったら nano で良いでしょう。

# pacstrap /mnt linux linux-firmware base base-devel pacman-contrib nano

回線速度にもよりますが、ほとんどの場合はカップラーメンを調理する間もなくインストールが完了します。

システムの設定

fstab の生成

パーティションのマウント状態を記述する fstab を生成し、 /mnt/etc/fstab に追記します。

# genfstab -U /mnt >> /mnt/etc/fstab

chroot

インストールしたシステムへ chroot します。これにより、 /mnt/ として扱うことができます。

# arch-chroot /mnt

時刻の設定

タイムゾーンを Asia/Tokyo に設定します。

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ハードウェアクロックを設定します。

# hwclock --systohc

Windows とのデュアルブートを考えている場合は時刻系に注意してください。 Windows ではデフォルトでハードウェアクロックにローカル時刻を設定する クソ 仕様であり、その他の OS では UTC (協定世界時) の時刻を設定します。 Windows のレジストリを設定し、ハードウェアクロックが UTC を設定するようにすることをおすすめします。設定せずそのまま放置してデュアルブートすると時刻が 9 時間ずれます (日本の場合) 。

ロケールの設定

生成するロケールを設定します。 /etc/locale.genen-US.UTF-8ja_JP.UTF-8 の行のコメントを解除します。

# nano /etc/locale.gen
/etc/locale.gen
-#en_US.UTF-8 UTF-8
+en_US.UTF-8 UTF-8
 # ...
-#ja_JP.UTF-8 UTF-8
+ja_JP.UTF-8 UTF-8

nano エディタは画面下部にショートカットキーが表示されているので操作に迷うことは無いはずです。ショートカットキーの ^ は Ctrl キー、 M- は Meta キー (Alt キー) を表しています。例えば、 ^X は Ctrl+X です。

neovimemacs をインストールして使用するような人に操作説明は不要でしょう。いつも通り編集して下さい。

コメントを解除したら locale-gen コマンドでロケールを生成します。

# locale-gen

使用するロケールを /etc/locale.conf に書き込みます。コンソールではほぼ ASCII 文字しか表示できないので一旦英語 (en_US.UTF-8) に設定しておきます。

# echo LANG=en_US.UTF-8 > /etc/locale.conf

日本語配列のキーボードを使用している場合は /etc/vconsole.conf にコンソールキーマップを設定します。

# echo KEYMAP=jp106 > /etc/vconsole.conf

コンピュータ名の設定

コンピュータ名を /etc/hostname に書き込みます。ここでコンピュータ名は myhostname としています。好きな名前を設定しましょう。

# echo myhostname > /etc/hostname

この名前を /etc/hosts にも書き込みます。

# nano /etc/hosts
/etc/hosts
127.0.0.1 localhost
::1       localhost
127.0.0.1 myhostname.localdomain myhostname

ネットワークの設定

ライブ環境では DHCP クライアントが自動的に動いていますが、インストールされたシステムではネットワーク接続自体が有効になっていません。本記事では systemd-networkd を使用して有線ネットワーク接続の設定を行います。

まずは有線アダプタのデバイス名を networkctl コマンドで確認します。

# networkctl
IDX LINK      TYPE     OPERATIONAL SETUP
  1 lo        loopback carrier     unmanaged
  2 enp0s31f6 ether    routable    configured

2 links listed.

TYPEether となっているものがイーサネットアダプタです。ここでは enp0s31f6 が該当のデバイスです。

デバイス名を確認したら、 /etc/systemd/network/20-wired.network に設定を書き込みます。 DHCP による動的 IP を設定する場合は以下のように記述します。

# nano /etc/systemd/network/20-wired.network
/etc/systemd/network/20-wired.network
[Match]
Name=enp0s31f6

[Network]
DHCP=ipv4

IP アドレスを固定する場合は以下のように記述します。サブネットマスクは /24 のように CIDR (Classless Inter-Domain Routing) 表記で記述します。

/etc/systemd/network/20-wired.network
[Match]
Name=enp0s31f6

[Network]
Address=192.168.1.123/24
Gateway=192.168.1.254
DNS=192.168.1.1
DNS=8.8.8.8

設定ファイルを書いたら、 systemd-networkdsystemd-resolved サービスを有効化 (スタートアップに登録) します。

# systemctl enable systemd-networkd systemd-resolved

root パスワードの設定

root アカウントのパスワードを設定します。セキュアなものを設定しましょう。

# passwd

ブートローダーの設定

ブートローダーの設定を行います。 UEFI モードでは systemd-boot が一番簡単に設定できます。

まずはブートパーティションがマウントされている /boot ディレクトリにブートローダーをインストールします。

# bootctl --path=/boot install

/boot/loader/loader.conf に書かれているブートローダーの設定を変更します。

# nano /boot/loader/loader.conf
/boot/loader/loader.conf
default arch
timeout 3
editor  no

デフォルトで arch というエントリを起動するよう設定しました。 arch エントリを /boot/loader/entries/arch.conf に作成します。

# nano /boot/loader/entries/arch.conf
/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 を指定します。これはパーティション識別用の ID で、 blkid コマンドで確認できます。

# blkid -s PARTUUID /dev/sdb2
/dev/sdb2: PARTUUID="386a4e69-46c9-443b-85f7-a9ea7f8f5015"

PARTUUID はブートパーティションではなくルートパーティションのものを使用します。間違えないようご注意下さい。

最後に CPU のマイクロコードをインストールします。 Intel の場合は intel-ucode を、 AMD の場合は amd-ucode をインストールします。

# pacman -S intel-ucode

これで最低限の設定は完了しました。

コンピュータの再起動

exit コマンドで chroot 環境から抜け、 reboot コマンドでコンピュータを再起動します。

# exit
# reboot

マザーボードのブートメニューで Linux Boot Manager を選択して、インストールしたシステムを起動します。起動が完了すると以下のようなログイン画面が出るはずです。

ユーザー名 root を入力して、先程設定したパスワードでログインします。引き続きシステムの設定をしていきます。

もしも起動しない時は

インストールに問題があったり設定をいじりすぎて起動しない場合は、ライブ USB を起動しディスクをマウントすることで、自分で問題を修正することができます。

# loadkeys jp106
# mount /dev/sdb2 /mnt
# mount /dev/sdb1 /mnt/boot
# arch-chroot /mnt

インストール後の設定

DNS ネームサーバー設定のリンク

古いツールでは /etc/resolv.conf の DNS 設定を参照します。 systemd-resolved で DNS を設定した場合、 resolv.conf 互換の設定ファイルが生成されるので、シンボリックリンクを張ります。

# mv /etc/resolv.conf /etc/resolv.conf.org
# ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

一般ユーザーの作成

root に直接ログインして作業を続けるのは好ましくないので、一般ユーザーを作成します。また、作成したユーザーを管理者グループ wheel に所属させます。ここでユーザー名は myusername としています。好きな名前を設定しましょう。

# useradd -mg wheel myusername

passwd コマンドでパスワードを設定します。これもセキュアなパスワードを設定しましょう。

# passwd myusername

最近は systemd-homed によるユーザー管理方法が登場しました。ホームディレクトリの暗号化やディスククォータなどの特徴を持っていますが、ログインできるようにする追加の設定が必要になったり、ホームディレクトリ暗号化時 SSH でのログインに公開鍵認証を使用していてもパスワードが必須になるなど少々面倒なので、今回は古典的なユーザーを作成しました。ログインする人が 1 人しかいないなど個人的な使用なら従来通りのユーザーで十分です。

sudo の設定

wheel グループのユーザーが sudo コマンドを使用して一時的に特権を得られるようにするため、 sudoers ファイルの編集を行います。環境変数 EDITOR にエディタを設定して visudo コマンドで編集を開始し、 %wheel ALL=(ALL) NOPASSWD: ALL の行のコメントを解除します。

# EDITOR=nano visudo
/etc/sudoers.tmp
 ## Same thing without a password
-# %wheel ALL=(ALL) NOPASSWD: ALL
+%wheel ALL=(ALL) NOPASSWD: ALL

後述する dmenu で sudo を利用する際、パスワード入力が要求されない方が使い勝手が良いので、パスワード入力なしで sudo コマンドを使用できるように設定しました。設定が終わったら、 logout コマンドで root からログアウトし、先程作成した一般ユーザーでログインします。

# logout

AUR ヘルパーのインストール

Arch Linux のパッケージマネージャは pacman です。公式リポジトリにあるパッケージは pacman を使ってインストールします。コミュニティのパッケージは AUR (Arch User Repository) から clone して手動でビルドしインストールすることになります。これを自動化するため AUR ヘルパーの paru をインストールします。 paru 自体も AUR にありますので、最初は手動でインストールします。

まずはリポジトリを clone するため Git をインストールします。

$ sudo pacman -S git

AUR から paru を clone します。

$ git clone https://aur.archlinux.org/paru.git

paru ディレクトリに入って、ビルド情報が記されている PKGBUILD ファイルの内容を確認します。 AUR にはユーザーが自由にパッケージを投稿できるので、悪意のあるものが紛れ込んでいないか必ず確認する必要があります。

$ cd paru
$ less PKGBUILD

PKGBUILD の内容が問題無いなら、 makepkg コマンドで paru をビルドします。 paru は Rust で書かれているため、 Rust のパッケージマネージャ cargo のインストールが要求されます。 rustrustup のうち rust を選択してビルドを続行します。

$ makepkg -si
(略)
:: There are 2 providers available for cargo:
:: Repository extra
   1) rust
:: Repository community
   2) rustup

Enter a number (default=1):

paru のビルドとインストールが完了したら、ビルド用ファイルはもう不要なので削除します。

$ cd ..
$ rm -rf paru

Rust が不要な場合は削除します。

$ sudo pacman -Rs rust

Rust で開発する予定のある人は、後程 rustup.rs でインストールしましょう。リポジトリにある Rust は AUR パッケージのビルド専用だと考えましょう。

注意: Rust に詳しい人は cargo install paru でインストールすれば良いと考えるかもしれません。しかし、 AUR 版はシェルの補完関数も同梱されています。

これで paru コマンドが使用可能になりました。 sudo pacman の代わりに paru と打つことができます。今後、本記事では paru で表記します。

AUR パッケージを圧縮する際、 Zstandard が使用されます。デフォルトではマルチスレッドにならないため、マルチスレッドで圧縮するよう設定を変更します。 sudoedit コマンドで /etc/makepkg.conf を編集開始し、 COMPRESSZST の行を編集します。

$ EDITOR=nano sudoedit /etc/makepkg.conf
/etc/makepkg.conf
-COMPRESSZST=(zstd -c -z -q -)
+COMPRESSZST=(zstd -T0 -c -z -q -)

これで、サイズが大きいパッケージを扱う場合でも高速に圧縮処理を行うことができます。

zsh のインストール

デフォルトでは Bash (Bourne-again shell) がインストールされていますが、よりパワフルな Zsh (Z shell) をインストールしてログインシェルを変更します。 Bash の方が良いという人はそのままでも構いません。もちろん他のシェルをインストールして設定しても OK です。むしろ自由にやってください。

$ paru -S zsh

ログインシェルを zsh に変更します。

$ chsh -s $(which zsh)

最低限の設定を ~/.zshrc に記述します。ついでに EDITOR 環境変数を export するよう設定しておきます。もちろん自分のこだわりの設定を書いても構いません。

$ nano ~/.zshrc
~/.zshrc
autoload -U compinit && compinit
PROMPT='%n@%m:%~ %# '
export EDITOR=nano

ログインシェルを手動で起動します。

$ exec zsh -l

pacman 出力のカラー化

pacman の出力をカラー化すると見やすくなるので設定します。 /etc/pacman.conf を編集し、 Color と書いてある行をコメント解除します。

$ sudoedit /etc/pacman.conf
/etc/pacman.conf
-#Color
+Color

GUI 環境のインストール

Xorg による GUI 環境を設定していきます。

ディスプレイサーバーのインストール

X サーバーをインストールします。

$ paru -S xorg-server

グラフィックドライバのインストール

NVIDIA の GPU を使用しているので、 nvidia パッケージをインストールします。これはプロプライエタリなドライバです。

$ paru -S nvidia

KMS (Kernel Mode Settings) を有効化し、ブートプロセスの早い段階で GPU をセットアップ (Late KMS start) するよう設定します。 NVIDIA 以外のドライバなら以下の設定は必要ありません。

まずはブートローダーエントリ /boot/loader/entries/arch.conf を編集し、カーネルパラメータ nvidia-drm.modeset=1 を追加します。

$ sudoedit /boot/loader/entries/arch.conf
/boot/loader/entries/arch.conf
-options root=PARTUUID=********-****-****-****-************ rw
+options root=PARTUUID=********-****-****-****-************ nvidia-drm.modeset=1 rw

/etc/mkinitcpio.conf を編集し、 initramfs にロードするモジュールを追加します。

$ sudoedit /etc/mkinitcpio.conf
/etc/mkinitcpio.conf
-MODULES=()
+MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)

mkinitcpio コマンドで initramfs を再生成します。

$ sudo mkinitcpio -P

最後に /etc/pacman.d/hooks/nvidia.hook を作成し、 nvidia パッケージのアップグレード時に自動的に initramfs を再生成するよう pacman フックを設定します。

$ sudo mkdir /etc/pacman.d/hooks
$ sudoedit /etc/pacman.d/hooks/nvidia.hook
/etc/pacman.d/hooks/nvidia.hook
[Trigger]
Operation=Install
Operation=Upgrade
Operation=Remove
Type=Package
Target=nvidia

[Action]
Depends=mkinitcpio
When=PostTransaction
Exec=/usr/bin/mkinitcpio -P

フォントのインストール

Google Noto Fonts とプログラミング用フォントの Ricty をインストールします。

$ paru -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra
$ paru -S ttf-ricty

ヒント: シェルのブレース展開を使用すると、入力文字数を減らすことができます。

$ paru -S noto-fonts{,-cjk,-emoji,-extra}

ディスプレイマネージャのインストール

グラフィカルなログイン画面とウィンドウマネージャの起動を行うディスプレイマネージャをインストールします。本記事ではシンプルな LightDM をインストールします。

$ paru -S lightdm lightdm-gtk-greeter

LightDM の有効化を行います。

$ sudo systemctl enable lightdm

ウィンドウマネージャのインストール

ウィンドウの管理を行うウィンドウマネージャをインストールします。タイル型ウィンドウマネージャの i3 をインストールします。

$ paru -S i3

アプリケーションのインストール

ウィンドウマネージャだけインストールしても、何もアプリケーションが付属していないので何もできません。コマンド操作もできません。

そこで、ターミナルエミュレータの Alacritty と、アプリケーションランチャーの dmenu をインストールします。 NTT ドコモの d メニューとは関係ありません。

$ paru -S alacritty dmenu

Alacritty の最低限の設定を ~/.config/alacritty/alacritty.yml に書きます。

$ mkdir -p ~/.config/alacritty
$ nano ~/.config/alacritty/alacritty.yml
~/.config/alacritty/alacritty.yml
font:
  normal:
    family: Ricty

Alacritty を動作させるには GPU が GLSL 3.30 (OpenGL 3.3) に対応している必要があります。現代の GPU では対応しているはずですが、 GPU が古く対応していない場合は環境変数 LIBGL_ALWAYS_SOFTWARE を設定します。

~/.config/alacritty/alacritty.yml
+env:
+  LIBGL_ALWAYS_SOFTWARE: "1"
 font:
   normal:
     family: Ricty

キーボードとロケールの設定

Xorg でのキーボードレイアウトを localectl コマンドで設定します。

$ sudo localectl set-x11-keymap jp

また、システム全体のロケールを日本語へ変更します。

$ sudoedit /etc/locale.conf
/etc/locale.conf
-LANG=en_US.UTF-8
+LANG=ja_JP.UTF-8

設定を変更したら、 reboot コマンドでコンピュータを再起動します。

$ sudo reboot

GUI 環境の設定

コンピュータが起動すると、 LightDM のグラフィカルなログイン画面が表示されます。

パスワードを入力してログインすると i3 が自動的に立ち上がり、設定ファイルを作成するか聞いてきます。 Enter キーを押します。

i3 を操作するキー ($mod キー) を設定します。カーソルキーの上下で <Win> を選択し Enter キーで確定します。

すると、 i3 の設定ファイル ~/.config/i3/config が作成されます。このファイルの中に i3 のキーバインドがすべて記述されています。

Windows キーを使用して i3 の操作を行います。以下のキー操作は覚えておきましょう。キーバインドは後で自由に変更できます。

  • Windows+Enter: ターミナルエミュレータの起動
  • Windows+D: アプリケーションランチャー dmenu の起動
  • Windows+Shift+Q: ウィンドウを閉じる
  • Windows+Shift+E: ログアウト

その他のデフォルトのキーバインドは i3 - Reference Card にまとまっています。

これ以降もコマンドを打って設定を行います。 Windows+Enter を押してターミナルエミュレータを起動しておきましょう。

フォント設定

Xorg で使用するフォントを設定します。

$ sudoedit /etc/fonts/local.conf
/etc/fonts/local.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <alias>
    <family>serif</family>
    <prefer>
      <family>Noto Serif</family>
      <family>Noto Serif CJK JP</family>
    </prefer>
  </alias>
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Noto Sans</family>
      <family>Noto Sans CJK JP</family>
    </prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer>
      <family>Noto Sans Mono</family>
      <family>Noto Sans Mono CJK JP</family>
    </prefer>
  </alias>
</fontconfig>

設定を書いたら fc-cache コマンドでフォントのキャッシュを更新します。

$ fc-cache -f

Windows+Shift+E を押してログアウトしてから再度ログインすると、フォントの設定が反映されます。

ディスプレイの設定

$ paru -S nvidia-settings

Windows+D を押すとアプリケーションランチャーの dmenu が画面上部に表示されます。

dmenu に sudo nvidia-settings と入力して、 NVIDIA X サーバー設定を管理者権限で起動します。

ヒント: ウィンドウをフロート表示させるには Windows+Shift+Space を押します。

X Server Display Configuration を選択し、 Advanced... を押して設定項目をすべて表示させます。

ディスプレイのレイアウトを設定します。ティアリングが発生する場合は Force Composition Pipeline や Force Full Composition Pipeline をオンにします。

設定が完了したら Apply を押して設定を適用し、 Save to X Configuration File を押して設定内容を /etc/X11/xorg.conf に保存します。

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

Web ブラウザをインストールします。 firefoxchromium などをインストールします。 ArchWiki に Web ブラウザのリスト があるので、そこから自分好みのブラウザを選択してインストールしましょう。 Google Chrome の同期機能を使いたいなら AUR から google-chrome をインストールします。

$ paru -S chromium

Web ブラウザは dmenu から起動します。 google-chrome をインストールした場合、コマンドは google-chrome-stable となります。

キーボード入力の設定

キーリピートの設定

キーボードのキーを押しっぱなしにすることで文字を連続入力するキーリピートの設定を xset コマンドで行います。

$ xset r rate 300 25

このコマンドは、キーが押されてから 300 ミリ秒後にキーリピートが始まり、 1 秒間に 25 回リピートするよう設定します。コマンドを実行したら即座に反映されます。値を自由に調整して好みの値を設定します。

キーリピートの設定はログアウトすると消えてしまいます。設定を永続化するには、このコマンドを ~/.xprofile に書いておきます。ウィンドウマネージャの起動前に ~/.xprofile がシェルスクリプトとして自動的に実行されるので、 Xorg の設定コマンドや自動起動させるアプリケーションをここに書いておきます。

$ nano ~/.xprofile
~/.xprofile
#!/bin/sh

xset r rate 300 25

CapsLock キーを Ctrl キーに変更

続いて、 A キーの左にある CapsLock キーを Ctrl キーとして扱うよう設定します。 xmodmap を使用してキーマップを設定します。まずは xorg-xmodmap をインストールします。

$ paru -S xorg-xmodmap

~/.Xmodmap に xmodmap の設定を書きます。

$ nano ~/.Xmodmap
~/.Xmodmap
clear lock
clear control
keycode 66 = Control_L
add control = Control_L Control_R

このファイルを xmodmap コマンドで読み込むことでキーマップが適用されます。

$ xmodmap ~/.Xmodmap

~/.xprofile にこのコマンドを追記して、設定を永続化します。

$ nano ~/.xprofile
~/.xprofile
 #!/bin/sh

 xset r rate 300 25
+xmodmap ~/.Xmodmap

スクリーンロッカーのインストール

LightDM を使用して画面をロックすることができる light-locker をインストールします。

$ paru -S light-locker

ログイン時に light-locker を自動起動するよう ~/.xprofile に追記します。

$ nano ~/.xprofile
~/.xprofile
+light-locker --lock-on-suspend &

再ログイン後、 dmenu などで light-locker-command -l を実行すると画面をロックできます。 i3 の設定を変更しキーバインドを割り当てるとショートカットキー一発で画面をロックできます。キーバインドの設定は後述。

日本語入力システムのインストール

インプットメソッドフレームワークの Fcitx と日本語インプットメソッドエディタの Mozc をインストールします。

$ paru -S fcitx fcitx-mozc fcitx-im fcitx-configtool

ログイン時に fcitx を自動起動するよう ~/.xprofile に追記します。また、入力途中の文字を正しく表示するのに必要な環境変数の設定も行います。

$ nano ~/.xprofile
~/.xprofile
+export GTK_IM_MODULE=fcitx
+export QT_IM_MODULE=fcitx
+export XMODIFIERS=@im=fcitx
+fcitx

再ログインで日本語入力が使用可能になります。全角/半角キーで日本語入力の切り替えができます。

画面下部に表示されている i3 ステータスバーの右端に Fcitx のアイコンが表示されます。これを右クリックして設定を行えます。全体の設定 → ホットキー Show Advanced Options をオンにし、 入力メソッドをオンに に変換キー、 入力メソッドをオフに に無変換キーを割り当てると便利です。

サウンドサーバーのインストール

サウンドを管理するサウンドサーバー PulseAudio をインストールします。

$ paru -S pulseaudio pavucontrol

インストール後 dmenu で sudo reboot と入力し、コンピュータを再起動します。再起動後 dmenu から pavucontrol を起動して音量の調節を行います。

カスタマイズ

ここまでで基本的なセットアップが終わり、以下のような状態になりました。

しかし、このままではまだちょっと使いにくいので、自分好みのカスタマイズを行っていきます。ここからは参考程度にお読み下さい。もちろん自分なりのアレンジを加えたりするのも自由です。

i3 キーバインドの設定

i3 では Windows+JKL; でウィンドウのフォーカスを左・下・上・右に移します。 Vim のキーバインドと比較してキーが右に 1 つずれているので、 Vimmer は混乱する可能性があります。

これを Windows+HJKL に直します。すでに Windows+H はウィンドウ分割の操作が割り当てられているので、これは別のキーを割り当てます。

i3 の設定は ~/.config/i3/config に書かれています。これを編集します。

$ nano ~/.config/i3/config
~/.config/i3/config
 # change focus
-bindsym $mod+j focus left
-bindsym $mod+k focus down
-bindsym $mod+l focus up
-bindsym $mod+semicolon focus right
+bindsym $mod+h focus left
+bindsym $mod+j focus down
+bindsym $mod+k focus up
+bindsym $mod+l focus right
 # (略)
-bindsym $mod+h split h
+bindsym $mod+b split h

ウィンドウの移動も Windows+Shift+JKL; になっているので、変更します。その他のキーバインドも自由に変更します。

また、スクリーンロッカー light-locker で画面のロックを行うキーボードショートカットを定義します。

~/.config/i3/config
+bindsym $mod+Shift+x exec --no-startup-id light-locker-command -l

Windows+Shift+X を押すと light-locker-command -l が実行され、画面がロックされるよう設定しました。

bindsym ショートカットキー exec コマンド の行を追加して、プログラムを起動する新しいキーボードショートカットを定義できます。 exec の直後に --no-startup-id を書くと、起動時にマウスカーソルを変更しません。 Web ブラウザなど、よく使うアプリケーションを起動するショートカットキーを定義しておくと便利です。

~/.config/i3/config
+bindsym $mod+c exec chromium

保存したら Windows+Shift+R で i3 を再起動し、設定を適用します。

壁紙の設定

LightDM や i3 のデフォルトの壁紙は黒一色で地味です。 Arch Linux の公式リポジトリに壁紙集があるので、それをインストールします。もちろん自分で画像を用意しても構いません。

$ paru -S archlinux-wallpaper

archlinux-wallpaper パッケージをインストールすると、 /usr/share/backgrounds/archlinux に壁紙の画像が配置されます。

i3 の壁紙の設定

軽量な画像ビューアと壁紙設定ツールの feh をインストールします。

$ paru -S feh

画像を見るには、 feh コマンドに画像ファイルまたはディレクトリのパスを渡します。

$ feh /usr/share/backgrounds/archlinux

カーソルキーの左右で画像の切り替え、上下でズームを調整します。

壁紙を設定するには、画像を右クリックし、 File → Background から表示方法を選びます。

  • Set Tiled: タイル表示
  • Set Scaled: アスペクト比を変更して埋める
  • Set Centered: 等倍で画面中央に表示
  • Set Filled: アスペクト比を変更せず埋める

即座に i3 の壁紙が適用されます。この方法で壁紙を設定すると、壁紙を設定するシェルスクリプトが ~/.fehbg に生成されます。

~/.fehbg
#!/bin/sh
feh --no-fehbg --bg-fill '/usr/share/backgrounds/archlinux/small.png'

壁紙の設定はログアウトすると消えてしまいますが、 ~/.fehbg~/.xprofile で呼び出せば壁紙の設定を永続化できます。

$ nano ~/.xprofile
~/.xprofile
+sh ~/.fehbg

LightDM の壁紙の設定

lightdm-gtk-greeter を使用しているので、 /etc/lightdm/lightdm-gtk-greeter.conf を作成して設定します。

$ sudoedit /etc/lightdm/lightdm-gtk-greeter.conf
/etc/lightdm/lightdm-gtk-greeter.conf
[greeter]
background = /usr/share/backgrounds/archlinux/small.png

LightDM の壁紙は lightdm というシステムユーザーがアクセスするため、 /usr/share/backgrounds//usr/share/pixmaps/ 以下に画像ファイルを配置することをおすすめします。

lightdm-gtk-greeter-settings パッケージをインストールすれば、 GUI で設定することができます。

ランチャーの変更

i3 のデフォルトのランチャーは dmenu です。これはこれで使いやすいのですが、より多機能な rofi に変更しようと思います。

まずは rofi をインストールします。

$ paru -S rofi

rofi の設定を ~/.config/rofi/config.rasi に書きます。

$ mkdir ~/.config/rofi
$ nano ~/.config/rofi/config.rasi
~/.config/rofi/config.rasi
configuration {
    theme: "slate-mod";
    modi: "combi,drun,run,window";
    combi-modi: "drun,run,window";
    show-icons: true;
}

表示するモードを combi など 4 種類指定しました。使えば分かるのでここで理解する必要はありません。

  • combi: combi-modi に指定したモードのアイテムすべて
  • drun: アプリケーションのデスクトップエントリ
  • run: コマンド
  • window: 現在開いているウィンドウ

テーマは slate-mod を指定しました。これは同梱のテーマではないので、自分で定義します。 davatorium/rofi-themes の slate.rasi (MIT License) を少し改造したものになります。 CSS っぽい文法で定義します。

$ nano ~/.config/rofi/slate-mod.rasi
~/.config/rofi/slate-mod.rasi
* {
    background-color: #282C33;
    border-color: #2e343f;
    text-color: #8ca0aa;
    spacing: 0;
    width: 640px;
}

inputbar {
    border: 0 0 1px 0;
    children: [prompt, entry];
}

prompt {
    padding: 16px;
    border: 0 1px 0 0;
}

textbox {
    background-color: #2e343f;
    border: 0 0 1px 0;
    border-color: #282C33;
    padding: 8px 16px;
}

entry {
    padding: 16px;
}

listview {
    cycle: false;
    margin: 0 0 -1px 0;
    scrollbar: false;
}

element {
    border: 0 0 1px 0;
    padding: 8px;
}

element-text {
    background-color: inherit;
    text-color: inherit;
    padding: 0 0 0 8px;
}

element selected {
    background-color: #2e343f;
}

element-icon {
    size: 24px;
    background-color: inherit;
}

更新: rofi 1.7.0 リリースに伴い、スタイルを調整しました。 (2021/08/31)

rofi は rofi コマンドで呼び出します。 i3 の設定で、 Windows+D で rofi を呼び出すよう変更します。最初に combi モードを表示するよう引数を設定しておきます。

$ nano ~/.config/i3/config
~/.config/i3/config
-bindsym $mod+d exec --no-startup-id dmenu_run
+bindsym $mod+d exec --no-startup-id "rofi -show combi"

Windows+Shift+C を押して i3 の設定を再読込し、 Windows+D を押して rofi を起動してみましょう。

rofi が combi モードで表示されました。文字を入力しアイテムを絞り込んで Enter キーを押すとそれが開かれます。 macOS の Spotlight や Alfred のような感じで使えます。 Ctrl+Tab を押すとモードを切り替えられます。

dmenu のようにコマンドを直接実行することもできます。例えば、 sudo shutdown -h now と入力して Enter キーを押すと、自動的に run モードで開かれコマンドが実行されます。結果としてコンピュータがシャットダウンします。別のモードで開かれてしまう場合は Ctrl+Tab を押して run モードをアクティブにしてから実行します。

また、ユーザー独自のモードを作成することも可能です。電卓を rofi に組み込むなど柔軟にカスタマイズできます。

ステータスバーの設定

画面下部に表示されているステータスバーの表示をカスタマイズします。ステータスバーの表示はデフォルトで i3status が使われていますが、もう少し直感的に設定できる i3blocks に変更します。

i3blocks の設定を ~/.config/i3blocks/config に書きます。

$ mkdir ~/.config/i3blocks
$ nano ~/.config/i3blocks/config
~/.config/i3blocks/config
separator_block_width=16

[load average]
command=uptime | awk -F': ' '{print $2}'
interval=5

[time]
command=date '+%m/%d(%a) %H:%M'
interval=1

ステータスバーに表示するものを INI ファイルフォーマットで記述します。今回はロードアベレージと時刻を表示するよう設定しました。 command に書いたコマンドの標準出力がそのまま表示されます。コマンドやシェルの知識を存分に発揮しましょう。 interval に設定した秒数の間隔で表示が自動的に更新されます。

もちろん自分でシェルスクリプトを書いてそれを呼び出すこともできます。パッケージのアップデートを確認するスクリプトを書いて設定してみましょう。 ~/.config/i3blocks/check-updates.sh を作ります。

$ nano ~/.config/i3blocks/check-updates.sh
~/.config/i3blocks/check-updates.sh
#!/bin/sh

# Count number of updates
updatenum=$({ checkupdates; paru -Qua } | wc -l)

# Print
case $updatenum in
  0) echo 'System is up to date' ;;
  1) echo "$updatenum update available" ;;
  *) echo "$updatenum updates available" ;;
esac

check-updates.sh に実行パーミッションを付加します。

$ chmod +x ~/.config/i3blocks/check-updates.sh

~/.config/i3blocks/config に設定を追加します。更新間隔は 3600 秒 (1 時間) に設定します。

$ nano ~/.config/i3blocks/config
~/.config/i3blocks/config
 separator_block_width=16

+[updates]
+command=./check-updates.sh
+interval=3600

 [load average]
 command=uptime | awk -F': ' '{print $2}'
 interval=5

 [time]
 command=date '+%m/%d(%a) %H:%M'
 interval=1

最後に i3 の設定を変更します。 i3status の代わりに i3blocks を使用するよう変更します。

$ nano ~/.config/i3/config
~/.config/i3/config
 bar {
-        status_command i3status
+        status_command i3blocks
 }

Windows+Shift+R を押して i3 を再起動すると、 i3blocks によるステータスバーが表示されます。

/proc/meminfo のメモリ情報を処理してメモリの使用率を表示したり、 df コマンドの出力情報を処理してストレージの空き容量を表示させるなどはもちろん、 curl コマンドで天気や為替の API を叩いて表示させるなども可能です。色々カスタマイズしてみてください。 API を叩く際、 JSON のパースには jq が便利です。

また、 i3blocks の設定で color=#xxxxxx を指定すれば文字色の変更、 markup=pango を指定すれば、 Pango のマークアップ を使用して文字色の変更や装飾を行うことができます。

夜間の色温度の設定

夜間に作業する場合、ディスプレイの色温度が高くて目がしんどいので、色温度を調整する Redshift を導入します。 iOS や macOS の Night Shift と同じものです。 Amazon の Redshift とは関係ありません。

Redshift は Xorg で機能します。 Wayland ではサポートされていないようです。

redshift をインストールします。通知アイコンから色温度を簡単に切り替えるために必要な python-gobject もインストールします。

$ paru -S redshift python-gobject

緯度と経度から日の出と日の入りの時刻を計算し、時刻に基づいて自動的に色温度を調整するよう設定します。現在地の緯度と経度が必要になりますので Latitude and Longitude Finder などを使用して確認しておきます。このサイトに Tokyo と入力すると新宿区にある東京都庁舎の座標が出てきます。本記事ではこの値を使用します。

~/.config/redshift.conf に Redshift の設定を書きます。 lat に緯度、 lon に経度を指定します。

$ nano ~/.config/redshift.conf
~/.config/redshift.conf
[redshift]
location-provider=manual

[manual]
lat=35.689487
lon=139.691711

ログイン時に Redshift が自動起動するよう ~/.xprofile に追記します。通知アイコンが有効な redshift-gtk が起動するよう書きます。

$ nano ~/.xprofile
~/.xprofile
+redshift-gtk &

再ログインすると Redshift が有効になり、日が暮れると色温度が自動的に下がります。通知エリアの電球アイコンをクリックすると Redshift を一時的にオフにできます。

スクリーンショット機能の設定

スクリーンショットは imagemagick パッケージに入っている import コマンドで撮ることができます。

まずは imagemagick をインストールします。

$ paru -S imagemagick

これで import コマンドが使用可能になりました。画面全体のスクリーンショットは以下のコマンドで撮れます。

$ import -window root screenshot.png

また、フォーカスしているウィンドウのスクリーンショットは以下のコマンドで撮れます。

$ import -window $(xprop -root | awk '$1=="_NET_ACTIVE_WINDOW(WINDOW):"{print $5}') screenshot.png

もちろんこんな長いコマンドはいちいち打っていられないので、 i3 のキーバインドを設定して簡単に撮影できるようにします。

$ nano ~/.config/i3/config
~/.config/i3/config
+bindsym Print exec import -window root ~/screenshot-$(date "+%Y%m%d-%H%M%S").png
+bindsym $mod+Print exec import -window $(xprop -root | awk '$1=="_NET_ACTIVE_WINDOW(WINDOW):"{print $5}') ~/screenshot-$(date "+%Y%m%d-%H%M%S").png

Print は PrintScreen キーを表しています。 PrintScreen キーを押すと画面全体、 Windows+PrintScreen でフォーカスしているウィンドウのスクリーンショットをホームディレクトリに出力します。

その他

ここらへんは筆者が個人的にインストール・設定しているものになります。流し見程度で OK です。

Docker

Linux なので Docker を使って開発などをすぐ行えます。 docker パッケージをインストールします。

$ paru -S docker

そして docker サービスを起動・有効化します。

$ sudo systemctl start docker
$ sudo systemctl enable docker

hello-world イメージを pull して実行してみましょう。

$ sudo docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

(略)

docker コマンドの実行には特権が必要になります。ユーザーを docker グループに追加すれば特権なしで実行できます。

$ sudo gpasswd -a myusername docker

しかし、一般ユーザーが root になることと同じ意味になるようなのであまりおすすめしません。

GPG と Pass

以前投稿した GPG で始める暗号・署名ライフ で、 OpenPGP 鍵のセットアップとパスワードマネージャの設定方法を紹介しました。 Arch Linux 上でもセットアップしておくと便利です。

GPG を使うには gnupgpinentry パッケージが必要になりますが、これらは Arch Linux の最小インストールに含まれているのでパッケージのインストール操作は特に必要ありません。そのまま使い始めることができます。

パスワードマネージャの Pass は pass パッケージをインストールすれば使えます。また、 pass-otp をインストールすると時刻同期型ワンタイムパスワードも使えるようになります。

$ paru -S pass pass-otp

Steam

SteamOS + Linux 対応の Steam ゲームが大体プレイできます。また、 Steam Play (Proton) 機能で Windows 用ゲームの約半数がプレイできます。 Steam Play を使用する際は、動作確認データベース ProtonDB を確認しておきましょう。

Steam クライアントは 32 bit のアプリケーションなので、まずは multilib リポジトリを有効にする必要があります。

$ sudoedit /etc/pacman.conf
/etc/pacman.conf
-#[multilib]
-#Include = /etc/pacman.d/mirrorlist
+[multilib]
+Include = /etc/pacman.d/mirrorlist

パッケージデータベースを同期した後、 steam と 32 bit グラフィックドライバをインストールします。

$ paru
$ paru -S steam lib32-nvidia-utils

コンピュータを再起動し Steam (Runtime) を起動すればゲームをプレイすることができます。プレイできなかったり表示がおかしいなどの問題が発生した場合は、 Steam/トラブルシューティング - ArchWikiSteam/ゲーム別のトラブルシューティング - ArchWiki を確認してみましょう。

ちなみに先日 Valve から発表された Steam Deck に搭載されている SteamOS 3.0 は Arch Linux がベースになっているようです。

システムの操作とメンテナンス

Arch Linux は定期的なメンテナンスを行う必要があります。

シャットダウンと再起動

コンピュータのシャットダウンは以下のコマンドで行えます。 rofi などのランチャーで実行しましょう。

$ sudo shutdown -h now

コンピュータの再起動は以下のコマンドで行えます。

$ sudo reboot

rofi の電源メニューのモードを自作して追加してみるのも面白いかもしれません。

システムの更新

Arch Linux はローリングリリースです。パッケージは頻繁に更新されますので、時間があるときはこまめにシステムの更新を行いましょう。 AUR ヘルパー paru では以下のコマンドで公式リポジトリのパッケージを含むすべての更新を行います。

$ paru

パッケージに含まれる設定ファイルを変更していた場合、アップグレードによって *.pacnew ファイルが生成される場合があります。既存の設定ファイルと比較しマージしましょう。

アップグレードによってシステムが壊れる可能性もあるので、忙しい時にアップグレードするのはやめましょう。壊れて起動しなくなったらライブ環境の出番です。

paru を用いて AUR のパッケージをアップグレードする際、 PKGBUILD などの差分が表示されますので必ず確認してから更新して下さい。

サービスの管理

サービスは systemctl コマンドで管理することができます。ここでは sshd (SSH サーバー) サービスを例に管理方法を紹介します。

サービスを開始するには start サブコマンドを使用します。

$ sudo systemctl start sshd

これで sshd が開始します。止めるには stop サブコマンド、再起動するには restart サブコマンドを使用します。

コンピュータの起動時にサービスも起動するには、サービスを有効化する必要があります。 enable サブコマンドを使用します。

$ sudo systemctl enable sshd

これでコンピュータの起動時に sshd が起動するようになりました。解除するには disable サブコマンドを使用します。

サービスの状態は status サブコマンドで確認できます。

$ systemctl status sshd
● sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled)

(略)

サービスのログは journalctl コマンドで確認できます。

$ journalctl -eu sshd

おわり

この記事で紹介したシステム構成や設定はあくまで一例です。シンプルであるが故カスタマイズ性が高いので、自分なりの最適な設定を見つけてみて下さい。

筆者はホームディレクトリの . から始まるファイル群 dotfiles を公開しています。 zsh や i3 などの設定が載っていますので、ぜひ参考にしてみて下さい。 dotfiles を Git で管理すると、他の環境でも簡単に使い回せて便利です。

この記事で触れられなかった事項もたくさんあります。 一般的な推奨事項 - ArchWiki によく目を通しておきましょう。