🏔 【随時更新】Arch Linux + Hyprlandの環境整備

これは何❓
かれこれ数年くらいArch Linuxをメイン環境として使い続けています。しばらくi3wmを使っていましたがWaylandネイティブなコンポジタであるHyprlandに移行しました。
ここではArch LinuxとHyprlandを使った環境構築の手順や便利ツール、Linuxデスクトップに関連する知見をまとめて随時更新していきます。
Linuxデスクトップの良さとは何か🐧
まず、Linuxデスクトップの特徴として高いカスタマイズ性が挙げられます。WindowsユーザーやmacOSユーザーが壁紙を変えるような感覚でアプリケーションの配色テーマを変更し、システムフォントを変更し、キーバインドを設定し、自分好みの環境を作り込むことができます。
しかしながら、こういったカスタマイズ(いわゆる 盆栽)に時間を掛けるのは骨が折れる作業かもしれません。
それでも、「手に馴染む」「かゆいところに手が届く」環境が手に入ったときの喜びは格別なものです。(むしろ、Linuxをデスクトップとして使い始めてから かゆい と感じる部分に気づけたというか、自分が欲しいUIはこうだ!という感覚が分かってきた感覚があります。)
特に、キーボードを使った操作を特定のコマンドに柔軟に割り当てられるためマウスに手を伸ばさずに高速かつ快適に操作できるところが気に入っています。
あと見た目がハッカーっぽくてカッコいいところですね。ここが一番大事です。
それでは、よいLinux生活を!🐑♥🐧

paru
のインストール
AURヘルパー
paru
の導入
AURのページにあるPKGBUILDをダウンロードし、makepkg -sic
を実行するとインストールできる。
以降、パッケージのインストールは paru
を使う。
cd "(mktemp -d)"
curl -sL "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=paru"
makepkg -sic
補足
makepkg はArch Linuxのパッケージをビルドするためのツールであり、pacmanパッケージの中に同梱されている。
上記で使ったオプションの意味は次の通り。
-
-s
,--syncdeps
: 依存パッケージをインストールする。 -
-i
,--install
: ビルドしたパッケージをインストールする。 -
-c
,--clean
: パッケージをビルドした後、残ったファイルをクリーンアップする。
詳しくはArch Wikiを参照。

Hyprlandの基本設定
設定ファイルの編集
Hyprlandの設定ファイルは ~/.config/hypr/hyprland.conf
にある。
設定に使われるキーワードの一覧は公式ドキュメントのここにある。
設定ファイルを編集したら、hyprctl reload
を実行すると設定をリロードできる。
キーバインド
メインのモディファイアキーは規定では SUPER
(いわゆるWindows)キーになっている。
左Altキーに変更する場合は次のようにする。
$mainMod = LALT
キーバインドは次のような構文になっている。値にはたとえば $mainMod
のような変数を使うことができる。
bind = MODS, key, dispatcher, params
設定例:
$terminal = wezterm
$fileManager = thunar
bind = $mainMod, T, exec, $terminal
bind = $mainMod, RETURN, exec, $terminal
bind = $mainMod, Q, killactive,
bind = $mainMod CTRL, Q, exit,
bind = $mainMod, E, exec, $fileManager
hyprland.conf
で使われるキーシンボルの一覧は、xdbcommonの xkbcommon-keysyms.h
というヘッダーファイルに書いてある。
XKB_KEY_
の後ろにある名前がシンボル名になる。

アプリケーションランチャー(rofi-wayland)
rofi-wayland をインストールする。
paru -S rofi-wayland
rofi-wayland(rofi
)は次のようなコマンドで起動する。-modi
は表示するモード -show
は起動時に表示するモード
rofi -modi drun,run -show drun # アプリケーションランチャーとして動作させる
rofi -modi window -show window # ウィンドウスイッチャーとして動作させる
hyprland.conf
でキーバインドをセットすることでキーボード操作のみで素早くアプリケーションの起動やウィンドウの切り替えができる。
$launcher = rofi -modi drun,run -show drun
$windowSwitcher = rofi -modi window -show window
bind = $mainMod, SPACE, exec, $launcher
bind = $mainMod, TAB, exec $windowSwitcher

