Hyprland - Arch Linux 中文维基

跳至內容

# Hyprland

出自 Arch Linux 中文维基

相關文章

- 窗口管理器
- Wayland

翻譯狀態：

- 本文（或部分內容）譯自 Hyprland，最近一次同步於 2025-10-05，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

Hyprland 是一個獨立的且使用 C++ 編寫的平鋪式 Wayland 合成器。 Hyprland 值得注意的功能包括動態平鋪、選項卡窗口、整潔可讀的 C++ 代碼庫，和提供窗口動畫的自定義渲染器，窗口圓角，以及透明窗口上的 Dual-Kawase Blur。一般用法和配置在 Hyprland Wiki 中有詳細文檔介紹。

當你遇到輸入法問題時，請查看故障排除。

## 安裝

### 通過包管理器安裝

安裝 hyprland包

### 通過CMake編譯安裝

首先將 Git 倉庫克隆到本地：

    git clone --recursive https://github.com/hyprwm/Hyprland

其次切換到 Git 倉庫目錄：

    cd Hyprland

最後編譯安裝：

    make all && sudo make install

自 #6608 起，Hyprland 使用 aquamarine包 作為自己的渲染後端庫。在此之前，它捆綁了它自己的 wlroots 版本，與wlroot-gitAUR類似。

注意：

- NVIDIA GPU 用戶也應該在嘗試啟動Hyprland之前確保遵守上游的 NVIDIA 頁面 Hyprland Wiki。如果不這麼做，可能會導致很多錯誤，包括可能無法登錄、窗口閃爍和 CPU 使用率較高。
- Hyprland 不支持使用 NVIDIA GPU，很多用戶成功了，但如果一些東西出現了錯誤，那你只能靠你自己來修復了。
- 由於缺乏`seatd.service`會導致Hyprland無法啟動，請確保安裝了 Polkit 軟體，或者開啟並啟用 `seatd.service`。
- 對於 Vmware/VirtualBox 用戶，可能需要開啟 3D 加速才可以正常運行 Hyprland

### 多顯示器管理

nwg-displays包 是管理多顯示器的 GUI 軟體，支持 Hyprland. 它是nwg-shell的一部分，但並不依賴 nwg-shell，參閱 nwg-displays github 以獲得更多信息。

## 配置

注意：在Hyprland Wiki變量中詳細解釋了列出的大部分選項（以及更多選項）

配置是通過一個配置文件，`hyprland.conf` 完成的，儘管它支持將配置拆分為多個文件並將它們包含到`hyprland.conf`中。默認的配置文件在 `/usr/share/hypr/hyprland.conf` ，在第一次登錄後，為`~/.config/hypr/hyprland.conf`。

`hyprland.conf` 包括配置設備（鍵盤、滑鼠、觸控板、顯示器）的指令，以及動畫、裝飾、布局等設置。你可以設置按鍵綁定、窗口規則以及在重新加載配置時執行命令（一次或者每次）

每次更新文件時，配置都會自動重新加載。你可以使用 `hyprctl reload` 來重載以獲得相同的效果。對於某些設置（尤其是輸入設置），你可能需要重啟你的 Hyprland 會話。

設置也可以使用 hyprctl 動態更改設置，但是這些設置不會保存

### 移除最上方的警告

請在`~/.config/hypr/hyprland.conf`中移除或使用`#`注釋以下內容:

    ~/.config/hypr/hyprland.conf

    autogenerated = 1

### 鍵盤

#### 按鍵映射

Hyprland默認使用 `US Qwerty` 鍵盤布局，你可以使用以下配置來配置它

    ~/.config/hypr/hyprland.conf

    # German Colemark layout
    input {
        ...
        kb_layout = de
        kb_variant = colemark
        ...
    }

查看 Hyprland Wiki 以查看所有可用選項

