Help us understand the problem. What is going on with this article?

Arch Linux 快適デスクトップ環境の構築 2019

前置き

今回のコンセプトは Mini-ITX の小型機に Ryzen 7 2700X を積む、だ。
( Ryzen 3000 は待てなかった…)
具体的な構成とお値段は以下。いずれも2019年5月時点。

分類 部品名 価格
ケース Metis Plus 5,378
CPU AMD Ryzen 7 2700X BOX (※M/B とセット価格) ※40,581
M/B GIGABYTE B450 I AORUS PRO WIFI -
メモリ Patriot PSD432G2666KH (288Pin/DDR4-2666/16GBx2) 18,981
SSD WD M.2-2280 / 500GB / WD Blue 3D / SATA3.0 6,980
電源 CORSAIR SFX600 Platinum 16,020
CPUファン 虎徹 MarkⅡ(SCKTT-2000) 3,132
追加ケースファン サイズ Kaze Flex 120 PWM 989
グラボ Palit NE5105T018G1-1070F(GTX1050Ti 4G GDR5 STORMX) 14,601

上記とアイネックス ナノダイヤモンドグリス JP-DX1(1,225円)を合わせて、都合 108,556 円。

上記を組み立てインストールの儀式へと入っていった。

以降、Arch Wiki を参照しながら進めていくが、リンクは(原典な気がするので)英語版を基本的に用い、日本語版にしかないコンテンツであればそちらを貼ることとした。
英語版でもサイドペインの「日本語」リンクをクリックすればすぐに日本語版記事に飛べるので、適宜そちらも参照するとよい。

OS インストール

基本は公式インストールガイドに従う。

インストールの準備

署名の検証

これは旧 Arch 機から行なった。
今回は archlinux-2019.05.02-x86_64.iso を用いたが、バージョンはその時最新のものを指定しよう。

$ wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/2019.05.02/archlinux-2019.05.02-x86_64.iso
$ wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/2019.05.02/archlinux-2019.05.02-x86_64.iso.sig
$ sudo pacman-key -v archlinux-2019.05.02-x86_64.iso.sig

今回は CD-R が余っていたので、Brasero により ISO イメージを焼いた。
前回 USB メモリを使って失敗した形跡があるので、CD はまあ無難な選択かもしれない、

ライブ環境の起動

新マシンで上記 CD からライブ環境を起動する。

キーボードレイアウト

公式ガイドでは日本語に変更する方法が書いてあるが、自分は英語のままでよいので何もせず。

起動モードの確認

今回のマシンは BIOS ではなく UEFI である。
以下のディレクトリが存在しその中身があれば UEFI なので、念のためこれで UEFI であることを確定させておこう。

# ls /sys/firmware/efi/efivars

パーティション

ディスクは 1 つしか積んでいない、デュアルブートの予定もなし、という前提のもとでポイントは 3 つ。

  1. UEFI なので EFI パーティションを作成する必要がある
  2. 上記以外はパーティションを分けない
  3. LVM を用いる

パーティションについては、UEFI なので /boot を 512MB FAT32 で切る。
それ以外についてだが、まず swap は swap ファイルを使うので不要。
//home を分離してリカバリを容易にする作戦もあるが、/home の重要なものはクラウドサービスや自宅 NAS に逃がせば個人的に十分なので、再インストールは痛手ではない。
(ちなみに HDD であれば /home を切ることで速くなるようだが、今回のマシンは SSD である)
また /var の増加によるディスク食い潰しも起きるとも思えないので、パーティションは切らずに広くディスクを使える方が利が大きい。
この辺は人それぞれのポリシーがあると思うので、各々の判断で実施してもらいたい。

LVM については、以前のマシンでディスク容量不足に陥いった時に、SSD 追加で簡単に容量の拡張ができて助かった経験があるため今回も採用した。
マシン特性的にこれ以上 SSD を積みたくないのが本音だし、その手の作業が発生しないよう自分の用途に対して十分な容量にしたつもりだが、まあお守りだ。

なおファイルシステムの選定だが、SSD のパフォーマンス劣化防止のため SSD Trim を有効にすることと、swap ファイルを使うことを考えると、現時点では選択肢が ext4, JFS, XFS になるだろうか。
なお Btrfs では swap ファイルが使えない
ファイルシステム事情には疎いのだが、JFS は 日本語 ArchWiki

