メインコンテンツへスキップ
  1. ノート/
  2. ツールとデプロイ/

Hyprland 簡明ガイド

·3211 文字·7 分· loading · loading · · ·
ICE345
著者
ICE345
CS Student | System | Linux | OCaml
この記事は中国語版をもとにした日本語版メモです。コマンド、コード、数式、画像リンクは原文の意味を壊さないように保持し、説明文と見出しを日本語向けに整理しています。
まず声明,并不是所有功能都是通过快捷键打开的,つまり比如说: Kool_Quick_Settings.sh このつまり先通过 yad 或者 rofi 这些ツール图形化功能栏目,その後就できます通过コマンド打开ファイル

ディレクトリ结构
#

省流版
#

.config/hypr/

.
├── animations
├── application-style.conf
├── configs
├── hypridle.conf
├── hyprland.conf
├── hyprlock-2k.conf
├── hyprlock.conf
├── hyprpaper.conf
├── initial-boot.sh
├── Monitor_Profiles
├── monitors.conf
├── scripts
├── UserConfigs
├── UserScripts
├── v2.3.15
├── wallpaper_effects
├── wallust
└── workspaces.conf

大概説明
#

最重要ファイル: hyprland.conf, このファイルつまり一个相当于 hyprland 的根設定ファイル,窗口管理(WM)的根基設定

animations 是控制窗口、工作区、图层等 UI 元素的动画效果的一个ディレクトリ的設定ファイル. (できます通过 SUPER SHIFT A 来选择)

application-style.conf: hyprland-qt-support provides a QML style for hypr qt6 apps

configs 是项目 Default config ディレクトリ, 最好不要改动. scripts 同样是

UserConfigs 则不一样,是表示用户级别的設定ディレクトリ,できます自定义设置. UserScripts 同样

hypridle.conf :

hyprlock.conf 是与锁屏有关的設定ファイル

hyprpaper.conf显示器 wallpaper 设置的設定ファイル

initial-boot.sh 是 hyprland 启动的时候,如何渲染つまり通过この脚本ファイル来設定的

monitors.conf 是由 Monitor_Profile この与monitor設定有关的ディレクトリ里的 default.conf 生成的

wallpaper_effects 是 wallpaper 改变之后生成的一个ディレクトリ,有两个隐藏ファイル: .wallpaper_current.wallpaper_modified

workspaces.conf 是一个由 Userconfigs 里的 WorkSpaceRules ファイル生成的一个ファイル,是一个工作区如何定义和管理的設定ファイル

wallust颜色定义ディレクトリ,里面有个ファイル (相当于一个常量头ファイル)

UserConfigs/WindowRules.conf このファイルつまり管理窗口的,定义规则看如何给窗口贴标签,分配 workspace 这些等1

たとえば:

windowrulev2 = tag +projects, class:^(codium|codium-url-handler|VSCodium)$
windowrulev2 = tag +projects, class:^(VSCode|code-url-handler)$
windowrulev2 = tag +projects, class:^(jetbrains-.+)$


# 这个可以实现在规定workspace启动应用窗口
windowrulev2 = workspace 4, tag:projects

详细版ディレクトリ结构
#

.config/hypr