注意：Hyprland 將會覆蓋 locale 定義，如果你不使用 `US` 布局的鍵盤則有必要更改按鍵映射
提示：關於啟動時自動打開 `NumLock` 鍵，參見啟動時打開數字鎖定鍵#Hyprland。

#### 鍵入延遲和速率

雖然Xorg用戶將習慣於在伺服器級別定義此設置，在Wayland上，每個合成器都會自行處理：

    ~/.config/hypr/hyprland.conf

    # Repeat rate and delay
    input {
        ...
        repeat_rate = 25
        repeat_delay = 600
        ...
    }

#### 鍵盤背光

參見背光一文。

你可以在 Hyprland 中使用鍵盤亮度控制。

在 Hyprland 中使用鍵盤背光控制是有可能的。安裝 brightnessctl包 然後添加一個與其有關的按鍵綁定（替換 `keyboard_brightness_*`with `SUPER,FX` or `XF86KbdBrightness` 取決於你的硬體是如何發出鍵盤背光的）

    ~/.config/hypr/hyprland.conf

    # Keyboard backlight
    bind = , xf86KbdBrightnessUp, exec, brightnessctl -d *::kbd_backlight set +33%
    bind = , xf86KbdBrightnessDown, exec, brightnessctl -d *::kbd_backlight set 33%-

此外，還可以設置更改時彈出屏幕通知。

#### 媒體按鍵

在Hyprland上有可能通過使用 `XF86Audio` 鍵盤按鍵和一個外部像 pavucontrol包 或者 pamixer包 和 playerctl 的應用程式使用鍵盤媒體按鍵控制媒體（翻譯可能不準確，請參照下面英語）

通過 `XF86Audio` 按鍵在Hyprland中使用鍵盤的媒體控制鍵和啟動一個像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

當有更改時，也可以觸發屏幕通知

### 滑鼠

參見 Hyprland Wiki。

為了應用滑鼠設備的配置選項，請像這樣添加一個新類別：

    ~/.config/hypr/hyprland.conf

    device {
        name = 滑鼠設備名稱
        # 針對滑鼠的選項 ...
    }

通過檢查 `hyprctl devices` 的輸出，可以輕鬆獲得設備名稱。

#### 滑鼠加速度/靈敏度

您可以使用下面所示配置控制滑鼠加速度/靈敏度：

    ~/.config/hypr/hyprland.conf

    device {
        name = 滑鼠設備名稱
        sensitivity = -0.5
    }

將 -0.5 替換為您希望的滑鼠加速度/靈敏度。

### 觸摸板手勢

作為 Wayland 合成器，Hyprland 完全支持觸摸板手勢即使它默認是禁用的。使用以下更改來啟用它

    ~/.config/hypr/hyprland.conf

    # Enable touchpad gestures
    gesture = 3, horizontal, workspace

查看上游Wiki 來獲取所有可用的選項

### 顯示設置

#### 屏幕共享

查看屏幕共享

作為一個wlroots合成器，Hyprland可以利用 xdg-desktop-portal-wlr包 通過 XDG 桌面門戶在一系列應用程式中啟用屏幕錄製。

Hyprland 還維護 xdg-desktop-portal-hyprland包，一個支持屏幕共享（包括選區功能）和窗口共享，全局快捷鍵，並且有一個圖形選擇其的工具。關於使用該工具在 Hyprland wiki 中有進一步的文檔介紹。

值得注意的是，xdg-desktop-portal-hyprland包 不包括一個文件選擇器，用戶可以安裝 xdg-desktop-portal-gtk包。

#### 設置屏幕解析度

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
    monitorv2 {
        output = eDP-1
        mode = 1920x1080@144
        position = 0x0
        scale = 1
    }
    ...

此處的`@144`指的是屏幕的刷新率，`1920x1080`指的是解析度。請替換為你的屏幕所支持的刷新率和解析度

使用如下來查看屏幕所支持的刷新率:

    $ hyprctl monitors

    Monitor eDP-1 (ID 0):
            1920x1080@144.003006 at 0x0
            description: Chimei Innolux Corporation 0x153C (eDP-1)
            ...
    	availableModes: 1920x1080@60.00Hz ...