ext シリーズや ReiserFS ほどは広くサポートされていませんが

とあるので却下。
定番の ext4 か、RHEL で標準となった XFS かだが…今回も無難そうな ext4 を用いることとした。

さて作業開始にあたり、まずはブロックデバイスを確認してみる。

root@archiso ~ # lsblk
NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0  7:0     0 496.6M  1 loop /run/archiso/airootfs
sda    8:0     0 465.8G  0 disk
sr0   11:0     1   609M  0 rom  /run/archiso/bootmnt

というわけで今回は /dev/sda がお目当てのブロックデバイスだ。
対象が確認できたところでパーティションを切ろう。

# fdisk /dev/sda

fdisk の詳細は割愛するが、m でヘルプが出るのでそれを見ながらパーティションを設定していく、
まずは、fdisk の ヘルプから「create a new empty GTP partition table」を見つけてそのコマンドを打つ。
これにより GPT のパーティションテーブルが作成できる。

続いて、UEFI なので ESP (EFI System Partition) を作成する。
ESP の詳細が知りたければこちら
fdisk のヘルプから「add a new partition」を見つけてそのコマンドを打つ。
そこで設定した内容は以下である。

  • Partition number に 1 を指定
  • First Sector には、指定可能な最小値を設定
    • 2048 だった
  • Last Sector には、512MB 相当のセクタ数を指定
    • fdisk が「Units: sectors of 1 * 512 = 512 bytes」とか表示してくれる
    • というわけで +512M を指定した。+ を忘れない

同様に「create a new empty GTP partition table」により、残り全のセクタを Partition number 2 に割り当てる。

続いて「change partition type」よりパーティションタイプを指定する。
Partition number 1 には EFI System を設定したいのだが、悲しいことに指定可能なタイプ一覧はモニタサイズによっては見切れてしまい、何を指定すれば EFI System になるか分からなかったりする。
今回は 1 を選択するのが正解であった。

同様に Partition number 2 に対して change partition type を行い、今度は Linux LVM を設定する。

最後は「write table to disk and exit」を行なう。

LVM の設定

https://wiki.archlinux.org/index.php/LVM#Installing_Arch_Linux_on_LVM

LVM の物理ボリュームの作成を行なう。
先ほどのパーティショニングにより /dev/sda2 が対象の領域となったため、以下のコマンドを実行する。

# pvcreate /dev/sda2

以下のコマンドで /dev/sda2 が表示されれば成功だ。

# pvdisplay

続いて LVM のボリュームグループを作成する。
VolGroup00 は別の名前でも構わないはずなので、任意で変更すること。

# vgcreate VolGroup00 /dev/sda2

次のコマンドで VolGroup00 が存在しているか確認する。

# vgdisplay

作成したボリュームグループを全て、lvolroot という名前で / へ割り当てる。

# lvcreate -l +100%FREE VolGroup00 -n lvolroot

そして以下のコマンドを打ち、/dev/VolGroup00/lvolroot が想定したボリュームサイズ、つまり /boot を除く全容量 で作成されていることを確認する。

$ lvdisplay

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

# mkfs.vfat -F32 /dev/sda1
# mkfs.ext4 /dev/mapper/VolGroup00-lvolroot

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

作成したパーティションをマウントする。

# mount /dev/mapper/VolGroup00-lvolroot /mnt
# mkdir -p /mnt/boot
# mount /dev/sda1 /mnt/boot

インターネットへの接続

有線接続であればライブ環境起動時に接続できるようになっているはずなので ping 1.1.1.1 でも打って確認してみる。
接続できなければ公式のガイドを見ながら設定すること。

システムクロックの更新

以下でシステムクロックを正確にする。

# timedatectl set-ntp treu

インストール

ミラーの選択

/etc/pacman.d/mirrorlist を開き利用したいミラーをアンコメントするの…というわけではなく、全てが最初からアンコメントされている方式なので、以下のようにした。

# cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
# grep -A 1 Japan /etc/pacman.d/mirrorlist | grep Server > /etc/pacman.d/mirrorlist

なおこのミラーリストは上から順に優先されることになる。

ベースシステムのインストール

ではいよいよインストールだ。
これで必要なパケージ群が入る。

# pacstrap /mnt base base-devel

システムの設定

fstab の生成

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

/mnt/etc/fstab の中身は念のため確認しておく。

chroot

新しくインストールしたシステムに chroot する。

