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-gitAUR类似。
- NVIDIA GPU 用户也应该在尝试启动Hyprland之前确保遵守上游的 NVIDIA 页面 Hyprland Wiki。如果不这么做,可能会导致很多错误,包括可能无法登录、窗口闪烁和 CPU 使用率较高。
- Hyprland 不支持使用 NVIDIA GPU,很多用户成功了,但如果一些东西出现了错误,那你只能靠你自己来修复了。
- 请确保安装了 Polkit 包,否则会导致 Hyprland 启动失败。(
logind missing permissions
) - 对于 Vmware/VirtualBox 用户,可能需要开启 3D 加速才可以正常运行 Hyprland
配置[编辑 | 编辑源代码]
配置是通过一个配置文件,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
布局的键盘则有必要更改按键映射
键入延迟和速率[编辑 | 编辑源代码]
虽然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%-
此外,还可以设置更改时弹出通知。
使用[编辑 | 编辑源代码]
启动[编辑 | 编辑源代码]
目前推荐从TTY启动Hyprland[编辑 | 编辑源代码]
$ Hyprland
虽然从显示管理器中启动不是官方支持的,但是用户们报告成功在 GDM 、 SDDM 和其他的显示管理器中成功启动。hyprland包中包含一个显示管理器条目,且所有Hyprland AUR 包将会自动生成一个条目。
两种方法都提供相同的结果,加上或减去一些环境变量和服务。
自动登录[编辑 | 编辑源代码]
用户可以通过一个显示管理器或着在登录时采用 Xinit#Autostart X at login 中描述的方法进行自动登录
hyprctl 和 IPC[编辑 | 编辑源代码]
hyprctl 是一个命令行实用程序,随Hyprland一起安装,用于与显示服务器通信。它允许你向服务器发送命令(相当于配置文件中的命令,但语法略有不同)、设置关键词、发送询问和请求信息。请查看完整文档
Hyprland 还公开了 2 UNIX 套接字,以便通过代码或命令行实用程序控制和获取有关 Hyprland 的信息。这些套接字会广播焦点变化(窗口、工作区、监视器)、窗口/工作区创建等事件。
hyprctl 和 IPC 接口都在脚本中有效使用,对于复杂任务控制 Hyprland。
exec 与 exec-once[编辑 | 编辑源代码]
在启动应用程序时,选择正确类型的调度器是非常重要的。不正确地使用 `exec` 可以使应用程序启动多次而占用系统资源然后造成糟糕的状况。造成竞争系统资源的情况然后使你的系统崩溃。
hyprland.conf
文件每次的更改:不要对每个软件都使用 exec
。
exec-once
在启动时来运行应用程序和守护程序,使用这个命令启动的软件在 Hyprland 重新加载时将不会再次启动。仅当你绝对确定希望每次重新加载时再次运行该命令时,才使用 exec
。设置环境变量[编辑 | 编辑源代码]
通过env关键词在hyprland.conf
中设置环境变量,它的语法不同于在Unix shell中使用env命令
这些差异在上游Wiki中被解释
Hypr 生态[编辑 | 编辑源代码]
Hyprland 开发团队正在构建一个专门用于 Hyprland 的软件生态,这些工具将包括调度器,允许使用 hyprctl 而不是依赖脚本来控制它们。
目前,软件生态包括以下软件:
Hyprpaper[编辑 | 编辑源代码]
Hyprpaper 是一个壁纸工具,你可以安装 hyprpaper包 来使用它。
Hyprpicker[编辑 | 编辑源代码]
Hyprpicker 是一个用于在你的桌面中抓取一个颜色的工具,你可以安装 hyprpicker包 来使用它。
Hypridle[编辑 | 编辑源代码]
Hypridle 是一个idle管理守护程序,你可以安装 hypridle包 来使用它。
Hyprlock[编辑 | 编辑源代码]
Hyprlock 是一个屏幕锁定管理器,你可以安装 hyprlock包 来使用它。
Hyprcursor[编辑 | 编辑源代码]
Hyprcursor 是一个处理屏幕光标的新格式,它在传统的方式上提升了很多,你可以安装 hyprcursor包 来使用它。
Hyprcursor 主题[编辑 | 编辑源代码]
光标主题可以使用 AUR 安装,以下是例子:
将现有的光标主题移植到 Hyprcursor,你可以参照上游 GitHub 仓库。
关于设置光标样式,你也可以查阅光标主题来设置。
hyprpolkitagent[编辑 | 编辑源代码]
hyprpolkitagent 是一个 polkit 身份验证守护进程。图形用户界面应用程序需要使用它来请求提升权限。安装 hyprpolkitagent包 来使用它。
参见 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 管理守护进程。最普遍安装的是 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' &
hyprctl dispatch dpms on
命令必须直接来自在脚本中的 hyprctl dispatch dpms off
命令,使其能正常地工作。resume 命令与上面的 timeout 相关联当使用应用程序时停止 DPMS[编辑 | 编辑源代码]
上面的配置将会使你的显示器关闭当你正在做一些事情,像玩一个游戏,看一个视频或听音乐。在这些情况下您可能不会在超时期限内长时间触摸系统。
来修复这个问题,你可以使用 Hyprland 内置的 Window Rules V2 功能(含有 idleinhibit
规则),你也可以安装一个 idlehack-gitAUR 或者 sway-audio-idle-inhibit-gitAUR。前者是在 Firefox 或 Chromium 播放音频或视频时使用 D-Bus 来阻止 Swayidle 请求。后者会在任何应用程序播放音频时阻止 Swayidle 请求。
对于使用 org.freedesktop.ScreenSaver.inhibit
程序来暂停屏幕保护,你可以安装 wscreensaver-bridge-gitAUR[损坏的链接:包未找到]在 Hyprland(或其他支持 idle-inhibit
协议的 Wayland 合成器)实现它。
状态栏[编辑 | 编辑源代码]
在 Hyprland 环境下,如果需要状态栏,则需要一个兼容 Wayland 的外部应用程序。以 waybar包 软件包为例,操作如下:
~/.config/hypr/hyprland.conf
... exec-once = waybar -c ~/.config/waybar/waybar.conf ...
工作区总揽[编辑 | 编辑源代码]
waybar包 内置了适于这个功能的完全可自定义模块,支持Hyprland工作区自然地切换。
查看 waybar Wiki[1] 了解详情。
Polkit 认证[编辑 | 编辑源代码]
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 ...
使用脚本以每 X 分钟更换一次壁纸[编辑 | 编辑源代码]
创建以下脚本并确保其可执行:
~/.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包 的操作,现在请继续进行安装。
查看 “Desktop notifications” 以获取进一步的说明以及 “Desktop notifications#Standalone” 以获取替代方案列表。
查看 Desktop notifications 以获取进一步的说明以及 Desktop notifications#Standalone 以获取替代方案列表.
- 本节中的所有脚本都必须是 可执行的 。
Mako[编辑 | 编辑源代码]
Mako 是一个轻量级的通知守护进程, 你可以阅读 mako(5) 有关详细信息。 它的配置文件是 ~/.config/mako/config
,用于屏幕显示(OSD)的图标存储在~/.config/mako/icons/
并且应该是 PNG 格式。
在本节的其余部分,脚本使用的所有图像都可以从此 GitHub 文件夹获取 this GitHub folder.
键盘(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
然后添加以下内容或编辑任何现有内容 existing one:
~/.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
键盘(Keyboard)语言通知[编辑 | 编辑源代码]
要运行此脚本, 你需要一个命令行 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
电源控制(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:<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 ...
独立的 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 以临时解决问题。
xdg-desktop-portal-hyprland 正在占用大量的 CPU[编辑 | 编辑源代码]
这是一个已知的漏洞 [2] 应该在最新的 Git 版本中得到解决. 可以通过在您的 hyprland.conf
文件中调用来自Hyprland wiki(维基)的核心脚本,具体用法 参考这儿[失效链接 2024-07-30 ⓘ] 。
原生(wayland)电子(electron)应用程序在 NVIDIA 上闪烁[编辑 | 编辑源代码]
由于 Hyprland [3] 不支持显式同步, NVIDIA 用户在 Hyprland [4], [5]上普遍存在闪烁问题。 建议使用X11 (XWayland) 临时修复有问题的应用程序,方法是向它们传递--ozone-platform-hint=x11
, 或在~/.config/hypr/hyprland.conf
中设置 env = ELECTRON_OZONE_PLATFORM_HINT,x11
以强制所有电子应用程序使用 XWayland 运行。