`0x0`是一個用於多屏幕設置和最終設置的位置偏移，`1`是屏幕縮放倍數

#### 亮度

安裝 brightnessctl包 並添加以下內容：

    ~/.config/hypr/hyprland.conf

    # Screen brightness
    bind = , XF86MonBrightnessUp, exec, brightnessctl s +5%
    bind = , XF86MonBrightnessDown, exec, brightnessctl s 5%-

此外，還可以設置更改時彈出通知。

## 使用

請注意：確保您已正確安裝與您主機相匹配的顯卡驅動或 openvmtools 並啟用3D加速

### 啟動Hyprland

#### 通用 Wayland 會話管理器（uwsm）

通用Wayland會話管理器通過systemd 單元文件b合成器和與其對應的配置好的軟體和守護進程來使你通過systemctl控制它們。

當你選擇 hyprland (uwsm-managed)時，Display manager 會啟動一個帶有uwsm的Hyprland。

注意：其實你選擇Hyprland也是可以的，只不過pid不同，如果你想為hyprland(uwsm-managed)設置變量，請在uwsm配置文件夾中創建env-Hyprland文件

在命令行解釋器#登錄 Shell使用以下腳本，你也可以在 getty 通過 uwsm 啟動Hyprland：

    if uwsm check may-start && uwsm select; then
        exec systemd-cat -t uwsm_start uwsm start default
    fi

注意：

- `uwsm check may-start`檢查是否可以啟動 wayland 會話，尤其是在登錄 shell運行的情況下。不過，仍應避免在 `.bashrc` 或其他非登錄 shell profile 中使用。
- Hyprland 不再推薦啟動一個帶有uswm的會話，因為這被視為實驗性的並且是為明白其含義的高級用戶和怪人使用的。

警告： 如果您選擇通過「uwsm」啟動 Hyprland，則應相應調整配置。特別是

- 必須避免使用 `exit` 調度器或直接終止 Hyprland 進程，因為這會干擾正常的關機進程。例如，使用 `uwsm stop` 或 `loginctl terminate-user 「」` 來終止 Hyprland 並退出用戶會話：

    ~/.config/hypr/hyprland.conf

    bind = $mainMod, M, exec, uwsm stop

- 不要在 `hyprland.conf` 中配置環境變量，而是使用 「uwsm 」文件 `~/.config/uwsm/env` 來配置 uwsm 管理的所有圖形會話（GTK、Qt、xcursor、...）的通用變量。...），以及 `~/.config/uwsm/env-hyprland` 用於 Hyprland 專屬環境變量（例如 `HYPR*` 和 `AQ_*` 變量）。這些文件的格式為 `export KEY=VALUE`，每行不加注釋。如果使用多個 GPU，強烈建議將環境變量 `AQ_DRM_DEVICES` 置於 `env-hyprland` 內，以避免與其他合成器發生衝突。

請閱讀Hyprland Wiki 中的相關頁面以了解有關使用 uwsm 配置的更多信息。

#### 終端

使用如下指令在 Getty 中啟動 Hyprland：

    $ start-hyprland

#### 顯示管理器

雖然從顯示管理器中啟動不是官方支持的，但是用戶們報告成功在 GDM 、 SDDM 和其他的顯示管理器中啟動。hyprland包 中包含兩個桌面項，並且所有 Hyprland AUR 包將會自動生成。

兩種方法都提供相同的結果，加上或減去一些環境變量和服務。

#### 自動登錄

用戶可以通過一個顯示管理器或著在登錄時採用 Xinit#Autostart X at login 中描述的方法進行自動登錄

### hyprctl 和 IPC

hyprctl 是一個命令行實用程序，隨Hyprland一起安裝，用於與顯示伺服器通信。它允許你向伺服器發送命令（相當於配置文件中的命令，但語法略有不同）、設置關鍵詞、發送詢問和請求信息。請查看完整文檔

