Niri
Niri は、スクロール可能なタイリング型 Wayland コンポジットです。Sway や Hyprland とは異なり、Niri はウィンドウを無限に広がる水平なデスクトップ上に配置し、左右にスクロールして操作します(より高度なレイアウトも可能です)。GNOME の PaperWM や KDE の Karousel に近い操作感を提供します。 インストール
Niri は niri パッケージでインストールできます。また、より快適な環境を構築するために、以下のパッケージのインストールが推奨されます:
- fuzzel: Niri のデフォルトアプリケーションランチャー
- mako: 通知サーバー
- waybar: Wayland 用ステータスバー
- xdg-desktop-portal-gtk, xdg-desktop-portal-gnome: スクリーン共有を可能にするため
- alacritty: Niri のデフォルトターミナル
- swaybg: 壁紙の設定
- swayidle, swaylock: アイドル時の画面ロック
- xwayland-satellite: X11 アプリケーションの実行用
- udiskie: USB ドライブの管理と自動マウント
起動
Niri には デスクトップエントリ が含まれており、ディスプレイマネージャ から選択可能です。これを選択すると niri-session が実行され、systemd への 環境変数 のエクスポートが適切に行われます。
また、getty (コンソール) から直接起動する場合は、以下のコマンドを実行します:
niri-session -l
これは 自動ログイン と組み合わせることで、シームレスな ブート 体験を実現できます。
設定
Niri は ~/.config/niri/config.kdl から設定を読み込みます。ファイル形式は KDL で、セクションごとに分かれています。初回実行時に生成されるデフォルト設定ファイルには、各オプションの説明がコメントとして記載されています。ただし、アップデートで追加された新機能については記載されないため、Niri 公式ドキュメント を参照してください。
設定ファイルを保存すると、Niri は自動的に設定を適用します。設定内容が不正であっても Niri はクラッシュせず、最後に動作していた状態が維持され、エラーがユーザーに通知されます。セッション外で設定を検証するには niri validate を使用します。
キーマップ
キーマップを設定するには、input/keyboard/xkb セクションを編集します。
例えば、"US Int Alt Gr" レイアウトを使用し、CapsLock を Ctrl として機能させる場合は以下のようになります:
~/.config/niri/config.kdl
input {
keyboard {
xkb {
layout "us"
variant "altgr-intl"
options "ctrl:nocaps"
}
}
...
}
出力
まず niri msg outputs を実行して、Niri が認識している出力を確認します。その後、各モニターに設定を適用できます。例として、HDMI モニターを 2560x1440 60Hz、スケーリング 1.2 に設定し、ノート PC の内蔵モニターをオフにする設定は以下の通りです:
~/.config/niri/config.kdl
output "HDMI-A-1" {
mode "2560x1440@60.000"
scale 1.2
}
output "eDP-1" {
off
}
キーバインド
binds セクションでは、Niri を操作するキーの組み合わせを設定します。初回起動時に生成される設定には多くのバインドが含まれており、これらはすべて変更可能です。
注意点として、Niri はデフォルトのキーバインドを自動的にロードしません。設定ファイルに記述がないバインドは機能しません。そのため、不要なバインドを削除する際は、削除ではなくコメントアウトに留めることが推奨されます。
バインドは、修飾キーに + を繋げ、アクションを括弧内に記述します。spawn アクションはプログラムを起動します。以下の例では、Mod+T で alacritty を、Mod+D で fuzzel を起動します。Mod は通常、単独実行時は Super キー、他のコンポジット内での実行時は Alt キーになります。
~/.config/niri/config.kdl
binds {
...
Mod+T { spawn "alacritty"; }
Mod+D { spawn "fuzzel"; }
...
}
spawn に渡す引数にスペースが含まれる場合は、個別に引用符で囲む必要があります:
~/.config/niri/config.kdl
binds {
...
Mod+Ctrl+semicolon {
spawn "swaylock" "-c" "121212" "-e" "-f" "-F"
}
...
}
WASD 風のナビゲーション
ゲームのような WASD キーによるウィンドウ移動を設定することも可能です。
~/.config/niri/config.kdl
binds {
...
Mod+A { focus-column-left; }
Mod+S { focus-window-or-workspace-down; }
Mod+W { focus-window-or-workspace-up; }
Mod+D { focus-column-right; }
...
}
※この設定を導入する場合、既存の他のバインドとの競合を避けるために調整が必要になる場合があります。
自動起動
Niri の起動時に特定のプログラムを同時に開始できます。 前述した mako、waybar、swayidle/swaylock などの設定例は以下の通りです:
~/.config/niri/config.kdl
spawn-at-startup "mako" spawn-at-startup "waybar" spawn-at-startup "swayidle" "-w" "timeout" "601" "niri msg action power-off-monitors" "timeout" "600" "swaylock -f" "before-sleep" "swaylock -f"
これらのプロセスは Niri セッションに紐付けられており、Niri が終了または中断されると終了します。プロセスをバックグラウンドで永続させたい場合は、引数に "&" を追加してください。
XWayland
Niri は X11 アプリケーションを実行するための XWayland を標準ではサポートしていません。その代わり、外部ツールの使用を推奨しています。オプションの依存関係にある xwayland-satellite をインストールすれば、特別な設定なしで使用可能です。
マルチ GPU 設定
内蔵グラフィックスと専用 GPU (dGPU) の両方を搭載した環境では、Niri がデフォルトで dGPU を使用してしまい、バッテリーを浪費する場合があります。
Niri が使用する GPU を指定するには、まずシステムで利用可能なレンダリングデバイスを確認します:
$ ls -l /dev/dri/by-path/*-render
lrwxrwxrwx 1 root root 13 Jan 10 13:02 /dev/dri/by-path/pci-0000:c1:00.0-render -> ../renderD129 lrwxrwxrwx 1 root root 13 Jan 10 13:02 /dev/dri/by-path/pci-0000:c2:00.0-render -> ../renderD128
次に、PCI アドレスを使って各デバイスがどのカードかを確認します:
$ lspci -s c1:00.0
c1:00.0 VGA compatible controller: NVIDIA Corporation GB206M [GeForce RTX 5070 Max-Q / Mobile] (rev a1)
使用したいデバイスを特定したら、Niri の設定ファイルに追記します:
~/.config/niri/config.kdl
debug {
render-drm-device "/dev/dri/renderD128"
}
再起動後、以下のコマンドで GPU が正しく低電力状態 (D3cold など) になっているか確認できます:
$ cat /sys/class/drm/card*/device/power_state
D3cold D0