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
添加话题