# arch-chroot /mnt

タイムゾーン

日本在住なので日本にする。

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

加えてハードウェアクロックが UTC であれば、以下により /etc/adjtime を設定する。

# hwclock --systohc --utc

ロケール

/etc/locale.gen を編集し、en_US.UTF-8 UTF-8ja_JP.UTF-8 UTF-8 をアンコメントする。
続いて以下のコマンドを実行する。

# locale-gen

最後にロケールの設定をするが、ここでは日本語ではなく英語を指定する。
CLI 環境で日本語が出てくると辛いため。

ホストネーム

# echo お好みのほすとねーむ > /etc/hostname

/etc/hosts にも同様の名前を設定する。

127.0.0.1   localhost
::1     localhost
127.0.1.1   お好みのほすとねーむ.localdomain  お好みのほすとねーむ

ネットワーク設定

この時点で設定されなくなっている状況もあるようだが、ping 1.1.1.1 したら通ったので何もしなかった。

Initramfs

LVM のためにまずは /etc/mkinitcpio.conf を編集する。
https://wiki.archlinux.org/index.php/LVM#Configure_mkinitcpio

HOOK において、base の後に udev を、block の後に lvm2 を追加する。
udevlvm2 ではなく systemdsd-lvm2 を追加するという方式もあるようだが、udev がデフォルトで含まれていたので今回はそちらにした。

その後、以下を実行する。

# mkinitcpio -p linux

Root パスワード

任意のものを設定する。

# passwd

ブートローダー

UEFI なので systemd-boot を用いる。
以前は gumiboot を使っていたのだが、それはこの systemd-boot の旧名らしい。
以下でインストールする。

# bootctl --path=/boot install

続いて、AMD の CPU なのでマイクロコードのインストールを行なう。
https://wiki.archlinux.org/index.php/Microcode

# pacman -S amd-ucode

最後に、systemd-boot の設定ファイルを記述する。
まずは /boot/loader/loader.conf に以下を設定する。

default  arch
timeout  4
console-mode max
editor   no

各値はこちらを見つつ変えてよいが、editor はセキュリティ上 no にすることが推奨されている。

続いて /boot/loader/entries/arch.conf に以下を設定する。

title   Arch Linux
linux   /vmlinuz-linux
initrd  /amd-ucode.img
initrd  /initramfs-linux.img
options root=root=/dev/mapper/VolGroup00-lvolroot rw

initrd /amd-ucode.img により、先ほどインストールしたマイクロコードの自動更新がされるようになる。

再起動

# exit
# umount -R /mnt
# reboot

リブート時にインストールメディアを取り除くこと。
そして Arch Linux が起動すれば成功。

デスクトップ機化への道のり

Arch Linux を起動したら root でログインする。
起動できなかったら上記の OS インストールに失敗している可能性があるので残念ながら原因を探しつつ修正する必要がある。

個人ユーザ作成

ひとまず個人ユーザを作り、root での作業をやめる。

# useradd -m {username}
# passwd {username}
# pacman -S sudo
# visudo

作成したユーザが sudo で作用ができるよう、visudo では以下を追記する。

{username} ALL=(ALL) ALL

ここまで終わったら exit し、作成したユーザでログインし直す。

ネットワークの有効化

今回は有線なので以下で済ませた。
@ の後はネットワーク I/F 名になるので、それは ip a コマンドで調べる。

$ systemctl enable dhcpcd@enp8s0
$ systemctl start dhcpcd@enp8s0

(ちなみに今回のマザボは WiFi を搭載しているがとりあえず使わない)

パッケージの更新

$ sudo pacman -Syu

Yay のインストール

AUR のパッケージを使いたくなるシーンがよくあるので、AUR ヘルパーである Yay を入れる。

$ sudo pacman -S git
$ git clone https://aur.archlinux.org/yay.git
$ cd yay
$ makepkg -si
$ rm -rf yay

以降は pacman より yay の方がタイプ数が少ないので、yay を使っていく。
sudo も省略できるし。

systemd-boot の自動更新

Yay が入り AUR が簡単に使えるようになったので、AUR にある systemd-boot 自動更新用パッケージを入れる。

$ yay -S systemd-boot-pacman-hook

systemd-boot は先程のインストール手順により導入されたが、/boot に入ったため通常の pacman 系更新コマンドでは更新されない。
そこで上記パッケージを導入することで pacman の更新にフックして systemd-boot も更新されるようにしておくのが吉。