.
├── animations
│   ├── 00-default.conf
│   ├── 01-default - v2.conf
│   ├── 03- Disable Animation.conf
│   ├── END-4.conf
│   ├── HYDE - default.conf
│   ├── HYDE - minimal-1.conf
│   ├── HYDE - minimal-2.conf
│   ├── HYDE - optimized.conf
│   ├── HYDE - Vertical.conf
│   ├── Mahaveer - me-1.conf
│   ├── Mahaveer - me-2.conf
│   ├── ML4W - classic.conf
│   ├── ML4W - dynamic.conf
│   ├── ML4W - fast.conf
│   ├── ML4W - high.conf
│   ├── ML4W - moving.conf
│   └── ML4W - standard.conf
├── application-style.conf
├── configs
│   └── Keybinds.conf
├── hypridle.conf
├── hyprland.conf
├── hyprlock-2k.conf
├── hyprlock.conf
├── hyprpaper.conf
├── initial-boot.sh
├── Monitor_Profiles
│   ├── default.conf
│   └── README
├── monitors.conf
├── scripts
│   ├── AirplaneMode.sh
│   ├── Animations.sh
│   ├── BrightnessKbd.sh
│   ├── Brightness.sh
│   ├── ChangeBlur.sh
│   ├── ChangeLayout.sh
│   ├── ClipManager.sh
│   ├── DarkLight.sh
│   ├── Distro_update.sh
│   ├── GameMode.sh
│   ├── Hypridle.sh
│   ├── KeyBinds.sh
│   ├── KeyHints.sh
│   ├── KillActiveProcess.sh
│   ├── Kitty_themes.sh
│   ├── Kool_Quick_Settings.sh
│   ├── KooLsDotsUpdate.sh
│   ├── LockScreen.sh
│   ├── MediaCtrl.sh
│   ├── MonitorProfiles.sh
│   ├── Polkit-NixOS.sh
│   ├── Polkit.sh
│   ├── PortalHyprland.sh
│   ├── RefreshNoWaybar.sh
│   ├── Refresh.sh
│   ├── RofiEmoji.sh
│   ├── RofiSearch.sh
│   ├── RofiThemeSelector-modified.sh
│   ├── RofiThemeSelector.sh
│   ├── ScreenShot.sh
│   ├── Sounds.sh
│   ├── SwitchKeyboardLayout.sh
│   ├── TouchPad.sh
│   ├── UptimeNixOS.sh
│   ├── Volume.sh
│   ├── WallustSwww.sh
│   ├── WaybarCava.sh
│   ├── WaybarLayout.sh
│   ├── WaybarScripts.sh
│   ├── WaybarStyles.sh
│   └── Wlogout.sh
├── UserConfigs
│   ├── 00-Readme
│   ├── 01-UserDefaults.conf
│   ├── ENVariables.conf
│   ├── LaptopDisplay.conf
│   ├── Laptops.conf
│   ├── Startup_Apps.conf
│   ├── UserAnimations.conf
│   ├── UserDecorations.conf
│   ├── UserKeybinds.conf
│   ├── UserSettings.conf
│   ├── WindowRules.conf
│   ├── WindowRules-new.conf
│   └── WorkSpaceRules
├── UserScripts
│   ├── 00-Readme
│   ├── RainbowBorders.sh
│   ├── RofiBeats.sh
│   ├── RofiCalc.sh
│   ├── WallpaperAutoChange.sh
│   ├── WallpaperEffects.sh
│   ├── WallpaperRandom.sh
│   ├── WallpaperSelect.sh
│   ├── Weather.py
│   ├── Weather.sh
│   └── ZshChangeTheme.sh
├── v2.3.15
├── wallpaper_effects
├── wallust
│   └── wallust-hyprland.conf
└── workspaces.conf

設定
#

应用自启动設定
#

hyprland.conf このファイル里自定义软件的自启动2

examples:

exec-once = [workspace 1 silent] kitty
exec-once = [workspace 1 silent] subl
exec-once = [workspace 3 silent] mailspring
exec-once = [workspace 4 silent] firefox

exec VS exec-once
#

You can execute a shell script on:3

  • startup of the compositor
  • every time the config is reloaded.
  • shutdown of the compositor

exec-once = command will execute only on launch support rules

execr-once = command will execute only on launch

exec = command will execute on each reload support rules

execr = command will execute on each reload

exec-shutdown = command will execute only on shutdown

工作区 (Workspace)
#

つまり如何自定义和管理 workspaces 的,そのため都是在 UserConfigs/WorkspaceRules 来设置来管理(不过この一旦设置つまり全部通用),或者通过 workspaces.conf このファイル来定义4

显示器 (Monitor)
#

できます直接通过 nwg-displays 来快速设定 (できます SUPER SHIFT E 打开功能栏目その後搜索就できます了)

也できます直接自定义 monitors.conf ファイル5

できます通过 nwg-display ツール来设定显示器

快捷键 (keybinds)
#

rules: bind = MODS, key, dispatcher, params6

examples: bind = SUPER, B, exec, firefox

根据上面ディレクトリ结构所说的,できます在 UserConfigs/UserKeybinds.conf 里定义,也有 UserScripts/UserKeybinds.sh 里定义脚本,还有一个 UserScripts/UserKeyHints.sh 有常用快捷键提示

这里说到快捷键要説明一下,渲染問題 (有 yadrofi 这两个实现脚本的 GUI)

简单对比:

功能yadrofi
图形风格GTK,传统 GUI 样式极简、dmenu 风格
多列显示✅ 原生支持🚫 不支持多列(需手动 hack)
自定义交互复杂度高(按钮、表单、进度条等)中(菜单交互 + 自定义脚本)
外观主题支持GTK 主题rofi 主题(通过 config 设置)
使用场景設定ツール、提示菜单、设置界面启动器、搜索菜单、快速选择器

環境変数 ENV
#

/etc/environment 加载 fcitx5

下面的注释是 fcitx5 的 wayland 前端好像是会自动加载这些,そのため还追加的话,这样每次启动都会有提示消息
#GTK_IM_MODULE=fcitx
#QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus

加载 nvidia (还是怕 nvidia 驱动没有加载,そのため在システム级别的 evn 中追加)

__NV_PRIME_RENDER_OFFLOAD=1
__GLX_VENDOR_LIBRARY_NAME=nvidia

