Hyprland 用コンポーネント
Hyprland はウィンドウ管理のみを担当し、残りのコンポーネントは標準的な組み合わせを採用しています。テーマ設定はすべて matugen によって生成されます。各コンポーネントの役割を以下に簡単に説明します。
- hyprlock (ロック画面): Hyprland 公式のロック画面です。GPU レンダリングに対応し、ぼかし効果のある壁紙、時計、入力フィールドを表示できます。設定スタイルは Hyprland と統一されています。ここでは各モニターごとの現在の壁紙を表示させています(後述)。
- hyprpaper / waypaper:
hyprpaperは実際の壁紙設定バックエンドです(常駐プロセス、VRAM へのプリロード、モニターごとの指定が可能)。waypaperはhyprpaper(および他のバックエンド)用のグラフィカルな選択ツールです。壁紙を変更すると matugen がトリガーされ、配色が再計算されます。 - walker / fuzzel (ランチャー):
fuzzelは軽量で純粋な dmenu スタイルです。クリップボード履歴の選択メニュー(hyprland.lua のSUPER+Vキーバインド参照)や、各種--dmenuパイプラインの実行に使用しています。walkerはよりフル機能なランチャーで、アプリケーションの起動、計算、絵文字などのプラグインモジュールをサポートしています。 - wlogout (電源メニュー): ロック、ログアウト、再起動、シャットダウンのための大きなボタンをグリッドレイアウトで配置します。スタイルは matugen のカラーパレットに従います。
- fcitx5 (入力メソッド): 日本語と英語の切替を行います。スキンは matugen によって生成され、エディタ内の im-select と連携しています。これにより、デスクトップから nvim まで、Normal モードでは自動的に英語入力に戻ります。
これらのコンポーネントは深く掘り下げる必要がなく、matugen に接続してインストールするだけで完了します。実際に非自明な設定を行い、トラブルシューティングを経て採用したのは、hypridle を2つのインスタンスに分割するという点です。
当初はロック画面とディスプレイの消灯(DPMS)を同じインスタンスで管理していましたが、Chrome や Bilibili を使用中に画面がロックされても、ディスプレイが消灯しないという問題が発生しました。その原因は、これらのページが Video Wake Lock 用の D-Bus 唤醒ロックを継続的に送信し、アイドルタイマーを頻繁に中断していたためです。これは本来「動画再生中は画面を消灯しない」という意図のものですが、結果としてロック後の消灯処理も妨げてしまいました。
解決策として処理を分離しました。メインインスタンスはロック画面の管理のみを担当し、消灯(DPMS)は2つ目のインスタンスで独立して実行し、唤醒ロックを無視するようにしました。
# メインインスタンス: ロック管理のみ
general { lock_cmd = ~/.config/hypr/hyprlock/lock.sh
before_sleep_cmd = loginctl lock-session }
listener { timeout = 1800; on-timeout = loginctl lock-session }
# 消灯処理は hypridle-dpms.conf で別のインスタンスとして定義し、独立して動作させる
補足ですが、ロック処理には直接 hyprlock を呼び出すのではなく loginctl lock-session を経由しています。これにより、hypridle の lock_cmd(lock.sh スクリプト)が処理を制御でき、ロック画面が表示される前に各モニターの現在の壁紙を同期させることができます。その結果、ロック画面の背景とデスクトップの背景を一致させることができます。入力メソッドは fcitx5 を使用しており、デスクトップレイヤーとエディタ内の im-select を連携させることで、デスクトップから nvim にかけての日本語/英語の切替をシームレスに実現しています。