Hyprland 還公開了 2 UNIX 套接字，以便通過代碼或命令行實用程序控制和獲取有關 Hyprland 的信息。這些套接字會廣播焦點變化（窗口、工作區、監視器）、窗口/工作區創建等事件。

hyprctl 和 IPC 接口都在腳本中有效使用，對於複雜任務控制 Hyprland。

### Autostart

在啟動應用程式時，選擇正確類型的調度器是非常重要的。不正確地使用`exec`可以使應用程式啟動多次而占用系統資源然後造成糟糕的狀況。造成競爭系統資源的情況然後使你的系統崩潰。

注意：在#配置中提到，Hyprland 會自動解析 `hyprland.conf` 文件每次的更改：不要對每個軟體都使用 `exec`。

在大多數情況下，你應該使用 `exec-once` 在啟動時來運行應用程式和守護程序，使用這個命令啟動的軟體在 Hyprland 重新加載時將不會再次啟動。僅當你絕對確定希望每次重新加載時再次運行該命令時，才使用 `exec`。
提示：如果你通過通用Wayland會話管理器(uwsm)啟動Hyprland，並且你想在開機時運行的軟體提供一個systemd單元，那麼你可以啟用它來在Hyprland啟動後自動啟動它。另外，你也可以將那個軟體作為參數傳遞到`uwsm app`中來使它被uwsm管理。例如：

    ~/.config/hypr/hyprland.conf

    exec-once = uwsm app -- mycommand --arg1 --arg2

    bind = SUPER, E, exec, uwsm app -- pcmanfm-qt.desktop

### 設置環境變量

通過env關鍵詞在`hyprland.conf`中設置環境變量，它的語法不同於在Unix shell中使用env命令

這些差異在上游Wiki中被解釋

## Hypr 生態

警告：以下所提及的部分軟體仍在開發，有 bug 都是在意料之中的。因此，完整的說明和示例會被略去，直到它足夠穩定以成為穩定版。關於使用說明，參見上游 Wiki。

Hyprland 開發團隊正在構建一個專門用於 Hyprland 的軟體生態，這些工具將包括調度器，允許使用 hyprctl 而不是依賴腳本來控制它們。

目前，軟體生態包括以下軟體：

### Hyprpaper

Hyprpaper 是一個壁紙工具，你可以安裝 hyprpaper包 來使用它。

### Hyprpicker

Hyprpicker 是一個用於在你的桌面中抓取一個顏色的工具，你可以安裝 hyprpicker包 來使用它。

### Hypridle

Hypridle 是一個idle管理守護程序，你可以安裝 hypridle包 來使用它。

### Hyprlock

Hyprlock 是一個屏幕鎖定管理器，你可以安裝 hyprlock包 來使用它。

### Hyprcursor

Hyprcursor 是一個處理屏幕光標的新格式，它在傳統的方式上提升了很多，你可以安裝 hyprcursor包 來使用它。

#### Hyprcursor 主題

提示：如果你安裝了 hyprcursor 並且沒有安裝一個主題，它將會使用你之前的光標設置

光標主題可以使用 AUR 安裝，以下是例子：

- sweet-cursors-hyprcursor-gitAUR

- nordzy-hyprcursorsAUR

- xcursor-pro-hyprcursorAUR

- hyprcursor-dracula-kde-gitAUR

將現有的光標主題移植到 Hyprcursor，你可以參照上游 GitHub 倉庫。

關於設置光標樣式，你也可以查閱光標主題來設置。

### XDG-Desktop-Portal-Hyprland

Hyprland 自己的實現的XDG Desktop Portal，與其他基於wlroots的合成器兼容，但是在使用Hyprland時額外提供一些功能。可安裝xdg-desktop-portal-hyprland包

### Hyprpolkitagent

