前置き
今回のコンセプトは 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 つ。
- UEFI なので EFI パーティションを作成する必要がある
- 上記以外はパーティションを分けない
- 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 の設定
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-8
と ja_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
を追加する。
udev
と lvm2
ではなく systemd
と sd-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 は相性が悪いようだ…。
参考
- https://github.com/swaywm/sway/wiki#nvidia-users
- https://nyakuo.hatenablog.com/entry/2018/12/31/100000
「機械学習って 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
- Addon
- ホットキーの変更
- Global Config -> Hotkey -> Trigger Input Method
-
Ctrl + Space
は Emacs とぶつかるのでCtrl + \
に変更
-
- Global Config -> Hotkey -> Trigger Input Method
ブラウザの導入
好きなものを入れれば良いが、とりあえず 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.conf
の HOOKS
の中に base
が含まれている場合 (Arch はデフォルトで含まれている) resume
を filesystem
の前に追加する必要がある。
なお今回のように 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 について掘り下げている他の記事に譲る。
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
#!/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 の設定ファイルに追記すればよい。
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
ファイルがあるアイコンテーマのパスを指定すればよく、自分の環境では以下がすでにインストールされていたのでいったん設定した。
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
各種テーマの導入
今のところやってない(いずれ対応してこの記事に書くかも…)。
アイコンだけでなく、複数バージョンの GTK と Qt に対応し、かつ両者の統一感まで考え出すと面倒。
とりあえず i3 や dunst 等の見た目を整えた時点でそれっぽいやつを適宜導入していけばいいかと思った。
ちなみに、アイコンや GTK のテーマを拾ってくる場所として以前は https://www.gnome-look.org/ を使っていたので、今回もお世話になりそう。
Steam
まずは Multilib を有効化する。
/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/fstab
に discard
フラグを追加することによる TRIM の有効化は推奨されないらしい。
また、今回のように LMV を使っている場合は上記に加えて /etc/lvm/lvm.conf
の issue_discards
の値を 1
に変更すること。
atime
atime 情報の更新を止めて高速化を図る。
/etc/fstab
で relatime
オプションを付与する。
最速は 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