Zenn
Open14

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

ピン留めされたアイテム
sheeplasheepla

これは何❓

かれこれ数年くらいArch Linuxをメイン環境として使い続けています。しばらくi3wmを使っていましたがWaylandネイティブなコンポジタであるHyprlandに移行しました。
ここではArch LinuxとHyprlandを使った環境構築の手順や便利ツール、Linuxデスクトップに関連する知見をまとめて随時更新していきます。

Linuxデスクトップの良さとは何か🐧

まず、Linuxデスクトップの特徴として高いカスタマイズ性が挙げられます。WindowsユーザーやmacOSユーザーが壁紙を変えるような感覚でアプリケーションの配色テーマを変更し、システムフォントを変更し、キーバインドを設定し、自分好みの環境を作り込むことができます。
しかしながら、こういったカスタマイズ(いわゆる 盆栽)に時間を掛けるのは骨が折れる作業かもしれません。
それでも、「手に馴染む」「かゆいところに手が届く」環境が手に入ったときの喜びは格別なものです。(むしろ、Linuxをデスクトップとして使い始めてから かゆい と感じる部分に気づけたというか、自分が欲しいUIはこうだ!という感覚が分かってきた感覚があります。)
特に、キーボードを使った操作を特定のコマンドに柔軟に割り当てられるためマウスに手を伸ばさずに高速かつ快適に操作できるところが気に入っています。

あと見た目がハッカーっぽくてカッコいいところですね。ここが一番大事です。

それでは、よいLinux生活を!🐑♥🐧

sheeplasheepla

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

paruの導入

AURのページにあるPKGBUILDをダウンロードし、makepkg -sicを実行するとインストールできる。
以降、パッケージのインストールは paru を使う。

paru - AUR archlinux.org

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を参照。

makepkg - Arch Wiki

sheeplasheepla

Hyprlandの基本設定

設定ファイルの編集

Hyprlandの設定ファイルは ~/.config/hypr/hyprland.conf にある。
設定に使われるキーワードの一覧は公式ドキュメントのここにある。
設定ファイルを編集したら、hyprctl reload を実行すると設定をリロードできる。

https://wiki.hyprland.org/Configuring/Keywords/

キーバインド

メインのモディファイアキーは規定では 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

https://wiki.hyprland.org/Configuring/Binds/

hyprland.confで使われるキーシンボルの一覧は、xdbcommonの xkbcommon-keysyms.hというヘッダーファイルに書いてある。
XKB_KEY_の後ろにある名前がシンボル名になる。
https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h#L211-L3354

sheeplasheepla

アプリケーションランチャー(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
sheeplasheepla

日本語入力(fcitx5 + mozc)

Linuxで日本語入力を行うには、インプットメソッドエディタ(IME)とインプットメソッドフレームワーク(IMF)それぞれインストールされていて、なおかつ利用するアプリケーションがIMFによりサポートされている必要がある。

  • IME: ラテン文字を使って非ラテン文字を入力するためのアプリケーション。代表的なものにGoogle日本語入力から派生したMozc、文節を明示的に指定して変換できるSKK、そしてKKCなどがある。
  • IMF: 複数のIMEを簡単に切り替えられるようにするためのアプリケーション。代表的なものにFcitx5、Fcitx、IBus、Uimなどがある。

https://wiki.archlinux.jp/index.php/インプットメソッド

ここでは、IMFとしてFcitx5を、IMEとしてMozcをインストールする。

paru -S fcitx-im fcitx5-mozc

fcitx5-imはグループパッケージになっており、GTK/Qtをサポートするためのモジュール(fcitx5-gtk/fcitx5-qt)とGUIの設定ツール(fcitx5-configtool)が同梱されている。個別にインストールすることもできるが、まとめて入れておくのが無難と思われる。

https://github.com/fcitx/fcitx5

次に fcitx5-configtool を起動し、インプットメソッドの一覧から mozc エントリを追加してKeyboardエントリの下になるように配置する。

fcitx5をHyprlandの起動時に自動起動するよう、hyprland.conf に次の行を追加する。

exec-once=fcitx5-remote -r # 設定をリロードする
exec-once=fcitx5 -d --replace # fcitx5をバックグラウンドで起動し、既に起動しているインスタンスがあれば置き換える

FirefoxなどのGUIアプリケーションを起動して Ctrl+Space で日本語入力に切り替えられればOK!

sheeplasheepla

キーボード入力やタッチパッド入力の調整

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.
}
sheeplasheepla