Wayland を諦めた

さて GUI 環境の構築開始だ。
RHEL 8 が Wayland を採用したし、Arch ユーザとしては負けるわけにはいかねえ! と思ったのだが諦めた。
グラボが NVIDIA じゃなければ採用したのだが…。

ウィンドウマネージャに i3wm を使ってみたいと思っており、ちょうど 1.0 がリリースされた i3wm 互換の Wayland 用 ウィンドウマネージャ Sway に興味を持っていた。
が、Sway と NVIDIA は相性が悪いようだ…。

参考

「機械学習って CUDA 使えた方が有利なのかね? 申し訳程度に NVIDIA にしておくか」と思って熟慮せず選んだパーツだったが、少々悔しい。
何年も前にリーナス御大が中指を立てていたことを知らなかったわけではないが、自分はその意味をよく理解していなかったのだ…。

仕方なく Xorg の導入

ここでは nvidia パッケージを入れているが、必要なドライバはグラボのベンダーや世代によって変わるので注意すること。

$ yay -S nvidia
$ yay -S xorg-server
$ sudo nvidia-xconfig

ちなみに自分の環境では nvidia を入れると CUI の解像度が低くなるという問題が起きており、対応は保留中…。

ディスプレイマネージャの導入

Xorg の起動にあたりディスプレイマネージャを導入する。
今回は LightDM を採用した。
以前は SLiM を使っていたが開発が終了したので、他の軽量なものを選んだ。

$ yay -S lightdm lightdm-webkit2-greeter
$ sudo systemctl enable lightdm

合わせてインストールしている lightdm-webkit2-greeter は Greeter と呼ばれるログイン情報入力 GUI である。
これにはいくつか選択肢があるので好みのものを使うとよい。
そしてインストールした Greeter を設定する。
/etc/lightdm/lightdm.conf において、以下を記述する。

[Seat:*]
…
greeter-session=lightdm-webkit2-greeter

なおここで設定可能な Greeter 名は /usr/share/xgreeters を見れば分かる。

さて LightDM の設定は色々変更できそうだが、今回は割愛する。

ウィンドウマネージャの導入

では早速 Xorg を起動! とはせずに、ウィンドウマネージャを入れよう。
これまで GNOME、Openbox、Xmonad と変遷してきたが、今回は i3wm にした。
ターミナルには従前より利用している Terminator を選んだ。
やはりタイル型はなじむ。実になじむ。

$ yay -S i3-wm i3status terminator
$ sudo reboot

これで成功すれば LigthDM のログイン画面が表示される。
そこで i3 のセッションを選択、id/pw を入力してログインしよう。
すると i3 のデフォルト設定がないから作るよと表示されるのでウィザードに従って作成する。

あとは mod + enter でターミナルが起動する。
i3 は空気を読んで未設定でも Terminator を使ってくれるようだ。

さて i3wm の設定もやりがいがありそうだが、今回は割愛する。

フォント

日本語フォントの導入

AUR に Nerd Fonts パッチ適用済みの Ricty が上がっているのでありがたく使う。

$ yay -S nerd-fonts-ricty

あるいは好みであれば Cica フォントを入れてもいいかも知れない。

$ yay -S ttf-cica

絵文字

Symbola を使う。

$ yay -S ttf-symbola
$ fc-cache -f -v

このあと、ブラウザやターミナルエミュレータ等の GUI アプリケーションは再起動することで絵文字が表示されるようになる。

日本語入力

Fctix + Mozc を使う。
本当は IBus の IM 切り替えのモッサリ感が好きではない。
Fctix は母音が変な位置に出る問題があるので一度は諦めていたが、軽く触ってみたところ修正されているようだったので改めて採用した。
なお Nimf という新興の IM フレームワークもあるが、どうも Anthy 縛りっぽいので見送った。

まずは ~/.xprofile に環境変数および自動起動の設定をする。

export LC_CTYPE=ja_JP.utf-8

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

fcitx &

LC_TYPE で行なっているロケールの設定を忘れると、Fcitx に Mozc をはじめとした日本語 IM が追加されないので注意する。
なおこの設定は /etc/locale.conf でやることもできるが、その場合はシステムグローバルに日本語になり、CLI でのトラブルシューティングが辛くなるのでやらない。
ここで一旦、再ログインする。

そして必要なパッケージを入れる。