日本語入力(fcitx5 + mozc)
Linuxで日本語入力を行うには、インプットメソッドエディタ(IME)とインプットメソッドフレームワーク(IMF)それぞれインストールされていて、なおかつ利用するアプリケーションがIMFによりサポートされている必要がある。
- IME: ラテン文字を使って非ラテン文字を入力するためのアプリケーション。代表的なものにGoogle日本語入力から派生したMozc、文節を明示的に指定して変換できるSKK、そしてKKCなどがある。
- IMF: 複数のIMEを簡単に切り替えられるようにするためのアプリケーション。代表的なものにFcitx5、Fcitx、IBus、Uimなどがある。
ここでは、IMFとしてFcitx5を、IMEとしてMozcをインストールする。
paru -S fcitx-im fcitx5-mozc
fcitx5-im
はグループパッケージになっており、GTK/Qtをサポートするためのモジュール(fcitx5-gtk
/fcitx5-qt
)とGUIの設定ツール(fcitx5-configtool
)が同梱されている。個別にインストールすることもできるが、まとめて入れておくのが無難と思われる。
次に fcitx5-configtool
を起動し、インプットメソッドの一覧から mozc
エントリを追加してKeyboard
エントリの下になるように配置する。
fcitx5をHyprlandの起動時に自動起動するよう、hyprland.conf
に次の行を追加する。
exec-once=fcitx5-remote -r # 設定をリロードする
exec-once=fcitx5 -d --replace # fcitx5をバックグラウンドで起動し、既に起動しているインスタンスがあれば置き換える
FirefoxなどのGUIアプリケーションを起動して Ctrl+Space
で日本語入力に切り替えられればOK!

キーボード入力やタッチパッド入力の調整
hyprland.conf
を次のように編集する。
input {
repeat_delay = 140 # リピート遅延時間
repeat_rate = 50 # リピートレート
kb_layout = us # キーボードレイアウト
#kb_variant =
#kb_model =
#kb_options =
#kb_rules =
follow_mouse = 1 # ウィンドウフォーカスをマウスに追従させる
touchpad {
natural_scroll = yes # タッチパッドの上下操作とスクロール方向を同じ方向にする
}
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}

GTK/Qtやカーソルのテーマ
Linuxでは、GUIの開発ツールキットとしてGTKやQtがよく使われる。デスクトップの見た目に統一感を出すには、GTKとQtそれぞれのテーマ選定し個別に設定する必要がある。
テーマの選定
各種テーマはPlingのサイトから見つけることができる。
次のテーマがカッコよくておすすめ。
GTK
Xorg環境でのGTKテーマ設定方法
i3などのXorg環境では、GTKの設定ファイル ~/.config/gtk-3.0/settings.ini
や ~/.gtkrc-2.0
などを変更するには、LXDEにも含まれる
lxappearance
を使う方法があった。
GUIでテーマの設定を行い、GTKの設定ファイル内の値を自動で読み込ませる(nwg-look + gsettings)
一方、HyprlandではWaylandネイティブで動く nwg-lookというツールを使うことができる。ただし、設定を変更しただけではHyprlandの環境に読み込まれないため、GNOMEの gsettings というコマンドライン設定ツールを使ってセットした値を読み込ませる。
gsettings set org.gnome.desktop.interface gtk-theme <gtk-theme>
gsettings set org.gnome.desktop.interface icon-theme <icon-theme>
gsettings set org.gnome.desktop.interface cursor-theme <cursor-theme>
gsettings set org.gnome.desktop.interface font-name <font-name>
Hyprlandの起動時に自動でテーマを読み込む
settings.ini
の内容をgssettingsに渡すスクリプトを作り、Hyprlandの起動時にそれを読み込ませる方法がSway Wikiにあったため紹介する。
まず、nwg-lookとGTKに対応したテーマやアイコン等をインストールしてnwg-lookを使って好みのテーマをセットする。
paru -S nwg-look
paru -S kali-themes papirus-icon-theme matcha-gtk-theme
次に、下記ようなスクリプトを作り、hyprland.conf
からこれを呼び出すように構成する。
#!/bin/sh
#
# init-gtk.sh
#
config="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-3.0/settings.ini"
if [ ! -f "$config" ]; then
echo "GTK config file not exists: ${config}" 1>&2
exit 1
fi
gnome_schema="org.gnome.desktop.interface"
gtk_theme="$(grep -F 'gtk-theme-name' "${config}" | sed 's/.*\s*=\s*//')"
icon_theme="$(grep -F 'gtk-icon-theme-name' "${config}" | sed 's/.*\s*=\s*//')"
cursor_theme="$(grep -F 'gtk-cursor-theme-name' "${config}" | sed 's/.*\s*=\s*//')"
font_name="$(grep -F 'gtk-font-name' "${config}" | sed 's/.*\s*=\s*//')"
gsettings set "${gnome_schema}" gtk-theme "$gtk_theme"
gsettings set "${gnome_schema}" icon-theme "$icon_theme"
gsettings set "${gnome_schema}" cursor-theme "$cursor_theme"
gsettings set "${gnome_schema}" font-name "$font_name"
#
# hyprland.conf
#
exec = "${XDG_CONFIG_HOME:-${HOME}/.config}/hypr/init-gtk.sh"
Qt
Qtの構成ツールとしてQt5ct, Qt6ct, Kvantum, Kvantum Qt5をインストールし、
Qtに対応したテーマをインストールする。
paru -S qt5ct qt6ct kvantum kvantum-qt5
paru -S kvantum-theme-matchama
Kvantumでテーマを選択し、Qt5ct, Qt6ctにてStyleを「kvantum-dark」に、Standard dialogsを「GTK3」にセットすることで統一感のある見た目になる。
カーソルテーマ
hyprcursor をインストールして、hyprland.conf
に次の内容を追加する。
paru -S hyprcursor
env = HYPRCURSOR_THEME, Qogir Cursors
env = HYPRCURSOR_SIZE, 24