GTK/Qtやカーソルのテーマ

Linuxでは、GUIの開発ツールキットとしてGTKやQtがよく使われる。デスクトップの見た目に統一感を出すには、GTKとQtそれぞれのテーマ選定し個別に設定する必要がある。

テーマの選定

各種テーマはPlingのサイトから見つけることができる。

https://www.pling.com/

次のテーマがカッコよくておすすめ。

GTK

Xorg環境でのGTKテーマ設定方法

i3などのXorg環境では、GTKの設定ファイル ~/.config/gtk-3.0/settings.ini~/.gtkrc-2.0などを変更するには、LXDEにも含まれる
lxappearance を使う方法があった。

https://github.com/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にあったため紹介する。

GTK-3-settings-on-Wayland - 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
sheeplasheepla

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
sheeplasheepla

ファイルマネージャ(Thunar)

ファイル操作は専らシェルでやるかkamiyaa/joshutogokechan/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の左側ペインにデバイスが表示されるようになる。


https://docs.xfce.org/xfce/thunar/using-removable-media

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から端末のファイルシステムにアクセスすることができる。

ファイルマネージャの機能
Thunar - Arch Wiki

sheeplasheepla

モニターの解像度・位置・回転

Xorg環境では XRandR というツールが使われるが、Wayland環境でモニターの解像度・位置・回転方向などの変更するには wlr-randrというCLIツールを使う。
また、wdisplays というツールを使うとGUIで設定を管理できる。

paru -S wlr-randr  wdisplays

sheeplasheepla

ステータスバー(waybar)

Wayland環境では、シンプルなステータスバーである waybar を使うことができる。

https://github.com/Alexays/Waybar/wiki/Configuration

waybar パッケージをインストールして、Hyprlandに下記の内容を追記すると自動起動できる。

paru -S waybar
exec-once = waybar -c ~/.config/waybar/waybar.conf

カスタマイズの例はGitHubにあるWikiのexamplesの項で見つけることができる。

https://github.com/Alexays/Waybar/wiki/Examples

sheeplasheepla

Bluetoothを使う(BlueZ)

Linuxにおいて、Bluetoothプロトコルスタックの実装にはBlueZが標準的に使われる。

https://github.com/bluez/bluez

BlueZのインストールと有効化

bluezbluez-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>

$

https://wiki.archlinux.jp/index.php/Bluetooth

TUIで操作する(bluetui)

linuxmint/blueberrybluemanなどのGUIフロントエンドがあるが、軽量なTUIフロントエンドである bluetui を使うこともできる。
TUIであればマウスに手を伸ばすことなくデバイスの一覧を見ながら簡単に接続できて便利。

paru -S bluetui

sheeplasheepla

ラップトップのモニターの明るさを調整する(brightnessctl)

ラップトップに備え付けのモニターの明るさを調整するには、brightnessctlを使う。

https://github.com/Hummer12007/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%
sheeplasheepla

対話的なログインUIによるセッション管理(greetd + tuigreet)

Hyprlandやswayなどのセッションに対話的にログインできるようにするための環境を整える。
そのためには、ログインセッションを管理する「ログインマネージャ」とそのUIを提供する「Greeter」をインストールする必要がある。

ここでは、ログインマネージャのgreetdとコンソールベース(TUI)のGreeterであるtuigreetを使ってみる。もちろん、グラフィカルなGreeterであるgtkgreetqtgreetなどを使っても良い。

https://wiki.archlinux.jp/index.php/Greetd

まず、greetdgreetd-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!

ログインするとコメントできます