Hyprpolkitagent 是一個 polkit 身份驗證守護進程。圖形用戶界面應用程式需要使用它來請求提升權限。安裝 hyprpolkitagent包 來使用它。

參見 Hyprland Wiki。

### Hyprsunset

Hyprsunset 是提供藍光濾鏡的實用工具，通過 hyprsunset包 安裝。

### Hyprsysteminfo

Hyprsysteminfo 是一個獲取系統信息的軟體，與neofetchAUR和fastfetch包類似。你可以安裝hyprsysteminfoAUR

## 技巧提示

提示：

- 對於以下所有部分，通常有不止一種方法可以達到類似的效果，這裡提供的只是一些基本示例。

- 有關替代品的完整列表，請參見應用程式列表，Hyprland 的特定列表可在上游 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 --show drun
    ...

也可以使用 rofi-wayland包：

    ~/.config/hypr/hyprland.conf

    ...
    bind = SUPER, F, exec, rofi -show drun
    ...

### Idle

Hyprland 需要一個外部的 Wayland 兼容的 idle 管理守護進程。最普遍安裝的是 hypridle包 和 hyprlock包。你可以使用如下的快捷鍵來手動鎖定屏幕：

    ~/.config/hypr/hyprland.conf

    ...
    bind = SUPER, L, exec, hyprlock
    ...

#### 自動鎖定屏幕和掛起

創建下面的文件：

    ~/.config/hypr/hypridle.conf

    general {
        lock_cmd = pidof hyprlock || hyprlock
    }
    listener {
        timeout = 300
        on-timeout = loginctl lock-session
    }
    listener {
        timeout = 600
        on-timeout = systemctl suspend
    }

提示：你可以通過修改數值（以秒為單位）來調整無操作時的鎖屏超時時間。300 是 5 分鐘，600 是 10 分鐘等等。

這個文件必須是可執行的，然後運行它：

    ~/.config/hypr/hyprland.conf

    ...
    exec-once = hypridle
    ...

#### 在超時期限後使用 DPMS 關閉屏幕

Hyprland 有一個內置的調度器來控制 DPMS 請求，不過不建議使用它作為一個直接按鍵綁定，這樣做的結果是你不能打開重新打開你的屏幕，且需要你重新啟動。

更改在上文的文件並將其更改為：

    ~/.config/hypr/hypridle.conf

    general {
        lock_cmd = pidof hyprlock || hyprlock
    }

    listener {
        timeout = 300
        on-timeout = loginctl lock-session
    }

    listener {
        timeout = 600
        on-timeout = hyprctl dispatch dpms off
        on-resume = hyprctl dispatch dpms on
    }

    listener {
        timeout = 900
        on-timeout = systemctl suspend
    }

### 狀態欄

在 Hyprland 環境下，如果需要狀態欄，則需要一個兼容 Wayland 的外部應用程式。以 waybar包 軟體包為例，操作如下：

    ~/.config/hypr/hyprland.conf

    ...
    exec-once = waybar
    ...

#### 工作區總攬

waybar包 內置了適於這個功能的完全可自定義模塊，支持Hyprland工作區自然地切換。

查看 waybar Wiki[1] 了解詳情。

### Polkit 認證

Polkit 認證需要使用外部身份驗證代理。Hyprland 推薦使用hyprpolkitagent包 ，你也可以選擇其他的Polkit

調用hyprpolkitagent包：

    ~/.config/hypr/hyprland.conf

    ...
    exec-once = systemctl --user start hyprpolkitagent
    ...

### 桌面壁紙

在 Hyprland 環境下，如果需要管理桌面壁紙，則需要一個兼容 Wayland 的外部應用程式。以 hyprpaper包 軟體包為例，操作如下：

    ~/.config/hypr/hyprland.conf

    ...
    exec-once = hyprpaper
    ...

另外，hyprpaper包也需要一個配置文件來啟用，創建一個文件，如下：

    ~/.config/hypr/hyprpaper.conf

    preload = /home/me/amongus.png
    wallpaper = monitor, /home/me/amongus.png

將monitor替換為你想設置壁紙的顯示器，你可以通過`hyprctl monitors`來獲取一個顯示器列表。

#### 隨機壁紙腳本

創建以下腳本並確保其可執行：

    ~/.config/hypr/scripts/hyprpaper-random

    #!/usr/bin/env bash

    WALLPAPER_DIR="$HOME/.config/hypr/wallpapers/"
    CURRENT_WALL=$(hyprctl hyprpaper listloaded)

    # Get a random wallpaper that is not the current one
    WALLPAPER=$(find "$WALLPAPER_DIR" -type f ! -name "$(basename "$CURRENT_WALL")" | shuf -n 1)

    # Apply the selected wallpaper
    hyprctl hyprpaper reload ,"$WALLPAPER"

接下來創建一個新目錄來存儲背景圖片，類似於 `~/.config/hypr/wallpapers` 這樣的文件夾就可以了，並在其中放置任何你想要設置為的圖片。

最後，當''指定''按鍵被按下時調用腳本：

    ~/.config/hypr/hyprland.conf

    ...
    $mainMod = super

    bind = $mainMod, r, exec, ~/.config/hypr/scripts/hyprpaper-random
    ...

### 屏幕通知

屏幕上對亮度和音量調整等操作顯示通知的功能可以藉助外部的通知服務程序來實現。然而，深入探討這一主題超出了本頁面的說明範圍。這裡我們以 mako包 為例，首先需要安裝 mako包。

請參閱桌面通知程序以獲取進一步說明，以及桌面通知程序#獨立通知以獲取替代方案列表。

注意：* 此處提供的所有腳本均為示例，很可能需要根據您的設置情況進行調整。

- 本節中的所有腳本都必須是可執行的。

#### Mako

Mako 是一個輕量級的通知守護進程，您可以閱讀 mako(5) 以獲取詳細信息。 其配置文件位於 `~/.config/mako/config`，用於屏幕顯示（OSD）的圖標存儲在 `~/.config/mako/icons/` 並且應該是 PNG 格式。

在本節的其餘部分，腳本使用的所有圖像都可以從此 GitHub 文件夾獲取。

##### 鍵盤（Keyboard） 背光通知

首先創建以下腳本：

    ~/.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 = keyboard_brightness_up_shortcut, exec, ~/.config/hypr/scripts/kbbacklight --inc
    bind = keyboard_brightness_down_shortcut, exec, ~/.config/hypr/scripts/kbbacklight --dec

##### 媒體鍵通知

首先創建以下腳本：

    ~/.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="$(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

    # Screen brightness
    bind = , XF86MonBrightnessUp, exec, ~/.config/hypr/scripts/backlight --inc
    bind = , XF86MonBrightnessDown, exec, ~/.config/hypr/scripts/backlight --dec

##### 鍵盤（Keyboard）語言通知

要運行此腳本， 你需要一個命令行 JSON 處理器 gojqAUR

首先創建以下腳本：

    ~/.config/hypr/scripts/lang

     gojq -r '.keyboards[]

然後添加以下內容（或編輯任何現有的綁定）：

    ~/.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

### 電源控制（Power control）

Hyprland 需要一個與 Wayland 兼容的外部應用程式來進行電源控制。 以 nwg-barAUR 為例，我們只需按如下方式進行綁定：

    ~/.config/hypr/hyprland.conf

    ...
    bind = SUPER, ESCAPE, exec, nwg-bar
    ...

### 剪貼板（Clipboard）

Wayland 剪貼板行為會在關閉複製數據的應用程式時刪除數據。其他桌面環境通過使用專用的剪貼板管理器來解決這一問題，而 Hyprland 上則有多種兼容的選擇。更多信息，請參閱上游 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` 窗口。

### 啟用/禁用設備

要啟用 / 禁用設備（例如觸摸板），首先使用：

    $ hyprctl devices

來獲取你的設備名稱。

將這些代碼行放入你的配置文件中（將替換為上面查詢到的你的設備名稱）以打開 / 關閉設備：

    ~/.config/hypr/hyprland.conf

    device{name = <device_name>
      enabled = {true/false}
    }

要動態地打開 / 關閉設備，請使用 hyprctl：

    $ hyprctl keyword "device[<device_name>]:enabled" {true|false}

你也可以創建一個快捷鍵綁定，例如：

    ~/.config/hypr/hyprland.conf

    ...
    bind = $mainMod, t, exec, hyprctl keyword "device:[pixa3854:00-093a:0274-touchpad:]enabled" false
    bind = $mainMod Shift, t, exec, hyprctl keyword "device:[pixa3854:00-093a:0274-touchpad]:enabled" true
    ...

在Hyprland v0.34(?)之前，如下的遺留語法被使用：

`device:<device_name>:enabled`

這個舊的格式已經被刪除了。另外，更早的配置文件也無法使用一個代碼塊的結構：

`device { name = <device_name> ... }` ，但可以使用`device:<device_name> { ... }` 結構。

### 獨立的 dconf 配置文件

您可能不想污染其他基於 GTK 的桌面環境的配置，您可以使用一個獨立的 `dconf` 配置文件。例如：

聲明新的全局 dconf 配置文件：

    /etc/dconf/profile/hyprland

    user-db:hyprland

    ~/.config/hypr/hyprland.conf

    ...
    env = DCONF_PROFILE, hyprland
    ...

現在您可以使用 gsettings 而不影響其他桌面環境。

## 故障排除

### Fcitx5 相關問題

提示：若還未能解決，請重啟輸入法！

#### 無法輸入

當你在任何時候輸入中文時出現候選框不在輸入框附近（如 QQ 等），而是漂移到 Waybar 的左上角，選擇後也無法選詞到輸入框中，請在 Fcitx5 的配置頁面中新建一個分組，選擇`鍵盤-英語（美國）`，然後再設置一個快捷鍵來輪迴切換分組，切換後即可恢復正常

打開 Fcitx5 的配置頁面你需要安裝 fcitx5-configtool包。

#### 切換英文時出現問題

當你在輸入框中切換英文時，在 Waybar 左上角出現了輸入法中文狀態，且無法在輸入框中輸入英文，請重新啟動 Fcitx5 以臨時解決問題。

### Wayland 原生的 Electron 程序在 NVIDIA 上閃爍

由於 Hyprland [2] 不支持顯式同步， NVIDIA 用戶在 Hyprland [3], [4]上普遍存在閃爍問題。 建議使用X11 (XWayland) 臨時修復有問題的應用程式，方法是向它們傳遞`--ozone-platform-hint=x11`, 或在`~/.config/hypr/hyprland.conf`中設置 `env = ELECTRON_OZONE_PLATFORM_HINT,x11` 以強制所有 Electron 應用程式使用 XWayland 運行。

### JetBrains 軟體聚焦問題

JetBrains 軟體（PyCharm，IntelliJ）會出現一個奇怪的聚焦問題，如：

- 無法將標籤頁從標籤欄[5]拖動來實現分離，或者另一個標籤頁堆疊時無法更改焦點，亦或者一個標籤頁只要被你拖動過當前標籤欄就會停止拖動狀態。
- 自動彈出的窗口直到滑鼠移動時才被聚焦。

通過在Hyprland配置文件中寫入以下行以緩解該問題：

    ~/.config/hypr/hyprland.conf

    windowrulev2 = noinitialfocus,xwayland:1

## 參見

- Hyprland 網站
- 官方文檔
- Hyprland Github 倉庫頁面
- Community-maintained 工具、插件和擴展程序列表
- SolDoesTech Github 倉庫——Hyprland 快速安裝腳本（含 Hyprland 配置文件）

分類：​

- Wayland 合成器

Hyprland
新增話題