$ yay -S fcitx-mozc fcitx-configtool fcitx-im

なお前述のロケール設定を忘れて Fcitx を起動すると Mozc が現れなくなるが、この場合は ~/.config/fcitx を消して Fcitx を再起動すれば直るようだ。

あとはタスクトレイにいる Fcitx のアイコンをクリックして Configure を選び、次の設定をして個人的な好みにした。

  • インライン入力
    • Addon
      • Advanced にチェックを入れる
      • Fcitx XIM Frontend を選択し、Configure ボタンを押す
      • Use On The Spot Style for XIM にチェックを入れる
      • タスクトレイのアイコンを右クリックし、restart
  • ホットキーの変更
    • Global Config -> Hotkey -> Trigger Input Method
      • Ctrl + Space は Emacs とぶつかるので Ctrl + \ に変更

ブラウザの導入

好きなものを入れれば良いが、とりあえず Chromium を入れた。
ちなみに yay ならば Vivaldi も入れられる。

$ yay -S chromium

パスワードマネージャの導入

もし OSS のもを使うなら KeePassXC、あるいは後発の Bitwarden も良さそうだ。
この辺はお好みで。

$ yay -S keepassxc

# あるいは
$ yay -S bitwarden

必要なデータベースファイルやキーファイルは、何らかの手段でこの Arch 機のローカルまで持ってこよう。

さてここまでくれば、「とりあえず使えるぜ」感が出るだろう。

SSH 鍵

GitHub などへの鍵登録用。

$ yay -S openssh
$ ssh-keygen -t ed25519

$ yay -S pulseaudio pavucontrol volumeicon

volumeicon を起動し、右クリックから Status Icon を開く。
そして External mixier に pavucontrol を指定する。

続いて PulseAudio と pavucontrol を起動する。
たった今設定したように、pavucontrol はタスクトレイの volumeicon を右クリックして表示させてもいい。

$ pulseaudio --start
$ pavucontrol &

なお PulseAudio は次回から手動で起動しなくてもよい…はず。

そして画面から適当にミュートを解除して音が出ることを確認する。
ここでブラウザで音を出そうとして出ない場合は、一度ブラウザを再起動すると直る可能性がある。

ちなみに volumeicon も初期起動するよう設定しておこう。

$ echo 'volumeicon &' >> .xprofile

Swap

次節のハイバネートで必要になるのでこの時点で作成する。
Swap のサイズについては RedHat の記事に従って決めると良さそうだ。
今回は 34GB になる。

また、Swap はパーティションではなく Swap ファイルとして作成する。

作成とマウントには systemd-swap を使っても良さそうだったが、手動でやっても大した手間ではないので以下のように手動でやった。
最後の tee コマンドで -a オプションを忘れると面倒なことになるので気をつけること。

$ sudo fallocate -l 34G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ echo '/swapfile none swap defaults 0 0' | tee -a /etc/fstab

ハイバネート

カーネルパラメータの設定が必要になる。
まずは以下を実行して表示される physical_offset の最初の値を確認する。
以下の出力例においては 10074112 である。

$ sudo filefrag -v /swapfile | head -n 5