Nvidia
#

まず禁用 nouveau この开源驱动,fedora 和 arch 方法不一样,arch できます直接在 /etc/mkinitcpio.conf 里的 HOOK 字段変更 (削除 kms 就行), その後就mkinitcpio -P

禁用 nouveau 驱动
#

/etc/modprobe.d このディレクトリ里编写一个ファイル:blacklist-nouveau. conf(ファイル名できます自己自定义)

blacklist nouveau
options nouveau modeset=0

その後, 我们要加载この禁用的ファイル設定

/etc/default/grub ファイル中:

GRUB_CMDLINE_LINUX="rd.driver.blacklist=nouveau modprobe.blacklist=nouveau"

その後就要: sudo dracut --force 重新生成 grub 引导ファイル

以防 nvidia 驱动没有启动,我们在很多方面都写了相关環境変数

/etc/modprobe.d 编写一个nvidia. confファイル7

options nvidia_drm modeset=1

UserConfigs/ENVariables.conf 定义各种 env 包括nvidia的 (そのため基本我们为了项目化,都在この改动 env)


输入法设置
#

Fcitx5 各种設定以及問題
#

Rime 的大写模式下的問題
#

Rime 的中文输入法下按下 capslock键 你就处于大写模式无法输入中文了,その後就各种文档参看, 找到2013 年的issue8, 这种应该按道理不管在哪个 DE 或者 WM 下都应该修复了才对的啊!!🤔

I’ll look into this problem tonight.

You can temporarily disable mode switching with Caps Lock by patching default.yaml:

# default.custom.yaml
patch: {
  ascii_composer/switch_key/Caps_Lock: noop
}

软件窗口里的输入法
#

不知道是 electron 应用的問題还是 hyprland 和 fcitx5 还不是很兼容的問題。我们必要在 desktop file 里的Exec字段手动定义实现できます用 fcitx5 的中文输入

补充以下設定:

--enable-wayland-ime 

もし是用户级别的软件,我们必要在 .local/share/applications 里的 desktop file 里定义。否则,我们要在 /usr/share/applications 里查找 desktop file 来変更

なぜなら有些应用会出现输入中文的拼音会漏词 (つまり明明想要输入 shuru 但是可能会漏出 h 到 fcitx5 的候选词栏中), 有些ブログ说できます:

~/.config/gtk-3.0/config ファイル中追加:9

[Settings]
gtk-im-module = fcitx

Electron 相关应用参考官方链接
#

比如软件:obsidian,vscode,chrome10

なぜなら在 linux+nvidia+wayland 这种情况下,nvidia この gpu 加速不一定适配,そのため可能就无法实现很流畅地渲染,但是为了进可能地渲染

我们在 desktop file 里也定义:

--enable-features=UseOzonePlatform --ozone-platform=wayland

StartupWMClass=obsidian # 这个field就是添加窗口class属性(可以更好在窗口管理管理)

代理問題: この也是要在 .desktop 里根据各个 applications 的要求设置 proxy


奇奇怪怪的問題
#

firefox 的 class 問題
#

目的: 想要实现在打开某些窗口的时候打开到固定的工作区

.config/hypr/UserConfigs/WindowRules.conf このファイル里定义窗口规则的时候,发现以下設定:

windowrule2 = tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)

windowrule2 = workspace 4, tag: browser

这样的設定根本没有在 workspace 4 打开 firefox, 我使用 hyprctl clients コマンド確認属性的时候,发现是正常的.

但是听从 gpt 意见写成:

windowrele2= workspace 4, tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)

这样的設定却できます生效,问了一下 gpt, 就说是以下原因:

窗口作成时机:某些应用程序在启动时可能会先作成窗口,その後再设置类名(class)等属性。もし tag 是基于 class 设置的,而 class 尚未被识别,tag 就不会被应用,导致依赖于该 tag 的规则无法生效。(比如 firefox)

waybar 的 icon 显示問題: 比如 waybar 的 rose 的主题,有时候会出现蓝牙图标没有显示(==我想到的可能性是蓝牙启动比 waybar 慢,そのため无法显示==),只有重新 refresh waybar 才行,そのためできます尝试在 hyprland.conf 中设置 exec-once = blueman-applet 我们手动设置让蓝牙启动

结论:

Hyprland 的 windowrulev2 规则在处理标签(tag)和工作区(workspace)时,应用顺序和窗口作成时机非常关键。​もし窗口在作成时尚未被赋予标签,那么依赖于该标签的工作区规则可能不会生效。​ spotify 也是这样,wiki 里也有提及11

为确保窗口在作成时立即被分配到正确的工作区,建议将标签和工作区的设置合并为一条规则,并确保窗口在作成时就匹配该规则。


参考🔗
#

関連記事