ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

2026 Hyprland学习笔记

2026 Hyprland学习笔记 Hyprland 名气很大很久之前我就知道。并试用过。当时只是因为我的IDEA2021在这个桌面环境中显示的有点问题后来就放弃使用了Hyprland。现在我的IDEA已经升级成2026了与是打算重新用起来。目前我主用的桌面环境是Awesome WM 从2023-01开始用到现在。在此之前用的是i3wm。因为当时i3wm在使用浏览器播放视频总是出现花屏的情况。才切的awesome。以上是我的过去的习惯。本文是我探索的过程记录并非以教程为视角。仅供参考。Hyprland简介Hyprland是一个现代化的Wayland 动态平铺窗口管理器Compositor主要特点是自动平铺窗口会自动排列适合键盘高效操作。动画漂亮切换窗口、工作区时动画流畅比传统平铺 WM 更现代。高度可定制快捷键、窗口规则、动画、布局都能自己配置。基于 Wayland不是 X11适合较新的 Linux 桌面环境。Arch Linux 用户很多社区活跃教程和配置案例丰富。不是完整桌面环境通常还要搭配 Waybar、wofi/rofi、通知程序、锁屏等组件。可以简单理解为Hyprland ≈ Wayland 时代更漂亮、更现代的 i3/Awesome 风格平铺桌面。https://github.com/hyprwm/Hyprland目标与原则刚切为主力桌面环境的话百分百会遇到各种问题。为了防止自己中途放弃我决定这次至少使用一周时间。超过一周无法坚持下去的话就在放弃。强迫自己与时俱进。尽量不修改默认配置如按键配置。尽量用Hyprland的默认值。 为什么这样做呢因为以前我无论用什么软件都喜欢把默认配置修改成自己以前熟悉的手感去使用。好处是上手快缺点就是要花很多时间去修改配置。存在改来改过左也不是右也不是的情况最终反而浪费了很多时间。 因为常常会出现迁一发动全身的情况 。入门开机Warning学习从这个Warning开始吧。Warning: Youre using an autogenerated config! Edit the config file to get rid of this message. (configfile: /home/itkey/.config/hypr/hyprland.lua) SUPERQ- kitty (if it doesnt launch,makesure its installed or choose a different terminalinthe config)SUPERM-exitHypriand从这个警告信息能得知以下信息配置文件~/.config/hypr/hyprland.lua默认SUPERQ 打开kitty 终端默认SUPERM 退出桌面有这些信息基本就可以使用这个桌面了。Getting started首次使用开机会有个向导程序。可以点Next看下一步的内容首先我们需要安装一些系统正常运行所必需的软件包。我的电脑信息如下组件状态当前软件Authentication agent*❌ Missing-Terminal*✅ InstalledkittyWallpaper✅ InstalledhyprpaperNotification Daemon*❌ Missing-Application launcher✅ InstalledwofiFile manager*✅ InstalledrangerPipewire*✅ RunningpipewireXDG Desktop Portal*❌ Missing-Status bar / shell✅ InstalledwaybarClipboard*✅ Installedwl-copy这里的*号是必须的。然后鼠标放到每个项目上会有一个建议。与是我就来按照建议安装一下# Authentication agent*sudopacman-Shyprpolkitagent# XDG Desktop Portal*sudopacman-Sxdg-desktop-portal-hyprland# Notification Daemon*sudopacman-Sdunst然后我安装完成后重新进入桌面在看一下。这时我发现Authentication agent*与XDG Desktop Portal*还是显示Missing。正在我写文章的时候XDG Desktop Portal*由Missing变成了Running:xdg-desktop-portal-hyprland这里我在想会不会是因为服务没有启动才会这样显示的呢实测当我执行systemctl--userstart hyprpolkitagent那个检测界面会显示Authentication agent*:Running:hypropolkitagent 。看来不用重启也能看到效果。这个服务如何设置开机启动呢编辑~/.config/hypr/hyprland.lua增加以下内容-- 开机启动 hl.on(hyprland.start, function()hl.exec_cmd(systemctl --user start hyprpolkitagent)end)重启后在测试这次发现全都正常了没有在显示Missing了。默认应用设置这里默认的File Manager是dolphin,默认的Launcher是hyprlauncher。为了品尝原味的我也来安装一下吧。# File Managersudopacman-Sdolphin# Launchersudopacman-Shyprlauncher开机启动设置我把我在awesome 之中开机脚本迁移到这里~/.config/hypr/hyprland.lua增加以下内容-- 开机启动hl.on(hyprland.start,function()hl.exec_cmd(systemctl --user start hyprpolkitagent)-- 输入法hl.exec_cmd(fcitx5)-- 自动挂载U盘hl.exec_cmd(udiskie)-- 改键hl.exec_cmd(xmodmap /home/itkey/.xmodmap)-- 连接wifi的图形化管理工具hl.exec_cmd(MAX_RETRIES3 SLEEP_SECONDS5 /home/itkey/.soft/bin/connect-SAMKING_NJ-wifi.sh)-- 音量调节托盘hl.exec_cmd(volumeicon)end)默认快捷键SUPER Q Terminal 终端SUPER E File Manger 文件管理SUPER R Launcher 程序启动器SUPER C Close window 关闭窗口SUPER V Toggle floating 切换浮动SUPER M Exit Hyprland 注销SUPER [1- 9] Workspaces 1- 9 切换工作空间SUPER SHIFT [1-9] Move window to workspace 1 - 9SUPER Arrows Move focus around 切换不同窗口至此完成了入门的配置了吧。这次重启后就只有一个壁纸了没有任何界面了。如果还想看到向导可以命令行中执行hyprland-welcomewaybar状态栏呢默认情况下是无法看到状态栏的。那么我如何看以下信息呢当前在哪个Workspace当前任务栏中有哪些正在运行的程序比较我以前用来切换wifi的程序微信之类的。我了解了一下可以通过 Waybar来实现这样的功能。https://github.com/Alexays/Waybar开机启动项目中增加hl.exec_cmd(waybar)配置文件~/.config/waybar/config.jsonc内容我是从https://github.com/Alexays/Waybar/blob/master/resources/config.jsonc之中复制过来的。我的修改如下首先我觉得默认的高度太高了我注释了这一行实现自动高度//height:30, // Waybar height(to be removedforauto height)默认的我工作区是无法正常显示的我看了配置文件。发现默认的配置文件是在sway中使用的所以调整了以下部分。modules-left:[ext/workspaces,hyprland/submap,custom/media],// 使用 Wayland 工作区协议兼容 Hyprland 的 Lua 配置接口。ext/workspaces:{format:{name},on-click:activate,all-outputs:false},其中ext/workspaces 为了解决鼠标点击工作区没有反应的问题。右侧的电源按钮点击会闪退AI教我这么做可以修复 。nvim ~/.config/waybar/power_menu.xml内容如下?xmlversion1.0encodingUTF-8?interfaceobjectclassGtkMenuidmenuchildobjectclassGtkMenuItemidsuspendpropertynamelabelSuspend/property/object/childchildobjectclassGtkMenuItemidhibernatepropertynamelabelHibernate/property/object/childchildobjectclassGtkMenuItemidshutdownpropertynamelabelShutdown/property/object/childchildobjectclassGtkSeparatorMenuItemiddelimiter1//childchildobjectclassGtkMenuItemidrebootpropertynamelabelReboot/property/object/child/object/interface目前为止基本够我使用了这个默认设置看起来一块块色块对我看来挺花哨的。我更喜欢简洁实现的风格的。样式自定义默认的样式对我来说大彩块太多了。而且信息密度不大。我用AI帮我优化了一下最终效果如下增加样式表/home/itkey/.config/waybar/style.css内容如下/* 保留默认字体和栏背景统一模块文字颜色。 */*{font-family:FontAwesome,Roboto,Helvetica,Arial,sans-serif;font-size:13px;color:#ffffff;}window#waybar{background-color:rgba(43,48,59,0.5);border-bottom:3px solidrgba(100,114,125,0.5);}window#waybar.hidden{opacity:0.2;}button{box-shadow:inset 0 -3px transparent;border:none;border-radius:0;}#workspaces button{padding:0 5px;background-color:transparent;}#workspaces button:hover{background:rgba(0,0,0,0.2);box-shadow:inset 0 -3px #ffffff;}#workspaces button.focused, #workspaces button.active{background-color:#64727d;box-shadow:inset 0 -3px #ffffff;}#workspaces button.urgent{background-color:#eb4d4b;}#window, #workspaces{margin:0 4px;}.modules-left widget:first-child #workspaces{margin-left:0;}#clock, #battery, #cpu, #memory, #disk, #temperature, #backlight, #network, #pulseaudio, #wireplumber, #custom-media, #tray, #mode, #idle_inhibitor, #scratchpad, #power-profiles-daemon, #mpd{padding:0 10px;}#custom-media{min-width:100px;}#language{padding:0 5px;margin:0 5px;min-width:16px;}#keyboard-state{margin:0 5px;min-width:16px;}#keyboard-state label{padding:0 5px;}/* 右侧模块左右各留 5px避免默认内边距叠加成大空隙。 */window#waybar .modules-right widget .module{padding:0 5px;margin:0;}/* 所有右侧模块及其状态都透出栏背景取消色块和变色动画。 */.modules-right, .modules-right *{background-color:transparent;background-image:none;color:#ffffff;box-shadow:none;animation:none;}加载最新的配置pkill-USR2-xwaybar解决gdm无法默认启动Hyprland的问题archlinux 我使用gdm的。通常情况下会记住最后一次启动的桌面环境的比如我用 Hyprland 下次开机应该会自动选择这项目的但是实际上下次会变成GNOME请问有办法解决这样的问题吗AI给我的解决办法sudonvim /var/lib/AccountsService/users/itkey修改之前的值如下[User]SessionhyprlandSessionTypex11Icon/home/itkey/.faceSystemAccountfalse这里的SessionTypex11明显是错误的把它修改成SessionTypewayland重启电脑解决问题。按键绑定窗口全屏窗口全屏是我常用的在默认的配置中并没有于是我加了一下。-- 窗口全屏hl.bind(mainMod.. F,hl.dsp.window.fullscreen())这里有个体验不错的修改配置文件后立即生效不用像awesome 要重新加载配置。浏览器-- Microsoft Edgehl.bind(mainMod.. B,hl.dsp.exec_cmd(/opt/microsoft/msedge/microsoft-edge))IDEA 2026显示不清楚我使用的IntelliJ IDEA 2026.2.0.1版本在Hyprland 显示比较模糊看起来有颗粒感就像小图片强行放大显示的那种感觉有没有什么优化办法呢这个问题就是当前让我放弃使用Hyprland的问题因为我当前用的是IDEA2021好像没有原生支持Wayland没解决成功现在用的是新版本又有AI。这次应该能解决了。测试hyprctl monitors重点看scale: 1.50说明屏幕是有缩放的。执行hyprctl clients找到 IntelliJ IDEA看看xwayland: 1解决办法最推荐让 IDEA 原生跑 WaylandIDEA 中打开Help → Edit Custom VM Options增加一行如果已经存在则修改-Dawt.toolkit.nameWLToolkit这下就非常清晰了。屏幕DPI设置我的显示器一个是笔记本内置显示屏别一个是外接4K显示器。-- 笔记本内置显示屏hl.monitor({outputeDP-1,modepreferred,positionauto,scale1.5,})-- 外接显示器hl.monitor({outputHDMI-A-1,modepreferred,positionauto,scale2,})微信显示模糊类似上面的IDEA微信默认显示也很模糊经检查微信 xwayland: 1也就是说微信现在是 X11 → XWayland → Hyprland。如果你的 4K 显示器还是 scale 1.5或你后来改成了 1.75Hyprland 会再对这个 XWayland 窗口缩放所以就容易出现你说的“低分辨率图片被放大”的感觉。Hyprland 官方也明确说明 XWayland 在 HiDPI 缩放下会出现 pixelated / blurry。解决思路让Hyprland 不自动缩放微信 。让微信自己进行缩放让Hyprland 不自动缩放微信~/.config/hypr/hyprland.luahl.config({xwayland{force_zero_scalingtrue,},})这时就会发现微信不模糊了但是显示的很小。其实这一步我觉得很好了微信小一些别人还看不清楚我在聊什么呢。让微信自身缩放命令行直接启动QT_SCALE_FACTOR1.5wechat就可以实现自身缩放1.5了而且这次不在模糊了。直接修改启动图标nvim /usr/share/applications/wechat.desktop#Exec/opt/wechat/wechat %UExecQT_SCALE_FACTOR1.5/opt/wechat/wechat %U这样启动微信就默认缩放啦。lua lsp优化我用LazyVim 编辑/home/itkey/.config/hypr/hyprland.lua 文件一直会显示● Undefined globalhl. 有没有什么优化办法可以优化而且这是Lua LSPlua-language-server不知道hl是 Hyprland 注入的全局变量并不是你的配置有错。Hyprland 官方专门提供了 Lua stubs推荐让 LSP 加载它。([Hypr Land 维基][1])推荐做法在 Hyprland 配置目录创建nvim ~/.config/hypr/.luarc.json写入{workspace:{library:[/usr/share/hypr/stubs]},diagnostics:{globals:[hl]}}然后重新打开nvim ~/.config/hypr/hyprland.lua这样通常会同时解决两个问题Undefined global hl消失LazyVim/Lua LSP 能知道hl的 API获得更好的自动补全、参数提示和类型提示Hyprland 官方就是这样建议配置 Lua LSP 的。([Hypr Land 维基][1])配置文件拆分根据官方文档把配置文件拆成了多个小文件方便分类管理。-- Hyprland 配置入口按顺序加载各模块。-- 官方文档https://wiki.hypr.land/Configuring/Start/#using-multiple-configuration-files-- 常用程序在 config/programs.lua 中设置由快捷键模块引用。require(config.monitors)-- 显示器与缩放require(config.autostart)-- 开机启动require(config.environment)-- 环境变量require(config.permissions)-- 权限设置示例require(config.appearance)-- 窗口外观与 XWayland 缩放require(config.animations)-- 动画与曲线require(config.layouts)-- 平铺布局require(config.misc)-- 壁纸与杂项require(config.input)-- 键盘、鼠标、触控板与手势require(config.keybinds)-- 快捷键require(config.rules)-- 窗口、工作区与图层规则├── config │ ├── animations.lua │ ├── appearance.lua │ ├── autostart.lua │ ├── environment.lua │ ├── input.lua │ ├── keybinds.lua │ ├── layouts.lua │ ├── misc.lua │ ├── monitors.lua │ ├── permissions.lua │ ├── programs.lua │ └── rules.lua └── hyprland.lua这些是我让AI帮我拆分的。我的提示词如下请帮我把配置文件按官方文档的方法拆分一下。 Using Multiple Configuration Files Splitting hyprland’s configuration across multiple files is an easier way of managing the configuration. Tosourceor reference other files we use lua’s require function. You can refer to the files using relative paths from the location of.Example:hyprland.lua -- refers to$XDG_CONFIG_HOME/hypr/awesomeconf/keybinds.lua require(awesomeconf/keybinds)-- refers to$XDG_CONFIG_HOME/hypr/awesomeconf/animation.lua require(awesomeconf.animation)You can use either or as a directory separator. The separator is UNIX specific whilst the separator is generic././. You can also use wildcards or absolute paths: require(./stuff/*)require(/usr/share/among/us.lua)锁屏在 Hyprland 里推荐用官方的hyprlock锁屏。它就是 Hyprland 配套的 GPU 加速锁屏程序。([Hypr Land 维基][1])先安装sudopacman-Shyprlock然后创建配置文件mkdir-p~/.config/hypr nvim ~/.config/hypr/hyprlock.conf最简单可以先写background { monitor color rgba(30, 30, 30, 1.0) } input-field { monitor size 300, 50 position 0, 0 }现在新版hyprlock如果找不到配置文件会直接退出而不会锁屏所以这个文件需要存在。([Hypr Land 维基][1])然后直接测试hyprlock输入你的 Linux 用户密码即可解锁。给你绑定SUPER L你现在用的是hyprland.lua直接加入hl.bind(SUPER L,hl.dsp.exec_cmd(hyprlock))设置默认工作空间因为上班我主要用外接的4K显示器笔记本自带的屏幕我只是用来辅助。默认配置笔记本自带的屏幕会占用1用起来会不顺手。-- 笔记本内屏默认7hl.workspace_rule({workspace7,monitoreDP-1,defaulttrue,persistenttrue,})-- 外接显示屏默认为1hl.workspace_rule({workspace1,monitorHDMI-A-1,defaulttrue,persistenttrue,})动态壁纸yay-Smpvpapermpvpaper-ono-audio loop*/home/itkey/.config/wallpaper/【哲风壁纸】卡通-水面-治愈_2850x1604.mp4如果只在外接显示器上显示则mpvpaper-ono-audio loopHDMI-A-1/home/itkey/.config/wallpaper/【哲风壁纸】人物剪影-开阔-旷野.mp4好看是好看但是CPU占用明显更高。所以我还是停用了。参考https://wiki.hypr.land/useful-utilities/wallpapers/微信截图-- 微信截图将 AltA 转发给微信窗口hl.bind(ALT A,hl.dsp.pass({windowclass:^(wechat)$}))微信截图基本够用了我这里配置一下。但是我感觉用起来没有X11中那么流畅必须等一会儿才会显示出来截图的框。有时还不灵必须点一下微信窗口的的截图。然后又灵了。Satty 截图sudopacman-Ssatty配置hl.bind(Print, hl.dsp.exec_cmd(grim - | satty -f - --copy-command wl-copy -o ~/Pictures/Screenshots/%Y%m%d_%H%M%S.png))用起来操作逻辑与平时用的截图软件不一样它是把整个屏幕图片直接截图下来然后在修改。感觉像是图片编辑软件一样。至少稳定不像微信截图那样时好时坏的。通知字体过大的问题• Edited ~/.config/dunst/dunstrc (2 -6)23-# 修改字体4-fontMonospace363# 通知字号使用 11pt显示器缩放由 Dunst 自动处理。4fontMonospace11自动熄屏sudopacman-Shypridle~/.config/hypr/hypridle.conf内容如下# 空闲 10 秒后关闭显示器检测到键盘或鼠标活动后自动恢复。# 这里只关闭屏幕不自动锁屏或挂起系统。listener{timeout10on-timeouthyprctl dispatchhl.dsp.dpms({ action disable })on-resumehyprctl dispatchhl.dsp.dpms({ action enable })}开机启动在加入hl.exec_cmd(systemctl --user start hypridle.service)实测有效。Fcitx_5_on_Wayland提示hypyland 桌面启动弹出通知Wayland 诊断\n检测到设置了 GTK_IM_MODULE并且 Wayland 输入法前端可以正常工作。推荐取消设置 GTK_IM_MODULE 以使用 Wayland 输入法前端。\n更多细节请参见 https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland请帮我看一下是什么问题如何解决• 这是 Fcitx 5 的配置提醒不是 Hyprland 故障Wayland 输入法前端已经正常工作但全局设置的 GTK_IM_MODULEfcitx 强制 GTK 应用使用 Fcitx 模块因此启动时会提示。我检查了你的配置发现两处都设置了它/etc/environment:7~/.config/environment.d/fcitx5.conf:1 (/home/itkey/.config/environment.d/fcitx5.conf:1)解决方法将这两个文件中的 GTK_IM_MODULEfcitx 删除或在行首加 # 注释。两处都要处理。保留 QT_IM_MODULEfcitx、XMODIFIERSimfcitx 等其他配置。保存后重启电脑让桌面和应用重新加载环境变量。然后我还做了以下操作GTK_IM_MODULE在理想的情况下你应该在 X11 下运行的 GTK 程序用 im-module而在纯 Wayland 程序中用 GTK 的 text-input-v3 支持。其方法是不要设置 GTK_IM_MODULE 环境变量对于 Gtk2向 ~/.gtkrc-2.0 添加如下内容gtk-im-modulefcitx对于 Gtk3向 ~/.config/gtk-3.0/settings.ini 添加如下内容[Settings]gtk-im-modulefcitx对于 Gtk4。向 ~/.config/gtk-4.0/settings.ini 添加如下内容[Settings]gtk-im-modulefcitx
返回列表