Filesystem type is: ef53
File size of /swapfile is 36507222016 (8912896 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..       0:   10074112..  10074112:      1:            
   1:        1..   10239:   10074113..  10084351:  10239:             unwritten

続いて /boot/loader/entries/arch.conf にある option の値を変更する。
ここまでの設定では以下のようになっているはずだ。

options root=/dev/mapper/VolGroup00-lvolroot rw

これにハイバネート用のパラメータ resume および resume_offset を付け足す。
resume にはスワップファイルの載っているデバイスファイルのパス、あるいは UUID を指定する。
あくまでデバイスファイルの情報であり、Swap ファイルそのもののパス (今回は /swapfile) を指定しないこと。
resume_offset は先程取得した数字を指定する。
今回の例では以下のようになる。

options root=/dev/mapper/VolGroup00-lvolroot rw resume=/dev/mapper/VolGroup00-lvolroot resume_offset=10074112

続いて initramfs の設定をする。
/etc/mkinitcpio.confHOOKS の中に base が含まれている場合 (Arch はデフォルトで含まれている) resumefilesystem の前に追加する必要がある。
なお今回のように LVM を使っている場合は lvm2 の後ろでもある必要がある。

HOOKS=(base udev autodetect modconf block lvm2 resume filesystems keyboard fsck)

そして initramfs を再生成する。

$ sudo mkinitcpio -p linux

ではハイバネートしてみよう。
(ブート時のパラメータをいじってるので、もしかしたら一度再起動してからでないとダメかも知れない…自信なし)

$ systemctl hibernate

なおこのハイバネート用コマンドは、後述のランチャーである Rofi に登録しておくと便利である。

さて、ここでハイバネートから復帰すると気づくことがあるだろう。
認証なしで元の状態に復帰するので危険だぞ…と。
これは次のセクションで解消する。

スクリーンロック

というわけで、ハイバネートからの復帰時や、ちょっとトイレに行ってくる間にスクリーンロックをかけられるようにする。

$ yay -S xss-lock i3lock

xss-lock はハイバネートやサスペンドにフックしてロックを呼び出してくれる機構であり、ロックそのものではない。
i3lock はロックであり、今回は i3wm であるため選択した。他の選択肢としては xsecurelock など複数あるので、i3wm 以外を使うのであれば調査して好きなものを入れること。

xss-lock による見張りを開始するには以下のコマンドを打つ。

$ xss-lock -- i3lock &

起動スクリプトへの登録しておこう。

$ echo 'env LC_CTYPE="" xss-lock -- i3lock &' >> ~/.xprofile

なおここで LC_CTYPE 環境変数の設定をしているのは、i3lock が以下のエラーを吐くためだ。

xkbcommon: ERROR: couldn't find a Compose file for locale "ja_JP.utf-8"                                                          
[i3lock] xkb_compose_table_new_from_locale failed

ちなみにスタンバイ状態にしてスクリーンロックをかけるコマンドは、自分は以下を使っている。
これも後述のランチャーから呼び出せるようにすると便利だ。

$ xset dpms force standby

ランチャー

Rofi を使っている。便利。
Mac で言うところの Spotlight っぽいやつ。
自前のスクリプトを仕込んだり、SSH の候補を選んだり、アクティブなウィンドウの切り替えなんかにも使える。

$ yay -S rofi

この記事では前述の、ハイバネートとスタンバイをここから呼び出す設定を以下に書いておく。
必要なファイルは 2 つだ。
もっと色々設定できるが、それは Rofi について掘り下げている他の記事に譲る。

~/.config/rofi/config
rofi.modi:  window,run,drun,system:~/.config/rofi/rofi_system.sh
rofi.sidebar-mode: true
rofi.hide-scrollbar: true
rofi.kb-cancel: Escape
rofi.theme: /usr/share/rofi/themes/glue_pro_blue.rasi
~/.config/rofi/rofi_system.sh
#!/usr/bin/env bash

set -euCo pipefail

function main() {
  # can not use some special charactors
  # e.g. ( )
  local -Ar menu=(
    ['Standby']='xset dpms force standby'
    ['Hibernate']='systemctl hibernate'
  )

  local -r IFS=$'\n'
  # with some arguments:  execute a command mapped to $1
  # without any arguments show keys
  [[ $# -ne 0 ]] && eval "${menu[$1]}" || echo "${!menu[*]}"
}

main $@

さてこの Rofi をどうやって呼び出すかだが… i3 にショートキーで呼び出す設定を入れるのが良いだろう。
個人的な好みは alt + space だ。
起動オプションは任意だが、例としては以下を i3 の設定ファイルに追記すればよい。

~/.config/i3/config
bindsym Mod1+space exec rofi -combi-modi -font "hack 10" -show

ちなみに、同設定ファイルを見ると、$mod+d に類似のランチャーである dmenu がデフォルトで割当てられている。
が、Rofi が dmenu replacement を謳っているためそちらは出番なし。

ナイトモード

夜間はブルーライトをカットし、眠りの質を多少でも上げたい。
そもそも PC なんぞやってないで早く寝ろというのは正論だが対応が難しいため、小手先の手法で何とかしたいのが人情である。

そんなニーズに応えてくれるのが Redshift である。

$ yay -S redshift

引数なしで redshift コマンドにより起動すると、緯度経度を取得しにいってそれをベースに計算してモニタの色合いを調整してくれるようだ。
とはいえ緯度経度を毎度取得しては欲しくないので、あらかじめ /.config/redshift.conf に記入しておくのがよい。

[redshift]
location-provider=manual

# これはハンブルグの緯度経度である
# 修正して使うこと
[manual]
lat=48.1
lon=11.6

このパッケージには、redshift-gtk という GUI フロントエンドも含まれている。
これを使うためには以下のパッケージを追加する。

$ yay -S python-gobject python-xdg librsvg

起動するとタスクトレイに常駐する。
このアイコンを右クリックして Autostart にチェックを入れておくとよい。

redshift-gtk も自動起動にも加えておく。

$ echo 'redshift-gtk &' >> ~/.xprofile

デスクトップ通知

Dunst を入れる。
Dzen2 という選択肢もあるが、見た目が気に入らず却下した記憶がある。
他にもっといいのがあれば試したい。

$ yay -S dunst
$ mkdir -p ~/.config/dunst
$ cp /usr/share/dunst/dunstrc ~/.config/dunst/dunstrc

この dunstrc はカスタムして好みの見た目に仕上げるわけだが、icon-path の値は適切にしておかないと、通知時にこんなエラーが出る。

WARNING: No icon found in path: 'dialog-information'

dialog-information.png ファイルがあるアイコンテーマのパスを指定すればよく、自分の環境では以下がすでにインストールされていたのでいったん設定した。

~/.config/dunst/dunstrc
icon_path = /usr/share/icons/Adwaita/16x16/legacy

好みのアイコンセットが各々あると思うので、好きなものを入れてパスを設定すること。

では起動の設定だ。

echo 'dunst &' >> ~/.xprofile

ちなみに起動が成功したかどうかのテストには以下のようなコマンドを打てば良い。
起動できていれば通知が出る。

$ notify-send 'subject' 'this is test'

温度やファンの回転数を見る

PC を自作する以上は重要。
温度が高すぎるならエアフローを見直す必要がある。

ツールとしては lm_sensors を使う。
https://wiki.archlinux.org/index.php/Lm_sensors

$ yay -S lm_sensors
$ sudo sensors-detect

sensors-detect ではいろいろ質問されるが、すべて Enter を入力すれば無難なセットアップになるようだ。

さて温度などを見る方法だが、sensors コマンドを使って CUI で見てもいいし、GUI フロントエンドである xsensors または psensor を使ってもいい。
個人的には psensor の方が詳細で好きだ。アラーム機能もあり、タスクトレイに常駐させることもできる。

$ yay -S psensor
$ psensor &
$ psensor & >> .xprofile

Web カメラ

ドライバの都合で使える Web カメラとそうでないものがあるようなので、まずはここを眺めて使えそうなものをピックアップする。

自分は Logicool C270 を選んだ。
この Web カメラに対応するドライバ linux-uvc であり、カーネルモジュール uvcvideo がロードされていればよいようだ。
以下で確認したらすでにロード済みのようだったので、PC にカメラを接続してみたら見事に使えた。
めでたし。

$ modprobe -c | grep uvcvideo

CLI ツール群

何を入れるか、どう設定するかは他に詳しい記事がいくらでもありそうなのでそちらに譲るが、現時点で個人的に使っているツールの中で基本的なものをざっと書いておく。
作業効率を考えれば、これらはこの一連のインストール作業の序盤で入れておくべきだったかも知れない。

  • fish + fisherman
  • tmux + tpm
  • fzf
  • ag
  • fd
  • alias ls='lsd'
  • alias diff='colordiff'

最近は alias cat='bat' も検討中。

Arch Linux 特有のもの

$ yay -Ss pacman-contrib pkg-tools

見た目を整える

壁紙

Nitrogen を使う。
先に好きな壁紙を用意しておくのをお忘れなく。

$ yay -S nitrogen
$ nitrogen /path/to/壁紙画像のあるディレクトリ

これで GUI が起動するので好みに設定し、Apply してから終了する。

そして起動時に壁紙を表示するように以下を行う。

$ echo 'nitrogen --restore &' >> ~/.xprofile

背景透過

Compton を使う。

$ yay -S compton

起動オプションは適宜調べて好みに設定すればよいが、バックグラウンド起動は -b でできるので最低限このオプションだけつけておけばいいだろう。

$ compton -b
$ echo 'compton -b' >> ~/.xprofile

各種テーマの導入

今のところやってない(いずれ対応してこの記事に書くかも…)。
アイコンだけでなく、複数バージョンの GTKQt に対応し、かつ両者の統一感まで考え出すと面倒。
とりあえず i3 や dunst 等の見た目を整えた時点でそれっぽいやつを適宜導入していけばいいかと思った。

ちなみに、アイコンや GTK のテーマを拾ってくる場所として以前は https://www.gnome-look.org/ を使っていたので、今回もお世話になりそう。

Steam

まずは Multilib を有効化する。
/etc/pacman.conf の以下をアンコメントする。

/etc/pacman.conf
[multilib]
Include = /etc/pacman.d/mirrorlist

続いて以下を実行する。

$ yay -Syy

そして 32 bit の NVIDIA ドライバと Steam を導入する。

$ yay -S lib32-nvidia-utils steam

もしかすると、ここでマシンを再起動する必要があるかも知れない。
pacman -Syu によるパッケージ更新など、グラフィックドライバに変更があった場合は再起動しないと Steam の起動で失敗するケースがあるようだ。

あとは steam コマンドで起動すればよい…のだが、上記の再起動をしたところでこの起動でけっこうトラブることがある。
そんな時は Arch Wiki の Steam トラブルシューティング記事なんかを見ながら粘る。
粘る…。

ゲームパッド

試しに Xbox の 360 コントローラーを買ってみたところ、Linux 側は認識しているものの Steam の入力には使えないという状態だった。

そこで antimicro を使ってゲームパッドの入力をキーボードの入力に割り当てることでゲームを遊べるようにした。

$ yay -S antimicro
$ antimicro &

チューニング

とりあえず Arch Wiki にあるもののうち Disk I/O 関連だけやっておいた。
https://wiki.archlinux.org/index.php/Improving_performance

SSD

TRIM

速度劣化を防止するため TRIM を有効化する。

まずは TRIM がサポートされているかを先に確認すること。

$ yay -S hdparm
$ sudo hdparm -I /dev/sda |grep TRIM                                                                                               
           *    Data Set Management TRIM supported (limit 8 blocks)
           *    Deterministic read ZEROs after TRIM
$ yay -Rs hdparm

supoprted とあるので fstrim を有効にする。

$ sudo systemctl enable fstrim.timer
$ sudo systemctl start fstrim.timer

ちなみに日本語版の Arch Wiki にしか書いてなさそうだったのだが、/etc/fstabdiscard フラグを追加することによる TRIM の有効化は推奨されないらしい

また、今回のように LMV を使っている場合は上記に加えて /etc/lvm/lvm.confissue_discards の値を 1 に変更すること。

atime

atime 情報の更新を止めて高速化を図る
/etc/fstabrelatime オプションを付与する。
最速は noatime オプションを使って完全に atime の更新を止めることなのだが、atime が全く更新されなくなると上手く動作しないアプリケーションが一部あるようなので、ファイル書き込み時だけは更新してくれる relatime を妥協案として使うのが現実解になりそうだ。

そして /etc/fstab を変更したので再起動…と思ったら、以下のコマンドを打てばよいようだ。

$ sudo mount -a

I/O スケジューラ

SSD の場合は伝統的な CFQ では遅いという話があり、変更を試みた。

$ cat /sys/block/sda/queue/scheduler                                                                                              
[mq-deadline] kyber bfq none

というわけでもともと mq-deadline になっていたのでこのまま行ってみることにした。

ちなみに LVM を使っている都合で dm-0 というブロックデバイスもあるが

$ cat /sys/block/dm-0/queue/scheduler                                                                                              
none

これは…このままでいいいのかな?
none になっていたら調整するなという記事も見かけたので。

ちなみにこの dm-X が何かというのはこちらのスクリプトで判明する。

Swap

swappiness を 10 にする。0 にはしない。
参考: https://qiita.com/rarul/items/a96b61b1fb535dea5fe3
RAM は 32GB と多く積みはしたが、正直 swappiness の挙動をちゃんと理解できておらず、0 にするのが本当に適切なのかは怪しい…。
というわけで Red Had の推奨値である 10 を設定することとした。
まあこの推奨値も、Oracle DB では、という枕詞があるわけだが…。

まずはデフォルト値である 60 が設定されていることを確認しておく。

$ cat /proc/sys/vm/swappiness
60

というわけで 10 まで下げる。
現在のセッションで swappiness を一時的に変更するのと、永続化設定を両方入れるのでコマンドは 2 つ。

$ sudo sysctl vm.swappiness=10
$ echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.d/99-sysctl.conf
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした