快轉到主要內容

Hyprland設定教學,漂亮又不佔資源的Linux Wayland視窗管理器

分類   Linux系統 Linux使用技巧
標籤   Wayland Hyprland
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字

如果你想要一款漂亮的、面向未來的視窗管理器,Ivon推薦你一定要試試Hyprland!

Hyprland是使用wl-roots函式庫寫成的視窗管理器兼Wayland合成器,由vaxerski開發,2022年5月推出正式版。

它跟Sway一樣,都是為純Wayland的Linux環境準備的,替代過去以X為主的視窗管理器。

相較於Sway意圖模仿i3wm,Hyprland作者有自己更多的想法。Ivon很滿意的部分是,Hyprland能輕鬆自定義外觀和按鍵設定,且預設的樣子就不錯看了,內建圓角、模糊、透明效果可以調,不用再裝其他程式。

Hyprland支援觸控板手勢、Nvidia閉源驅動、bspwm或i3的視窗排列方式,功能多樣。

Hyprland甚至有內建看板娘Hypr-chan呢!

即使擁有華麗特效,開機RAM佔用才500MB出頭而已,讓你高效率操作電腦的同時,又不佔用太多系統資源。

雖然如此,Hyprland仍不是開箱即用的「桌面」,你需要花點時間配置。它畢竟是視窗管理器,需要搭配其他程式才會好用。設定時勤讀官方文件、配置設定檔、手動寫啟動服務是免不了的。

這篇教學文章Ivon盡量把常用的功能都包進去,使讀者可以手動配置出一個大致能用的Hyprland桌面,再融入我的一點個人化配置。

環境
#

  • 裝置:MSI Modern 15 A10RBS
  • 系統:Arch Linux
  • 核心版本:6.6.4
  • CPU:Intel i5-10210u
  • GPU:Intel UHD 620
  • GPU2:Nvidia MX350

Arch Linux系統安裝方法此處不贅述,你可以用 archinstall安裝一個純文字最小系統再裝Hyprland;或是從現有桌面環境設定Hyprland,再沿用其顯示管理器(例如GDM、SDDM)來登入Hyprland。

Ivon的主力GPU用Intel內顯,Nvidia安裝閉源驅動,再透過PRIME存取。

1. 安裝Hyprland
#

現階段作者會一直加新功能,所以Linux最好用滾動發行版,例如Arch Linux,搭配AUR,以方便取得最新版Hyprland套件。

Arch Linux不用擔心版本問題,直接從官方套件庫裝Hyprland。

sudo pacman -S hyprland

1.1. Hyprland配套程式
#

建議安裝這些程式搭配Hyprland使用,使其成為完整的桌面環境。有些套件是AUR的,嫌麻煩直接用yay指令裝就行了,它會自動辨別。

yay -S kitty waybar-hyprland otf-font-awesome network-manager-applet brightnessctl pw-volume hyprshot power-profiles-daemon wofi hyprpaper swayidle swaylock wlogout dunst cliphist pipewire pipewire-pulse wireplumber pavucontrol xorg xorg-xwayland xdg-desktop-portal-hyprland xdg-desktop-portal-gtk polkit-kde-agent qt5-wayland qt6-wayland qt5ct nwg-look udiskie greetd greetd-tuigreet chezmoi fcitx5-im fcitx5-chewing fcitx5-qt fcitx5-gtk fcitx5-chinese-addons