Polkitと認証エージェント
特権の必要なユーザーアプリケーション(例えばパーティショニングツールのGpartedやKDEパーティションマネージャ、ファイヤウォール構成ツールであるfirewall-configなど)を使うにはPolkitとその認証エージェントが必要となる。今回は認証エージェントとして polkit-gnome
を使う。
Polkitと認証エージェントをインストール後、polkit.service
を有効化・開始し、hyprland.conf
にて認証エージェントを自動起動するように構成する。アプリケーションの起動時にパスワードの入力を促すダイアログが出ればOK。
paru -S polkit polkit-gnome
systemctl enable --now polkit.service
# ~/.config/hypr/hyprland.conf
exec-once=/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1

ファイルマネージャ(Thunar)
ファイル操作は専らシェルでやるかkamiyaa/joshutoやgokechan/lfなどのTUIツールを使っているが、GUIのファイルマネージャもときどき必要になるので入れておく。
GUIのファイルマネージャにはLXDEのPCManFMや KDEのDolphin、GNOMEのNautilusなどがあるが、XFCEのThunarがシンプルで使い勝手がよく気に入っている。
Thunarのインストール
Thunarと、必要であればそのプラグインをインストールする。
paru -S thunar thunar-archive-plugin thunar-media-tags-plugin thunar-volman
外部ストレージ・リモートサーバー等へのアクセス(GVfs)
外部ストレージやリモートサーバー、クラウドストレージなどのリソースにアクセスする際はGVfsというGNOMEの仮想ファイルシステムがよく使われる。GVfsはユーザー空間で動作するため、特権を必要とせずにいろいろなリソースに対してローカルのストレージと同じように統合された方法でアクセスすることができる。
paru -S gvfs
外付けのHDD/SSDやUSBメモリなどを自動でマウントする
Thunarでは、リムーバブルメディアを自動でマウントすることができる。
メインメニューの「Edit」→「Preferences」から設定画面を開き、「Advanced」タブにある「Volume Management」の「Configure」と書いてあるリンクからリムーバブルメディアの設定画面を開く。
「Mount removable drives when hot-plugged」にチェックを入れると、リムーバブルメディアのThunarの左側ペインにデバイスが表示されるようになる。
SSH経由で外部のサーバーのファイルシステムにアクセスする
sshfs
をインストールして、Thunarのアドレスバーに次のURIを入力することでアクセスできる。
ssh://サーバー名またはIPアドレス
NTFSでフォーマットされたドライブにアクセスする
ntfs-3g
をインストールする。
Windowsの共有フォルダ(SMB/CIFS)にアクセスする
gvfs-smb
パッケージをインストールして、アドレスバーに次のURIを入力することでアクセスできる。
smb://サーバー名またはIPアドレス/共有フォルダ名
Android端末等のファイルシステムにアクセスする(MTP)
Android端末等とUSB経由でファイルをやりとりするにはMTP: Media Transfer Protocolというプロトコルが使われる。 gvfs-mtp
パッケージをインストールし端末とPCを接続後、Android端末の通知領域を開き「ファイル転送」を選択するとThunarから端末のファイルシステムにアクセスすることができる。

ステータスバー(waybar)
Wayland環境では、シンプルなステータスバーである waybar を使うことができる。
waybar
パッケージをインストールして、Hyprlandに下記の内容を追記すると自動起動できる。
paru -S waybar
exec-once = waybar -c ~/.config/waybar/waybar.conf
カスタマイズの例はGitHubにあるWikiのexamplesの項で見つけることができる。

