Hyprland
Hyprland 是一個獨立的且使用 C++ 編寫的平鋪式 Wayland 合成器。 Hyprland 值得注意的功能包括動態平鋪、選項卡窗口、整潔可讀的 C++ 代碼庫,和提供窗口動畫的自定義渲染器,窗口圓角,以及透明窗口上的 Dual Kawase Blur。一般用法和配置在 Hyprland Wiki 中有詳細文檔介紹。
當你遇到輸入法問題時,請查看故障排除。
如果你使用包管理器,安裝以下的其中一個:
- hyprland包 - 最新上游版本
- hyprland-gitAUR - 主分支上的最新提交
如果要使用 CMake 編譯安裝:
首先將 Git 倉庫克隆到本地:
git clone --recursive https://github.com/hyprwm/Hyprland
其次切換到 Git 倉庫目錄:
cd Hyprland
最後編譯安裝:
make all && sudo make install
自 #6608 起,Hyprland 使用 aquamarine 作為自己的渲染後端庫。在此之前,它捆綁了它自己的 wlroots 版本,與 wlroots包[損壞的連結: 被wlroots0.18包替代]類似。
- NVIDIA GPU 用戶也應該在嘗試啟動Hyprland之前確保遵守上游的 NVIDIA 頁面 Hyprland Wiki。如果不這麼做,可能會導致很多錯誤,包括可能無法登錄、窗口閃爍和 CPU 使用率較高。
- Hyprland 不支持使用 NVIDIA GPU,很多用戶成功了,但如果一些東西出現了錯誤,那你只能靠你自己來修復了。
- 請確保安裝了 Polkit 包,否則會導致 Hyprland 啟動失敗。(
logind missing permissions) - 對於 Vmware/VirtualBox 用戶,可能需要開啟 3D 加速才可以正常運行 Hyprland
}}
nwg-display包 是管理多顯示器的 GUI 軟體,支持 Hyprland. 它是 nwg-shell 的一部分,但並不依賴 nwg-shell,參閱 nwg-displays github 以獲得更多信息。
配置是通過一個配置文件,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 以查看所有可用選項
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
gestures {
workspace_swipe = true
workspace_swipe_fingers = 3
}
查看上游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 monitor=eDP-1,1920x1080@144,0x0,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%-
此外,還可以設置更改時彈出通知。
Hyprland 推薦 使用通用 Wayland 會話管理器(uwsm)來啟動會話。uwsm 通過 systemd 單元文件包裝合成器並相應地配置應用程式和守護進程,這允許你使用 systemctl 來控制它。通過以下 ~/.profile 腳本在 tty 中同時啟動 Hyprland 和 uwsm.
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 中使用。if uwsm check may-start; then exec uwsm start hyprland.desktop fi
通過使用 hyprland-uwsm.desktop 條目或者在桌面管理器中選擇 hyprland (uwsm-managed) 。
- 必須避免使用
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內,以避免與其他合成器發生衝突。
使用如下指令在 TTY 中啟動 Hyprland.
$ Hyprland
雖然從顯示管理器中啟動不是官方支持的,但是用戶們報告成功在 GDM 、 SDDM 和其他的顯示管理器中啟動。hyprland包 中包含一個顯示管理器條目,且所有 Hyprland AUR 包將會自動生成一個條目。
兩種方法都提供相同的結果,加上或減去一些環境變量和服務。
用戶可以通過一個顯示管理器或著在登錄時採用 Xinit#Autostart X at login 中描述的方法進行自動登錄
hyprctl 是一個命令行實用程序,隨Hyprland一起安裝,用於與顯示伺服器通信。它允許你向伺服器發送命令(相當於配置文件中的命令,但語法略有不同)、設置關鍵詞、發送詢問和請求信息。請查看完整文檔
Hyprland 還公開了 2 UNIX 套接字,以便通過代碼或命令行實用程序控制和獲取有關 Hyprland 的信息。這些套接字會廣播焦點變化(窗口、工作區、監視器)、窗口/工作區創建等事件。
hyprctl 和 IPC 接口都在腳本中有效使用,對於複雜任務控制 Hyprland。
在啟動應用程式時,選擇正確類型的調度器是非常重要的。不正確地使用 `exec` 可以使應用程式啟動多次而占用系統資源然後造成糟糕的狀況。造成競爭系統資源的情況然後使你的系統崩潰。
hyprland.conf 文件每次的更改:不要對每個軟體都使用 exec。
exec-once 在啟動時來運行應用程式和守護程序,使用這個命令啟動的軟體在 Hyprland 重新加載時將不會再次啟動。僅當你絕對確定希望每次重新加載時再次運行該命令時,才使用 exec。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中被解釋
Hyprland 開發團隊正在構建一個專門用於 Hyprland 的軟體生態,這些工具將包括調度器,允許使用 hyprctl 而不是依賴腳本來控制它們。
目前,軟體生態包括以下軟體:
Hyprpaper 是一個壁紙工具,你可以安裝 hyprpaper包 來使用它。
Hyprpicker 是一個用於在你的桌面中抓取一個顏色的工具,你可以安裝 hyprpicker包 來使用它。
Hypridle 是一個idle管理守護程序,你可以安裝 hypridle包 來使用它。
Hyprlock 是一個屏幕鎖定管理器,你可以安裝 hyprlock包 來使用它。
Hyprcursor 是一個處理屏幕光標的新格式,它在傳統的方式上提升了很多,你可以安裝 hyprcursor包 來使用它。
光標主題可以使用 AUR 安裝,以下是例子:
將現有的光標主題移植到 Hyprcursor,你可以參照上游 GitHub 倉庫。
關於設置光標樣式,你也可以查閱光標主題來設置。
hyprpolkitagent 是一個 polkit 身份驗證守護進程。圖形用戶界面應用程式需要使用它來請求提升權限。安裝 hyprpolkitagent包 來使用它。
參見 Hyprland Wiki。
Hyprsunset 是提供藍光濾鏡的實用工具,通過 hyprsunset包 安裝。
在 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 ...
Hyprland 需要一個外部的 Wayland 兼容的 idle 管理守護進程。最普遍安裝的是 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 ...
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' &
hyprctl dispatch dpms on 命令必須直接來自在腳本中的 hyprctl dispatch dpms off 命令,使其能正常地工作。resume 命令與上面的 timeout 相關聯上面的配置將會使你的顯示器關閉當你正在做一些事情,像玩一個遊戲,看一個視頻或聽音樂。在這些情況下您可能不會在超時期限內長時間觸摸系統。
來修復這個問題,你可以使用 Hyprland 內置的 Window Rules V2 功能(含有 idleinhibit 規則),你也可以安裝一個 idlehack-gitAUR 或者 sway-audio-idle-inhibit-gitAUR。前者是在 Firefox 或 Chromium 播放音頻或視頻時使用 D-Bus 來阻止 Swayidle 請求。後者會在任何應用程式播放音頻時阻止 Swayidle 請求。
對於使用 org.freedesktop.ScreenSaver.inhibit 程序來暫停屏幕保護,你可以安裝 hypridle-gitAUR在 Hyprland(或其他支持 idle-inhibit 協議的 Wayland 合成器)實現它。
為了使hypridle-gitAUR正常工作,你需要創建一個配置文件,例如這個小配置:
~/.config/hypr/hypridle.conf
general {
ignore_dbus_inhibit = false
ignore_systemd_inhibit = false
}
在 Hyprland 環境下,如果需要狀態欄,則需要一個兼容 Wayland 的外部應用程式。以 waybar包 軟體包為例,操作如下:
~/.config/hypr/hyprland.conf
... exec-once = waybar -c ~/.config/waybar/config ...
waybar包 內置了適於這個功能的完全可自定義模塊,支持Hyprland工作區自然地切換。
查看 waybar Wiki[1] 了解詳情。
Polkit 認證需要使用外部身份驗證代理。hyprpolkitagent包 是一個不錯的選擇。
使用以下代碼來使用:
~/.config/hypr/hyprland.conf
... exec-once = systemctl --user start hyprpolkitagent ...
在 Hyprland 環境下,如果需要管理桌面壁紙,則需要一個兼容 Wayland 的外部應用程式。以 swww包 軟體包為例,操作如下:
~/.config/hypr/hyprland.conf
... exec-once = swww-daemon exec-once = swww img path/to/image ...
創建以下腳本並確保其可執行:
~/.config/hypr/scripts/swww-random
#!/bin/bash
# 该脚本将随机浏览一个目录中的文件,
# 每隔一段时间将其设置为壁纸。
#
# 注意:本脚本使用 bash(而非 POSIX shell)来设置 RANDOM 变量
if [[ $# -lt 1 ]] || [[ ! -d $1 ]]; then
echo "Usage:
$0 <dir containing images>"
exit 1
fi
# 编辑以下内容以控制图像过渡
export SWWW_TRANSITION_FPS=144
export SWWW_TRANSITION_STEP=2
export SWWW_TRANSITION_TYPE=random
# 以秒为单位控制何时切换到下一幅图像
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
if [[ "$img" != "$1" ]]; then
swww img "$img"
sleep $INTERVAL
fi
done
done
接下來創建一個新文件夾來存儲背景圖片,類似於 ~/.config/hypr/backgrounds 這樣的文件夾就可以了,並在其中填充任何你想要的圖片。
最後,調用腳本:
~/.config/hypr/hyprland.conf
... exec-once = swww-daemon 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 = 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=$(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.3
首先創建以下腳本:
~/.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 上則有多種兼容的選擇。更多信息,請參閱上游 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> { ... } 結構。
您可能不想污染其他基於 GTK 的桌面環境的配置,您可以使用一個獨立的 dconf 配置文件。例如:
聲明新的全局 dconf 配置文件:
/etc/dconf/profile/hyprland
user-db:hyprland
~/.config/hypr/hyprland.conf
... env = DCONF_PROFILE, hyprland ...
現在您可以使用 gsettings 而不影響其他桌面環境。
當你在任何時候輸入中文時出現候選框不在輸入框附近(如 QQ 等),而是漂移到 Waybar 的左上角,選擇後也無法選詞到輸入框中,請在 Fcitx5 的配置頁面中新建一個分組,選擇鍵盤-英語(美國),然後再設置一個快捷鍵來輪迴切換分組,切換後即可恢復正常
打開 Fcitx5 的配置頁面你需要安裝 fcitx5-configtool包。
當你在輸入框中切換英文時,在 Waybar 左上角出現了輸入法中文狀態,且無法在輸入框中輸入英文,請重新啟動 Fcitx5 以臨時解決問題。
由於 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 軟體(PyCharm,IntelliJ)會出現一個奇怪的聚焦問題,如:
- 無法將標籤頁從標籤欄[5]拖動來實現分離,或者另一個標籤頁堆疊時無法更改焦點,亦或者一個標籤頁只要被你拖動過當前標籤欄就會停止拖動狀態。
- 自動彈出的窗口直到滑鼠移動時才被聚焦
添加:
~/.config/hypr/hyprland.conf
windowrulev2 = noinitialfocus,xwayland:1