這些套件功能如下:

  • kitty Hyprland預設終端機。我倒覺得終端機簡單夠用就好,個人偏好gnome-console
  • waybar-hyprland, otf-font-awesome 狀態欄與字體
  • network-manager-applet 從狀態欄開關網路
  • brightnessctl 亮度控制
  • pw-volume 音量控制
  • hyprshot 截圖工具
  • power-profiles-daemon 電源模式控制
  • wofi 應用程式選單
  • hyprpaper 桌布程式
  • swayidle , swaylock, wlogout 暫停模式,螢幕鎖定,登出選單
  • dunst 桌面通知守護行程
  • cliphist 剪貼簿
  • pipewire, pipewire-pulse, wireplumber, pavucontrol 音訊系統
  • xorg, xorg-xwayland X視窗系統,不是所有程式都支援Wayland。
  • xdg-desktop-portal-hyprland, xdg-desktop-portal-gtk 負責檔案選擇器、螢幕共享等功能
  • polkit-kde-agent 密碼驗證對話框
  • qt5-wayland ,qt6-wayland 讓QT程式支援Wayland
  • udiskie 自動掛載隨身碟
  • qt5ct:設定QT程式主題
  • nwg-look:設定GTK程式主題
  • greetd, greetd-tuigreet 開機負責登入桌面的顯示管理器
  • chezmoi 備份設定檔(dotfile)的好工具
  • fcitx5 中文輸入法

1.2. 命令行狂人適用的程式
#

這裡是極簡應用程式,命令行狂人適用。我個人不太會用這些,因為我覺得不直觀…看圖的話我習慣用Gwenview,檔案管理器則是Dolphin、錄影用OBS等。

  • ranger 檔案管理器
  • mpd 搭配Waybar的音樂播放器
  • mpv 影片/音樂播放器
  • ytfzf 純文字YouTube播放器
  • vim 文字編輯器
  • feh 圖片檢視器
  • mupdf 文件閱讀器
  • wl-recorder 螢幕錄影
  • qutebrowser 極簡QtWebEngine瀏覽器,用類似vim快捷鍵的方式操作

2. 撰寫Hyprland設定檔
#

想知道全部可用選項,請看Hyprland官方的說明文件,詳細明瞭: Configuring Hyprland - Hyprland Wiki

這裡講Ivon個人的設定,盡量保留預設並另外加功能。

  1. 複製Hyprland預設設定檔
mkdir ~/.config/hypr
cp /usr/share/hyprland/hyprland.conf ~/.config/hypr/hyprland.conf
  1. 用 vim編輯
vim ~/.config/hypr/hyprland.conf
  1. 大致上,hyprland.conf檔案的結構可以切成四塊:
  • exec區塊的定義啟動Hyprland跟著啟動的程式
  • 環境變數
  • 外觀、動畫、手勢、個別程式視窗規則的設定
  • bind的區域是快捷鍵綁定。

雖然Hyprland沒有嚴格規定設定檔的順序,但為了方便討論我沿用此規則。

螢幕設定
#

  1. 首先,將auto-generated=1警告註解掉。
# autogenerated = 1
  1. 設定自動取得螢幕名稱、螢幕最高解析度、自動取得座標,再設定全域縮放為1.15倍。
monitor =,highres,auto,1.15
  1. 此設定會自動套用第二個螢幕,因為我不確定第二個螢幕會是什麼解析度,所以就讓它自動偵測。

自動執行的程式
#

  1. 設定要啟動的程式,exec-onceexec的差別在於,前者要重新登入桌面才會啟動,後者則是每編輯一次設定檔就會自動重啟。

  2. 先匯入systemd環境變數,瀏覽器類的程式會用到。

exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
  1. 再啟動fcitx5、dunct、nm-applet、剪貼簿服務。
exec-once = hyprpaper
exec-once = wl-paste --type text --watch cliphist store
exec-once = wl-paste --type image --watch cliphist store
exec-once = waybar
exec-once = nm-applet
exec-once = fcitx5 -d  --replace
exec-once = dunst
exec-once = /usr/lib/polkit-kde-authentication-agent-1
exec-once = udiskie &
  1. 如果你的程式可以用systemd服務啟動那就不用寫在這邊。

環境變數
#

env環境變數的寫法為env = 名稱, 數值

  1. 設定滑鼠大小
env = XCURSOR_SIZE,24
  1. 指定目前的工作階段為Hyprland
env = XDG_CURRENT_DESKTOP, Hyprland
env = XDG_SESSION_TYPE, wayland
env = XDG_SESSION_DESKTOP, Hyprland
  1. 指定所有程式都使用Wayland,QT程式使用kvantum當主題。不過QT程式因為縮放有問題,所以我設定QT優先使用X而非Wayland協定。
