Hyprland
関連記事
Hyprland は C++ で書かれた wlroots ベースのタイリング Wayland コンポジターです。Hyprland の特筆すべき点は、ダイナミックタイリング、タブ付きウィンドウ、クリーンで読みやすい C++ コードベース、ウィンドウアニメーションや角丸、透明ウィンドウでの Dual-Kawase Blur を提供するカスタムレンダラーなどです。一般的な使い方や設定方法は、 Hyprland Wiki に詳しく書かれています。
目次
インストール
次のいずれかをインストールします:
- hyprland - 最新のアップストリームリリース。
- hyprland-gitAUR - master ブランチへの最新のコミット。
- hyprland-nvidiaAUR - NVIDIA GPU パッチを含む最新のアップストリームリリース。
Hyprland は、wlroots-gitAUR に厳密に従う独自のバージョンの wlroots をバンドルしています。これにより、安定性が向上すると同時に、他の wlroots ベースのコンポジターとの依存関係の競合も回避されます。
設定
設定は 1 つの設定ファイル、hyprland.conf を通して行われます。パッケージマネージャで Hyprland をインストールした場合、おそらく /usr/share/hyprland/hyprland.conf にあります。ソースからインストールした場合は、Hyprland をクローンしたレポジトリにあります。hyprland.conf を ~/.config/hypr/hyprland.conf
にコピーしてください。
hyprland.conf
には、デバイス (モニタ、キーボード、マウス、トラックパッド) を設定するディレクティブと、アニメーション、装飾、レイアウトなどの設定が含まれています。キーバインディングやウィンドウのルールを設定したり、コマンドを実行したりできます (一度だけ、あるいはコンフィグが再読み込みされるたびに)
ファイルを更新するたびに設定が自動的にリロードされます。同じ効果を得るために hyprctl reload
を使うこともできます。いくつかの設定(特に入力設定)については、Hyprland セッションを再起動する必要があるかもしれません。
設定は hyprctl
を使用してその場で変更することもできますが、保存されません。
キーボード
キーマップ
デフォルトでは、Hyprland は US Qwerty
を使用します。次のように設定できます:
~/.config/hypr/hyprland.conf
# German Colemark layout input { ... kb_layout = de kb_variant = colemark ... }
利用可能なすべてのオプションについては、upstream's Wiki を参照してください。
典型的な遅延と速度
Xorg ユーザーはこの設定 サーバーレベルで定義 を使用することに慣れていますが、Wayland では各コンポジターがそれを独自に処理します。
~/.config/hypr/hyprland.conf
# Repeat rate and delay input { ... repeat_rate = 25 repeat_delay = 600 ... }
キーボードのバックライト
他の照明コントロールとは異なり、キーボードバックライトには XF86
キーシムがないため、従来のバインドを行う必要があります。
brightnessctl を インストール します、次のバインドを追加します。
~/.config/hypr/hyprland.conf
# Keyboard backlight bind = SUPER, F3, exec, brightnessctl -d *::kbd_backlight set +33% bind = SUPER, F2, exec, brightnessctl -d *::kbd_backlight set 33%-
変更が行われたときに 画面上の通知 を実行することもできます。
メディアキー
Hyprland でキーボードメディアコントロールを使用するには、XF86Audio
キーシムと、pavucontrol または pamixer や playerctl などの外部アプリケーションを利用することで可能です。
~/.config/hypr/hyprland.conf
# Volume and Media Control bind = , XF86AudioRaiseVolume, exec, pamixer -i 5 bind = , XF86AudioLowerVolume, exec, pamixer -d 5 bind = , XF86AudioMicMute, exec, pamixer --default-source -m bind = , XF86AudioMute, exec, pamixer -t bind = , XF86AudioPlay, exec, playerctl play-pause bind = , XF86AudioPause, exec, playerctl play-pause bind = , XF86AudioNext, exec, playerctl next bind = , XF86AudioPrev, exec, playerctl previous
変更が行われたときに 通知 を実行することもできます。
タッチパッドのジェスチャ
Wayland コンポジタである Hyprland はタッチパッドジェスチャを完全にサポートしていますが、デフォルトでは無効になっています。それらを有効にするには、次を編集します:
~/.config/hypr/hyprland.conf
# Enable touchpad gestures gestures { workspace_swipe = true workspace_swipe_fingers = 3 }
利用可能なすべてのオプションについては、upstream Wiki を参照してください。
ディスプレイの設定
画面共有
Screen-sharing を参照してください。
wlroots ベースのコンポジタとして、Hyprland は xdg-desktop-portal-wlr を利用して、xdg-desktop-portal 経由でさまざまなアプリケーションで画面キャプチャを有効にすることができます。
Hyprland は、領域共有、ウィンドウ共有、グラフィカルピッカーユーティリティなどの機能を追加した wlr ポータルのフォークである xdg-desktop-portal-hyprland も保守しています。ポータルの使用法については、Hyprland wiki で詳しく説明されています。
画面解像度の設定
Hyprland は画面解像度を自動的に検出しようとしますが、複数の画面が存在する場合やハイブリッドラップトップを使用している場合は、場合によっては失敗し、デフォルトでフェールセーフが設定されます。画面上のすべてが大きい場合は、デフォルトのモニターと解像度を設定する必要があります。
まず、hyprctl を使用してデフォルトのモニターを見つけます:
$ hyprctl monitors
Monitor eDP-1 (ID 0): 1920x1080@144.003006 at 0x0 description: Chimei Innolux Corporation 0x153C (eDP-1) ...
次に、モニターを設定に追加します:
~/.config/hypr/hyprland.conf
... # Monitor details monitor=eDP-1,1920x1080@144,0x0,1 ...
0x0
はマルチスクリーン設定に使用される位置オフセットで、最後の 1
は画面のスケーリング係数です。
画面のバックライト
brightnessctl を インストール して、次のバインドを追加します。
~/.config/hypr/hyprland.conf
# Screen brightness bind = , XF86MonBrightnessUp, exec, brightnessctl -s +5% bind = , XF86MonBrightnessDown, exec, brightnessctl -s 5%-
変更が行われたときに 通知 を実行することもできます。
使用方法
起動
現在、Hyprland は TTY から起動することを推奨しています。
$ Hyprland
ディスプレイマネージャ からの起動は公式にはサポートされていませんが、GDM、SDDM、その他からの起動に成功したとの報告があります。全ての Hyprland AUR パッケージは自動的にディスプレイマネージャーエントリーを生成します。ソースから手動でインストールする場合、ソースコードの example ディレクトリに Hyprland.desktop
ファイルのサンプルがあります、これを /usr/share/wayland-sessions/
にコピーしてディスプレイマネージャーのエントリーを提供することができます。
どちらの方法でも、いくつかの環境変数やサービスを追加したり削除したりすることで、同じ結果を得ることができます
自動ログイン
ディスプレイマネージャ または シェルから ユーザーは自動的にログインできます。
hyprctl と IPC
hyprctl は Hyprland にインストールされている、ディスプレイサーバーと通信するためのコマンドライン・ユーティリティです。サーバーにコマンドを送ったり (設定ファイルのコマンドと同じですが、構文が少し違います)、キーワードを設定したり、クエリ を送ったり、情報を要求したりすることができます。full documentation を参照してください。
Hyprland は 2 つの UNIX ソケット も公開しており、コードやコマンドライン・ユーティリティを使って Hyprland の情報を制御・取得することができます。これらのソケットはフォーカスの変更 (ウィンドウ、ワークスペース、モニター) やウィンドウ/ワークスペースの作成などのイベントをブロードキャストします。
hyprctl と IPC ソケットは、複雑なタスクのために Hyprland を制御するスクリプトの中で効果的に使うことができます。
exec と exec-once の比較
アプリケーションを起動するときは、正しいタイプのディスパッチャを使用することが重要です。exec
を誤って使用すると、アプリケーションが複数回起動されてシステムリソースが占有され、最悪の場合、競合状態が発生してシステムがクラッシュする可能性があります。
環境変数の設定
env キーワードを使用して、環境変数 を hyprland.conf
に直接設定できます。このキーワードの構文は、シェルで使用される env UNIX コマンドとは異なります。
違いについては、upstream Wiki で説明されています。
ヒントとテクニック
ファイルマネージャー
グラフィカルなファイル管理が必要な場合、Hyprland には Wayland 互換の外部アプリケーションが必要です。例として thunar を使用すると、次のようにキーバインドを割り当てるだけで済みます。
~/.config/hypr/hyprland.conf
... bind = SUPER, E, exec, thunar ...
アプリケーションランチャー
Hyprland では、アプリケーションを起動するために Wayland と互換性のある外部アプリケーションが必要です。例として wofi を使用すると、次のようにキーバインドを割り当てるだけで済みます。
~/.config/hypr/hyprland.conf
... bind = SUPER, F, exec, wofi ...
アイドル状態
Hyprland には、Wayland 互換の外部アイドル管理デーモンが必要です。最も一般的なセットアップは、swayidle と swaylock です。次のようにバインドを使用して画面を手動でロックできます。
~/.config/hypr/hyprland.conf
... bind = SUPER, L, exec, swaylock -f -c 000000 ...
自動画面ロックとサスペンド
次のスクリプトを作成します:
~/.config/hypr/scripts/sleep.sh
swayidle -w timeout 300 'swaylock -f -c 000000' \ timeout 600 'systemctl suspend' \ before-sleep 'swaylock -f -c 000000' &
次に、それを呼び出します:
~/.config/hypr/hyprland.conf
... exec-once = ~/.config/hypr/scripts/sleep.sh ...
タイムアウト期間後に DPMS を使用して画面をオフにする
Hyprland には DPMS リクエストを処理する組み込みディスパッチャがありますが、これを直接キーバインドとして使用することはお勧めできません。使用すると、画面を再びオンにできなくなり、再起動が必要になります。
上記のスクリプトを編集して次のように変更します:
~/.config/hypr/scripts/sleep.sh
swayidle -w timeout 300 'swaylock -f -c 000000' \ timeout 600 'hyprctl dispatch dpms off' \ resume 'hyprctl dispatch dpms on' \ timeout 900 'systemctl suspend' \ before-sleep 'swaylock -f -c 000000' &
アプリケーションの使用中に DPMS を停止する
上記の設定を行うと、ゲームをプレイしたり、ビデオを見たり、音楽を聴いたりするなど、タイムアウト期間を超えてシステムに触らない可能性のある作業を行っているときにモニターの電源がオフになります。
これを修正するには、idleinhibit
ルールを持つ Window Rules V2 関数に組み込まれた Hyprlands を使用するか、idlehack-gitAUR または sway-audio-idle-inhibit-gitAUR のいずれかをインストールします。前者は、Firefox または Chromium がオーディオ/ビデオを再生しているときは常に D-Bus を使用して Swayidle リクエストを防止します。後者は、アプリケーションがオーディオを再生しているときは常に Swayidle リクエストを阻止します。
ステータスバー
Hyprland でステータス バーを表示するには、Wayland 互換の外部アプリケーションが必要です。例として waybar を使用すると、次のように呼び出すだけで済みます:
~/.config/hypr/hyprland.conf
... exec-once = waybar -c ~/.config/waybar/waybar.conf ...
ワークスペースの概要
waybar には、Hyprland ワークスペースの切り替えをネイティブにサポートする、完全にカスタマイズ可能なモジュールが組み込まれています。
詳細については、waybar Wiki [1] を参照してください。
Polkit 認証
Polkit 認証には、外部 認証エージェント の使用が必要です。Hyprland では polkit-kde-agent の使用を推奨していますが、どれでも機能するはずです。
次のように呼び出します:
~/.config/hypr/hyprland.conf
... exec-once = /usr/lib/polkit-kde-authentication-agent-1 ...
デスクトップの壁紙
Hyprland では、デスクトップの壁紙を管理するために、Wayland と互換性のある外部アプリケーションが必要です。例として swwwAUR を使用すると、次のように呼び出すだけで済みます:
~/.config/hypr/hyprland.conf
... exec-once = swww init exec-once = swww img path/to/image ...
スクリプトを使用して X 分ごとに壁紙を変更する
次のスクリプトを作成し、実行可能ファイル であることを確認します:
~/.config/hypr/scripts/swww-random
#!/bin/bash # This script will randomly go through the files of a directory, setting it # up as the wallpaper at regular intervals # # NOTE: this script uses bash (not POSIX shell) for the RANDOM variable if [[ $# -lt 1 ]] || [[ ! -d $1 ]]; then echo "Usage: $0 <dir containing images>" exit 1 fi # Edit below to control the images transition export SWWW_TRANSITION_FPS=144 export SWWW_TRANSITION_STEP=2 export SWWW_TRANSITION_TYPE=random # This controls (in seconds) when to switch to the next image INTERVAL=300 while true; do find "$1" \ | while read -r img; do echo "$((RANDOM % 1000)):$img" done \ | sort -n | cut -d':' -f2- \ | while read -r img; do swww img "$img" sleep $INTERVAL done done
次に、背景画像を保存する新しいフォルダーを作成します。~/.config/hypr/backgrounds
のようなフォルダーを作成し、そこに必要な画像を追加します。
最後にスクリプトを呼び出します:
~/.config/hypr/hyprland.conf
... exec-once = swww init exec-once = ~/.config/hypr/scripts/swww-random ~/.config/hypr/background ...
画面上の通知
外部通知デーモンを使用すると、明るさや音量の変更などのアクションを画面上で通知できます。これは非常に複雑なトピックなので、完全に説明することはこのページの範囲を超えています。むしろ、このセクションでは mako に焦点を当てますので、インストール してください。
詳細な手順については デスクトップ通知 を、代替手段のリストについては デスクトップ通知#スタンドアロン を参照してください。
Mako
Mako は軽量の通知デーモンです。詳細については、mako(5) を参照してください。設定ファイルは ~/.config/mako/config
で、OSD に使用されるアイコンは ~/.config/mako/icons/
に保存されており、PNG 形式である必要があります。
このセクションの残りの部分では、スクリプトで使用されるすべてのイメージは この GitHub フォルダー から入手できます。
キーボードのバックライト通知
まず次のスクリプトを作成します:
~/.config/hypr/scripts/kbbacklight
#!/usr/bin/env bash iDIR="$HOME/.config/mako/icons" # Get brightness get_backlight() { LIGHT="$(cat /sys/class/leds/*::kbd_backlight/brightness)" echo "${LIGHT}" } # Get icons get_icon() { current="$(cat /sys/class/leds/*::kbd_backlight/brightness)" if [[ ("$current" -ge "0") && ("$current" -le "1") ]]; then icon="$iDIR/brightness-20.png" elif [[ ("$current" -ge "1") && ("$current" -le "2") ]]; then icon="$iDIR/brightness-60.png" elif [[ ("$current" -ge "2") && ("$current" -le "3") ]]; then icon="$iDIR/brightness-100.png" fi } # Notify notify_user() { notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$icon" "Keyboard Brightness : $(brightnessctl -d '*::kbd_backlight' g)" } # Increase brightness inc_backlight() { brightnessctl -d *::kbd_backlight set 33%+ && get_icon && notify_user } # Decrease brightness dec_backlight() { brightnessctl -d *::kbd_backlight set 33%- && get_icon && notify_user } # Zero brightness zero_backlight() { brightnessctl -d *::kbd_backlight s 0% } # Full brightness full_backlight() { brightnessctl -d *::kbd_backlight s 100% } # Execute accordingly if [[ "$1" == "--get" ]]; then brightnessctl -d '*::kbd_backlight' g elif [[ "$1" == "--inc" ]]; then inc_backlight elif [[ "$1" == "--dec" ]]; then dec_backlight elif [[ "$1" == "--zero" ]]; then zero_backlight elif [[ "$1" == "--full" ]]; then full_backlight else get_backlight fi
次に、以下を追加します (または既存のバインドを編集します):
~/.config/hypr/hyprland.conf
# Keyboard brightness bind = SUPER, F2, exec, ~/.config/hypr/scripts/kbbacklight --dec bind = SUPER, F3, exec, ~/.config/hypr/scripts/kbbacklight --inc
メディアキーの通知
まず次のスクリプトを作成します:
~/.config/hypr/scripts/volume
#!/usr/bin/env bash iDIR="$HOME/.config/mako/icons" # Get Volume get_volume() { volume=$(pamixer --get-volume) echo "$volume" } # Get icons get_icon() { current=$(get_volume) if [[ "$current" -eq "0" ]]; then echo "$iDIR/volume-mute.png" elif [[ ("$current" -ge "0") && ("$current" -le "30") ]]; then echo "$iDIR/volume-low.png" elif [[ ("$current" -ge "30") && ("$current" -le "60") ]]; then echo "$iDIR/volume-mid.png" elif [[ ("$current" -ge "60") && ("$current" -le "100") ]]; then echo "$iDIR/volume-high.png" fi } # Notify notify_user() { notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$(get_icon)" "Volume : $(get_volume) %" } # Increase Volume inc_volume() { pamixer -i 5 && notify_user } # Decrease Volume dec_volume() { pamixer -d 5 && notify_user } # Toggle Mute toggle_mute() { if [ "$(pamixer --get-mute)" == "false" ]; then pamixer -m && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$iDIR/volume-mute.png" "Volume Switched OFF" elif [ "$(pamixer --get-mute)" == "true" ]; then pamixer -u && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$(get_icon)" "Volume Switched ON" fi } # Toggle Mic toggle_mic() { if [ "$(pamixer --default-source --get-mute)" == "false" ]; then pamixer --default-source -m && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$iDIR/microphone-mute.png" "Microphone Switched OFF" elif [ "$(pamixer --default-source --get-mute)" == "true" ]; then pamixer -u --default-source u && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$iDIR/microphone.png" "Microphone Switched ON" fi } # Get icons get_mic_icon() { current=$(pamixer --default-source --get-volume) if [[ "$current" -eq "0" ]]; then echo "$iDIR/microphone.png" elif [[ ("$current" -ge "0") && ("$current" -le "30") ]]; then echo "$iDIR/microphone.png" elif [[ ("$current" -ge "30") && ("$current" -le "60") ]]; then echo "$iDIR/microphone.png" elif [[ ("$current" -ge "60") && ("$current" -le "100") ]]; then echo "$iDIR/microphone.png" fi } # Notify notify_mic_user() { notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$(get_mic_icon)" "Mic-Level : $(pamixer --default-source --get-volume) %" } # Increase MIC Volume inc_mic_volume() { pamixer --default-source -i 5 && notify_mic_user } # Decrease MIC Volume dec_mic_volume() { pamixer --default-source -d 5 && notify_mic_user } # Execute accordingly if [[ "$1" == "--get" ]]; then get_volume elif [[ "$1" == "--inc" ]]; then inc_volume elif [[ "$1" == "--dec" ]]; then dec_volume elif [[ "$1" == "--toggle" ]]; then toggle_mute elif [[ "$1" == "--toggle-mic" ]]; then toggle_mic elif [[ "$1" == "--get-icon" ]]; then get_icon elif [[ "$1" == "--get-mic-icon" ]]; then get_mic_icon elif [[ "$1" == "--mic-inc" ]]; then inc_mic_volume elif [[ "$1" == "--mic-dec" ]]; then dec_mic_volume else get_volume fi
次に、以下を追加します (または既存のバインドを編集します):
~/.config/hypr/hyprland.conf
# Volume bind = , XF86AudioRaiseVolume, exec, ~/.config/hypr/scripts/volume --inc bind = , XF86AudioLowerVolume, exec, ~/.config/hypr/scripts/volume --dec bind = , XF86AudioMicMute, exec, ~/.config/hypr/scripts/volume --toggle-mic bind = , XF86AudioMute, exec, ~/.config/hypr/scripts/volume --toggle
画面のバックライト通知
まず次のスクリプトを作成します:
~/.config/hypr/scripts/backlight
!/usr/bin/env bash iDIR="$HOME/.config/mako/icons" # Get brightness get_backlight() { LIGHT=$(printf "%.0f\n" $(brightnessctl g)) echo "${LIGHT}" } # Get icons get_icon() { current="$(get_backlight)" if [[ ("$current" -ge "0") && ("$current" -le "19200") ]]; then icon="$iDIR/brightness-20.png" elif [[ ("$current" -ge "19200") && ("$current" -le "38400") ]]; then icon="$iDIR/brightness-40.png" elif [[ ("$current" -ge "38400") && ("$current" -le "57600") ]]; then icon="$iDIR/brightness-60.png" elif [[ ("$current" -ge "57600") && ("$current" -le "76800") ]]; then icon="$iDIR/brightness-80.png" elif [[ ("$current" -ge "76800") && ("$current" -le "96000") ]]; then icon="$iDIR/brightness-100.png" fi } # Notify notify_user() { notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$icon" "Brightness : $(get_backlight)" } # Increase brightness inc_backlight() { brightnessctl s +5% && get_icon && notify_user } # Decrease brightness dec_backlight() { brightnessctl s 5%- && get_icon && notify_user } # Execute accordingly if [[ "$1" == "--get" ]]; then get_backlight elif [[ "$1" == "--inc" ]]; then inc_backlight elif [[ "$1" == "--dec" ]]; then dec_backlight else get_backlight fi
次に、以下を追加します (または既存のバインドを編集します):
~/.config/hypr/hyprland.conf
# Screen brightness bind = , XF86MonBrightnessUp, exec, ~/.config/hypr/scripts/backlight --inc bind = , XF86MonBrightnessDown, exec, ~/.config/hypr/scripts/backlight --dec
キーボード言語の通知
このスクリプトを実行するには、コマンドライン JSON プロセッサ gojqAUR が必要です。
まず次のスクリプトを作成します:
~/.config/hypr/scripts/lang
#!/usr/bin/env bash icon="$HOME/.config/mako/icons/language.png" # Get language get_lang() { lang=$(hyprctl devices -j | gojq -r '.keyboards[] | select(.name == "at-translated-set-2-keyboard") | .active_keymap' | cut -c 1-2 | tr 'A-Z' 'a-z') case $lang in en) lang="English language" ;; ru) lang="Русский язык" ;; uk) lang="Українська мова" ;; esac echo $lang } # Notify notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$icon" "$(get_lang)"
次に、以下を追加します (または既存のバインドを編集します):
~/.config/hypr/hyprland.conf
device:at-translated-set-2-keyboard { kb_layout = us,ru,ua kb_variant = lang kb_options = grp:win_space_toggle } # Language bind = SUPER, SPACE, exec, ~/.config/hypr/scripts/lang
電源制御
Hyprland では、電源制御のために Wayland 互換の外部アプリケーションが必要です。例として nwg-barAUR を使用すると、次のようにバインドするだけで済みます:
~/.config/hypr/hyprland.conf
... bind = SUPER, ESCAPE, exec, nwg-bar ...
クリップボード
Wayland クリップボードの動作により、コピー元のアプリケーションを閉じるとデータが削除されます。他のデスクトップ環境では、専用のクリップボードマネージャーを使用することでこの問題を回避できますが、Hyprland には互換性のある選択肢が複数あります。詳細については、upstream's Wiki を参照してください。
このセクションでは、テキストだけでなく画像のコピーもサポートしている cliphist について説明します。まず、次の行を追加します:
~/.config/hypr/hyprland.conf
... exec-once = wl-paste --type text --watch cliphist store exec-once = wl-paste --type image --watch cliphist store ...
次に、選択した アプリケーションランチャー の履歴を呼び出すバインドを作成します:
~/.config/hypr/hyprland.conf
... bind = SUPER, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy ...
Super+v
を押すと、wofi
ウィンドウが開き、クリップボード履歴リストが表示されます。
トラブルシューティング
xdg-desktop-portal-hyprland が大量の CPU を使用する
これは既知のバグ [2] であり、最新の Git ビルドでは解決されているはずです。これを回避するには、こちら Hyprland wiki で説明されているように、スクリプトを hyprland.conf
ファイルで呼び出すことで回避できます。