Bluetoothを使う(BlueZ)
Linuxにおいて、Bluetoothプロトコルスタックの実装にはBlueZが標準的に使われる。
BlueZのインストールと有効化
bluez
と bluez-utils
をインストールし、bluetooth.service
を有効化する。
paru -S bluez bluez-utils
systemctl enable --now bluetooth.service
サービスを有効化したら systemctl status bluetooth.service
を実行して、ステータスが 🟢 active (running)
となっていることを確認する。
コマンドラインでBluetoothデバイスに接続する(bluetoothctl)
bluez-utils
パッケージに含まれる bluetoothctl
を使ってBluetoothデバイスに接続する。コマンドライン引数を指定せずに起動すると対話セッションに入る。(bluetoothctl devices
のように、コマンドライン引数に直接 内部コマンドを指定してもよい。)
基本的な使い方は次の通り。
$ bluetoothctl
[bluetooth]# power on # コントローラの電源をONにする
[bluetooth]# scan on # デバイスのスキャンをONにする
[bluetooth]# devices # デバイスの一覧を取得する
[bluetooth]# pair <接続したいデバイスのMACアドレス> # デバイスとPCをペアリングする
[bluetooth]# connect <接続したいデバイスのMACアドレス> # デバイスに接続する
[bluetooth]# <Ctrl-D>
$
TUIで操作する(bluetui)
linuxmint/blueberryやbluemanなどのGUIフロントエンドがあるが、軽量なTUIフロントエンドである bluetui を使うこともできる。
TUIであればマウスに手を伸ばすことなくデバイスの一覧を見ながら簡単に接続できて便利。
paru -S bluetui

ラップトップのモニターの明るさを調整する(brightnessctl)
ラップトップに備え付けのモニターの明るさを調整するには、brightnessctlを使う。
paru -S brightnessctl
brightnessctlの使い方
コマンドの基本的な使い方を次の通り。
brightnessctl info # デバイスの情報を取得する
brightnessctl get # 現在の明るさの値を取得する
brightnessctl set 50% # 最大値の50%の明るさに変更
brightnessctl set +10% # 現在の明るさより10%明るくする
Hyprlandでキーを割り当てる
hyprland.conf
に次の内容を書き hyprctl reload
で設定をリロードすると、キーショートカットで明るさを調整できるようになる。
# ~/.config/hypr/hyprland.conf
bind = $mainMod SHIFT, comma, exec, brightnessctl set -5%
bind = $mainMod SHIFT, period, exec, brightnessctl set +5%

対話的なログインUIによるセッション管理(greetd + tuigreet)
Hyprlandやswayなどのセッションに対話的にログインできるようにするための環境を整える。
そのためには、ログインセッションを管理する「ログインマネージャ」とそのUIを提供する「Greeter」をインストールする必要がある。
ここでは、ログインマネージャのgreetdとコンソールベース(TUI)のGreeterであるtuigreetを使ってみる。もちろん、グラフィカルなGreeterであるgtkgreetやqtgreetなどを使っても良い。
まず、greetd
とgreetd-tuigreet
をインストールする。
paru -S greetd greetd-tuigreet
次に、/etc/greetd/config.toml
を編集して tuigreet
のコマンドを指定する。
tuigreet
は --theme
オプションの引数でボタンや枠線などの色をカスタマイズできる。ハイライトカラーをシアンやグリーンにすると某映画みたいでカッコいい。
[terminal]
# greetdが実行される仮想コンソールの番号
vt = 1
[default_session]
# greetdに内蔵のGreeterであるagreetyを使う場合
#command = "agreety --cmd /bin/sh"
# tuigreetを使う場合
command = "tuigreet --theme 'border=cyan;container=black;button=cyan' --cmd Hyprland"
#コマンドを実行するユーザー。このユーザーが持つ必要がある権限は、Greeterによって異なる。たとえば、グラフィカルなGreeterでは、ユーザーが `video` グループに属している必要がある。
user = "greeter"
その後、Hyprlandのセッションからログアウトし、greetd.service
サービスを有効化する。
問題が発生した場合は、Ctrl+Alt
+ファンクションキー(F2
など)を押して仮想コンソールを切り替えた後、シェルにログインし直せば良い。
systemctl enable --now greetd.service
ログイン画面が表示されるので F3
でセッションをHyprlandに切り替えるか F12
でコマンド Hyprland
を指定しユーザー名とパスワードを入力する。Hyprlandが立ち上がればOK!