# 預設文字編輯器
env = EDITOR, vim
# 給Firefox啟用Wayland
env = MOZ_ENABLE_WAYLAND, 1
env = GDK_BACKEND, "wayland,x11"
env = QT_QPA_PLATFORM, "xcb;wayland"
env = QT_QPA_PLATFORMTHEME, qt5ct
  1. 還有設定全域縮放比例(應該只對XWayland程式有效),依照程式框架個別設定
env = QT_AUTO_SCREEN_SCALE_FACTOR, 1
env = QT_SCALE_FACTOR, 1.15
env = GDK_DPI_SCALE, 1.15
  1. 再設定Fictx5的環境變數
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx

Intel、AMD顯示卡不需要特別設定即可獲得硬體加速;如果是用Nvidia專有驅動的話需參考 Hyprland作者的說明設定一些環境變數。筆電不需要,我使用Intel內顯渲染。

注意有時從終端機或Waybar手動啟動程式,程式可能還是吃不到Hyprland環境變數,這時就得將環境變數放到~/.config/environment.d/envvars.conf/etc/environment解決。

動畫、視窗裝飾
#

這部份看個人喜好調整,我沒有做太多修改。

僅修改rounding讓視窗圓角不要那麼圓。

視窗排列模式
#

視窗排列模式分成dwindle與master

dwindle模式即bspwm,視窗大小是動態變化的。

master模式就是i3那樣,一個視窗開在左邊,新視窗會從右邊依序分割開啟。

我維持dwindle模式。

視窗規則
#

視窗規則可用class:程式名稱選取要設定規則的視窗,比如我設定pavucontrol面板一律懸浮。如果不知道具體名字請用hyprctl clients指令查詢。

windowrulev2 = size 50% 50%, center, floating:*

我還設定所有懸浮視窗一律置中,並限制最大寬高50%。冒號後面用星號選取所有符合此類型的程式視窗

windowrulev2 = size 50% 50%, center, floating:*

雜項
#

  1. 在misc這塊,使用這二個變數,關閉Hyprland的預設桌布及看板娘。
misc {
    force_default_wallpaper = -1 # Set to 0 to disable the anime mascot wallpapers
    disable_hyprland_logo = false
}
  1. 啟用觸控版切換工作區的手勢。設定輕觸等同按下,觸控板等同滑鼠右鍵,雙指點選為左鍵
gestures {
    tap-to-click = true
    workspace_swipe = true
}
  1. 加上這條,關閉XWayland的自動縮放,防止程式模糊。縮放部份用環境變數調整就可以了。
xwayland {
  force_zero_scaling = true
}

按鍵綁定
#

鍵盤綁定部分預設的我沒改,Mod鍵維持Super鍵(Windows鍵)

我另外綁了鎖定鍵、音量鍵、亮度調節鍵、截圖鍵。想確認具體按鍵代碼可以用wev程式偵測。

# Mod + Shift + 方向鍵調整視窗大小
binde = $mainMod SHIFT, right, resizeactive, 10 0
binde = $mainMod SHIFT, left, resizeactive, -10 0
binde = $mainMod SHIFT, up, resizeactive, 0 -10
binde = $mainMod SHIFT, down, resizeactive, 0 10

# 音量鍵
binde=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+
bindl=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-

# 亮度鍵
binde=, XF86MonBrightnessDown, exec, brightnessctl set 5%-
bindl=, XF86MonBrightnessUp, exec, brightnessctl set +5%

# 全螢幕擷圖鍵
bind = , PRINT, exec, hyprshot -m output

終於弄好了,但還沒完呢!

Hyprland支援邊改設定檔邊套用變更。作者說法是一修改設定檔便會自動套用變更,但如果沒反應的話請用指令強制重新載入設定檔,或者重新登入桌面。

hyprctl reload

3. 設定Hyprland的配套程式
#

狀態欄Waybar的設定
#

  1. 將自己加入input群組
sudo usermod -a -G input $USER
  1. 編輯預設設定檔
cp /etc/xdg/waybar/* ~/.config/waybar/
vim ~/.config/waybar/config
  1. 將Waybar放在所有視窗最上層
"layer": "top",
  1. 最上面的"modules"是狀態欄要顯示的按鈕,不要的直接從json陣列移除就可以了,例如mpd用不到就刪除。另外加入工作區編號指示器hyprland/workspaces、登出按鈕wlogout
"modules-left": ["hyprland/workspaces", "custom/wofi", "custom/brave", "custom/dolphin"],
"modules-center": [],
"modules-right": ["idle_inhibitor", "pulseaudio", "backlight", "keyboard-state", "hyprland/language", "battery", "tray", "clock", "custom/wlogout"],
  1. 因為不支援圖片,Waybar使用Emoji當小圖示,如果電腦無法顯示請安裝相應字體,或者將其改為ASCII符號。

  2. 下滑到"network"這一段,設定隱藏網路SSID名稱還有 IP位址,把這些資訊改放到tooltip欄位。

"network": {
        // "interface": "wlp2*", // (Optional) To force the use of this interface
        "format-wifi": "",
        "format-ethernet": "{ifname} ",
        "tooltip-format": "{essid} {signalStrength}% {ifname} via {gwaddr} ",
        "format-linked": "{ifname} (No IP) ",
        "format-disconnected": "Disconnected ⚠",
        "format-alt": "{ifname} {gwaddr}",
        "tooltip": true
    },
  1. 最下面加入"custom/wlogout"的按鈕,設定點選啟動登出面板
     "custom/wlogout":{
      "format":"",
      "on-click":"wlogout"
      }

wlogout面板提供待機、鎖定螢幕、重開機的選單,需要進一步設定的請複製cp /etc/wlogout/* ~/.config/wlogout/後再編輯具體指令。待機因為我電腦的硬體支援度不佳所以沒啟用。

  1. Waybar的顏色樣式請編輯~/.config/waybar/style.css

桌布Hypraper的設定
#

桌布程式會疊在Hyprland預設的桌布上。

  1. 編輯預設設定檔
vim ~/.config/hypr/hyprpaper.conf
  1. 填入桌布路徑,wallpaper後面留白指定全部螢幕都使用同一張桌布
preload = /home/user/.config/wallpapers/wallpaper.jpg
wallpaper = ,/home/user/.config/wallpapers/wallpaper.jpg

登入畫面greetd設定
#

tuigreetd是純文字介面不需要設定背景。

  1. 編輯設定檔
sudo vim /etc/greetd/config.toml

2.設定記住登入用戶,並在登入後執行Hyprland

[default_session]
command = "tuigreet --time --asterisks --remember --cmd Hyprland"
  1. 如果有裝其他桌面環境,將現有的顯示管理器停用,改啟用greetd
sudo systemctl disable gdm
sudo systemctl enable greetd

系統部分的設定
#

  1. 設定自動啟動NetworkManager服務
sudo systemctl enable NetworkManager
  1. 設定自動啟動電源管理模式的設定
sudo systemctl enable power-profiles-daemon
  1. 設定自動啟動PipeWire服務
systemctl enable --user pipewire
systemctl enable --user pipewire-pulse
  1. xdg-desktop-portal服務應該會自動啟動,但也可以手動設定
systemctl enable --user xdg-desktop-portal-hyprland
systemctl enable --user xdg-desktop-portal-gtk
  1. 複製xdg-portal-desktop設定檔到使用者家目錄
cp /usr/share/xdg-desktop-portal/hyprland-portals.conf ~/.config/xdg-desktop-portal/portals.conf
  1. 設定Portal偏好為Hyprland優先其次GTK。
[preferred]
default=hyprland;gtk
  1. 設定完成後建議重開機。如果沒裝其他桌面環境,初次登入Hyprland要手動產生使用者家目錄:
sudo pacman -S xdg-dirs-update
LC_ALL=C xdg-user-dirs-update --force

4. Hyprland操作方式
#

Hyprland的視窗(window)是平鋪在螢幕上的,開新程式會直接顯示在目前程式的旁邊,不會重疊。

Hyprland提供多個工作區(workspace)用於擺放多個不同的程式,例如工作區1放瀏覽器,工作區2放文字編輯器。

dwindle模式下,Hyprland開的新視窗會按照滑鼠所在位置決定。

預設按鍵綁定
#

Hyprland預設綁定的Mod鍵是Windows鍵

  • Mod + Q 開啟終端機
  • Mod + C 關閉目前聚焦的視窗
  • Mod + M 終止Hyprland
  • Mod + E 開啟檔案管理器
  • Mod + V 讓視窗懸浮
  • Mod + R 開啟Wofi
  • Mod + P 固定目前視窗大小
  • Mod + J 切換垂直與水平視窗排列
  • Mod + 方向鍵(或l/r/u/d) 切換視窗聚焦
  • Mod + 數字鍵 切換工作區
  • Mod + Shift + 數字鍵 將視窗移動到該工作區
  • Mod + S,開啟scratchpad(將視窗最小化後集中的特殊工作區)
  • Mod + Shift + S,將視窗移動到scratchpad
  • Mod + 滑鼠滾輪 在工作區間切換(觸控板是三指手勢滑動)
  • Mod + 滑鼠左鍵 移動視窗
  • Mod + 滑鼠右鍵 調整視窗大小

雙螢幕切換
#

Hyprland預設每個螢幕一個工作區(跟window rule一樣,workspace也可以設定自動規則,參照官方文件),拖動視窗可以把它丟到第二個螢幕。Hyprland預設是讓第二個螢幕顯示在左方。

如果要設定螢幕相對位置,則使用hyprctl monitor指令取得所有螢幕名稱,再於hyprland.conf個別設定解析度。由於螢幕的座標數值是從左上角開始計算的,指定X軸便可以控制螢幕的相對方位。

# 使螢幕DP-1位於DP-2的左邊
monitor=DP-1, 1920x1080, 0x0, 1
monitor=DP-2, 1920x1080, 1920x0, 1

# 使螢幕DP-1位於DP-2的右邊
monitor=DP-1, 1920x1080, 1920x0, 1
monitor=DP-2, 1920x1080, 0x0, 1

也可以用mirror設定鏡射模式,讓第二螢幕跟第一螢幕顯示同樣內容

# 使DP-2螢幕鏡射DP-1的內容
monitor=DP-2,highres,auto,1,mirror,DP-1

需要獨顯加速請使用 Nvidia PRIME指令。

順帶一提Hyprland可以用hyprctl做虛擬輸出,方便在SSH或分享螢幕的時候做個假螢幕出來

## 做個Wayland的第二螢幕
hyprctl output create wayland

## SSH遠端啟用
hyprctl output create headless

一些應用程式問題
#

要設定GTK程式主題,執行nwg-look;QT則是qt5ct

Firefox的Wayland支援狀況良好。

Chromium系在純Wayland模式支援不佳,硬體加速有問題,將就用XWayland跑吧。但XWayland字體偶爾會模糊一下。

GTK的檔案選擇器會莫名變很大,可能要設定window rule。

終端機啟動X11程式如果吃不到環境變數,請在~/.config/environment.d/envvars.conf加入DISPLAY:0

5. 用chezmoi備份dotfile
#

參考 Chezmoi使用教學

參考資料
#

相關文章

postmarketOS搭配WayVNC使用,遠端連線到Linux手機的桌面
分類   Linux系統 Linux使用技巧
標籤   VNC PostmarketOS Wayland
Ubuntu LTS如何安裝Nvidia顯示卡驅動、CUDA、cuDNN、NVIDIA Container Toolkit套件
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Nvidia
Ubuntu 22.04如何連接Apple Airpods Pro藍牙耳機並查看電量
分類   Linux系統 Linux使用技巧
標籤   GNOME Ubuntu KDE Plasma

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請貼Imgur或Postimages。