跳转至

Ubuntu 24.04 配置 Hyprland 桌面

Before Everything

笔者的科研需求导致不能像 Arch User 一样, 天天踩脚踏板滚动更新, 因此只能使用最稳定的ubuntu

但是ubuntu GNOME的审美实在难评...

因此采用的配置方式是: Ubuntu 24.04LTS + Hyprland 桌面管理

笔者的配置完全基于国光的 Ubuntu Hyprland 桌面优化记录进行, 向大佬致敬!

因此, 本文并不是对参考文章的“复读机”, 而是根据不同的需求, 提出了更多的解决方式

入门的建议:

  1. 先看国光的 Ubuntu Hyprland 桌面优化记录, 进行基础配置
  2. 再看本文, 进行更多高度客制化的配置
    1. 显示器问题
    2. CLI连网问题
    3. Nvidia驱动带来的问题

Hyprland Installation

本次使用的 https://github.com/JaKooLit/Ubuntu-Hyprland 项目来辅助我们一键安装, 亲测非常非常方便, 后面总结的一堆配置文件/快捷键也都是基于这个框架下的. 因此, 车速很快, 要么全部跟上全文; 要么别跟, 完全自定义 :)

Bash
1
2
3
4
5
6
7
# 下载
git clone --depth=1 -b 24.10 https://github.com/JaKooLit/Ubuntu-Hyprland.git ~/Ubuntu-Hyprland-24.10
cd ~/Ubuntu-Hyprland-24.10
chmod +x install.sh
# 执行安装脚本
# PS: 执行脚本不需要使用 sudo 来执行, 直接普通用户直接执行即可
./install.sh

后续就是一系列 yes / no 的客制化选项了, 建议严格跟着这份教程走: 国光的 Ubuntu Hyprland 桌面优化记录


快捷指令汇总 (无它, 唯手熟尔)

常用快捷指令汇总:

指令 作用
reboot 重启电脑
poweroff 关机
nmcli device wifi connect "WIFI_NAME" password "PSWD" 连接无线网
upower -e 查看所有电源设备
upower -i DEVICE_NAME 查看电源电量
hyprctl reload 重新加载hyprland桌面
waybar & 加载出来一个waybar菜单栏 (连招会加载多个, 因此一般先 killwaybar &)
sudo dpkg -i [NAME].deb 系统软件安装

常用配置文件汇总:

配置文件 作用
~/.config/hypr/UserConfigs/UserKeybinds.conf 配置快捷键
~/.config/hypr/UserConfigs/Startup_Apps.conf 配置启动项
~/.config/hypr/hyprland.conf hyprland配置“中枢”, 所有“子配置”的集中地点
/usr/share/applications/NAME.desktop 桌面快捷方式的定义配置

常用快捷键汇总:

(1) 窗口类

快捷键 功能描述
Esc 关闭当前 App
Super + Q 关闭活跃的窗口
Super + Shift + Q Kill 掉活跃的窗口
Super + Shift + F 窗口全屏
Super + Shift + 数字 将当前窗口移动到对应的工作区
Super + Alt + B 更换 Waybar 布局
Super + Ctrl + B 更换 Waybar 样式
Super + Shift + S / PrtSc 区域截图

(2) 启动器与文件

快捷键 功能描述
Super + 回车 打开 Kitty 终端
Super + D 打开 App 启动器 (rofi/wofi)
Super + S 打开 Google 搜索 (上端waybar)
Super + W 打开 壁纸选择器

(3) 系统工具

快捷键 功能描述
Super + H 打开快捷键帮助页面
Super + Shift + N 打开通知中心
Super + Alt + E 打开 rofi 表情包
Super + Alt + V 剪贴板管理 (历史记录)
Ctrl + Alt + P 打开电源窗口 (wlogout)

在终端里连网

使用 nmcli, 这是一个非常强大的linux下的CLI网络管理工具

一般网络: 输入密码连接即可

(1) 确保 NetworkManager 正常工作

Bash
1
2
3
4
systemctl status NetworkManager
# 如果是 active那就ok; 反之需要开启
sudo systemctl start NetworkManager
sudo systemcrl enable NetworkManager

alt text

(2) 检查网络设备 [网口]

Bash
1
nmcli device

alt text

(3) 扫描所有可用的 wifi

Bash
1
nmcli device wifi list

alt text

(4) 连接到wifi

  • SSID: 网络名称
  • 密码: 无需多言

注意这两个都需要用 " 包裹起来

Bash
1
nmcli device wifi connect "WIFI_NAME" password "PSWD"

(5) 检查当前连接情况

Bash
1
nmcli connection show

(6) 断开网络连接

注意这里是“连接级”的断开, 而不是“网口级”的断开

二者的区别在于,“连接级断开”不会影响网口本身, 如果此时有其他可用的、更高优先级的自动连接, NetManager可能会立即尝试连接到那个网络上

Bash
1
nmcli connection down "WIFI_NAME"

alt text

特殊内网: 需要认证

这部分内容, 很适用于在校园网/实验室内网/机房内网等需要认证的场景

笔者以在校园网 XJTU_STU 的步骤来演示:

  1. 像上述步骤一样, 正常连网
  2. 在浏览器里输入网关URL, 进行身份认证
    1. 学号
    2. 密码

(1) 正常连网

Bash
1
2
3
4
# 查看所有可用网络
nmcli device wifi list
# 连接网络
nmcli device wifi connect "WIFI_NAME"

alt text

alt text

(2) 浏览器身份认证

在进行完上述步骤后, 在浏览器里输入 10.6.18.2 (在网管群里了解的)

alt text

连接即可上网:

alt text

外接显示器

ee29addd52b7734123dae0b9ebc9fd31 众所周知, 给 hyprland 外接显示器会遇见各种各样的问题, 比如: 画面缩放 / 分辨率 / 位置 ...

它可不像 ubuntu GNOME / MacOS 里, 在settings里, 自由"对齐"两个显示框的位置

在 hyprland 里, 需要自行修改monitor配置文件, 下面我们展开!

最基础配置

(1) 识别你的显示器名称

Bash
1
hyprctl monitors

alt text

记住相应显示屏的名称, 比如我这里:

  • 电脑本身: eDP-1
  • 外接显示器: DP-3

(2) 编辑 hyprland.conf 配置文件

Bash
1
vim ~/.config/hypr/hyprland.conf

在里面新增相应的内容 (按需求加入), 具体格式如下文:

Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# ---------------------------------------------------
# 显示器配置 (Monitor Configuration) - 上下布局
# ---------------------------------------------------
# 语法: monitor = <名称>, <分辨率@刷新率>, <位置>, <缩放>

# 笔记本内置屏幕 (eDP-1)
# 位于原点 (0x0)
monitor = eDP-1, 2560x1600@120, 0x0, 1

# 外接 4K 显示器 (DP-1)
# 注意, 采用 hub 之后, 自动改名成 DP-3 了
# 位于笔记本正上方 (y 坐标为负)
# 分辨率: 2560x1440 @ 60Hz
# 位置: 0x-1440
monitor = DP-3, 2560x1440@60, 0x-1440, 1

上述配置完美对应笔者的桌面摆设需求:

alt text

在这之后, 重新加载 hyprland:

Bash
1
hyprctl reload

永不熄屏

鉴于壁纸实在太漂亮了, 很多时候开着屏幕, 啥也不干, 盯着壁纸也是一种极大的享受

同时, 也想给路过的同学装装b, "btw, I use hyprland"

因此, "永不熄屏" 成为笔者的需求

做法很简单:

(1) 来到 ~/.config/hypr/UserConfigs/Startup_Apps.conf

alt text

(2) 注释掉 exec-once = hypridle 这一行即可

alt text

现在, 你的电脑就“永不熄屏”了!

原理也特别简单:

hypridle 是 Hyprland 官方的空闲管理守护进程。它的工作就是检测电脑是否空闲,然后在一定时间后执行操作(比如熄屏或启动 hyprlock 锁屏)

要实现“永不熄屏”,只需要阻止它启动就行

多设备屏幕切换带来的wayland消失问题

由于笔者一个显示器要接入多台设备,因此采用了 kvm switching hub 来进行屏幕切换管理

alt text

花了笔者200大洋, 大出血, 心痛ing

但这会带来一个问题:

在屏幕“再次切回”hyprland设备时, 顶部和底部的菜单栏, 即: wayland. 就会消失不见了

就像这样:

alt text

这可甚是令人头疼啊 ...

由于这个问题过于常见且频繁(我的设备经常切换屏幕)

解决方式很简单, 把 waybar 重启即可, 但总感觉打开CLI进行这个步骤显得不那么优雅...

笔者的解决办法是: 将 kill -q waybar; waybar & 包装成一个键盘快捷键 SUPER shift B:

(0) 原理: 为什么采用 kill -q waybar; waybar & 即可

  • killall -q waybar:
    • -q (quiet) 会“安静地”杀掉所有名为 waybar 的进程
    • 如果 waybar 没在运行, 它也不会报错
  • ;: 无论上一条命令是否成功, 都执行下一条
  • waybar &: & 符号会在后台启动 waybar, 这样你就可以关闭终端, waybar 也会继续运行

(1) 写一个 waybar 重启 relaunch_waybar.sh 脚本

新建脚本:

Bash
1
vim ~/.config/hypr/scripts/relaunch_waybar.sh

写入内容:

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash

# This script is created by bxhu. 2025-1105
# We need a relaunch_waybar script
# so that after hub switching, the window waybar
# is still there.

# killall waybar process
killall -q waybar

# ensure all done
sleep 0.2

# reload waybar
waybar &

赋予执行权限:

Bash
1
chmod +x ~/.config/hypr/scripts/relaunch_waybar.sh

(2) 修改启动项, 更稳定

Bash
1
vim ~/.config/hypr/UserConfigs/Startup_Apps.conf

找到 exec-once = waybar 这一行, 修改成:

Text Only
1
2
# exec-once = waybar  <-- 注释掉此行
exec-once = $HOME/.config/hypr/scripts/relaunch_waybar.sh

alt text

(3) 当触发快捷键时, 会自动调用 relaunch_waybar.sh 脚本

打开"用户自定义按键"配置文件

Bash
1
vim ~/.config/hypr/UserConfigs/UserKeybinds.conf

在文件的末尾,添加一个新的绑定 SUPER + shift + b:

Bash
1
2
# reload waybar (after hub switching)
bind = $mainMod SHIFT, B, exec, $HOME/.config/hypr/scripts/relaunch_waybar.sh

alt text

刷新 hyprland 即可:

Bash
1
hyprctl reload

Nvidia带来的一系列问题

Google Chrome 闪退

本质: Nvidia 图形驱动错误

(1) 现象:

在super+d中,我可以打开其他app,比如clash、wechat

但是点击chrome就是没有反应。什么问题?

(2) 报错信息:

在终端中测试启动命令:

Bash
1
2
3
# 下面两个都试试
google-chrome-stable
google-chrome

报错:

Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
❯ google-chrome-stable                                               

[37862:37862:1105/173922.994204:ERROR:ui/ozone/platform/wayland/host/wayland_wp_image_description.cc:219] Incomplete image description info from compositor.

[37862:37862:1105/173922.994242:ERROR:ui/ozone/platform/wayland/host/wayland_wp_image_description.cc:219] Incomplete image description info from compositor.

libva error: /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so init failed

[37862:37862:1105/173923.187254:ERROR:ui/events/platform/wayland/wayland_event_watcher.cc:47] libwayland: wl_display#1: error 0: invalid object 63
[1105/173923.199336:ERROR:third_party/crashpad/crashpad/snapshot/elf/elf_dynamic_array_reader.h:64] tag not found

[1]    37862 trace trap (core dumped)  google-chrome-stable

问题锁定:

  • libva error: /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so init failed
  • trace trap (core dumped)

本质原因:

当前我们在使用 NVIDIA 显卡。当 Google Chrome 启动时,它会默认尝试在 Wayland 模式下运行,并试图初始化硬件视频加速(VA-API)

NVIDIA 驱动在 Wayland 下的硬件加速初始化失败了(init failed

这个失败非常严重,直接导致整个 Chrome 进程崩溃(core dumped

这是一个在 Wayland + NVIDIA + Chrome 组合下非常经典的问题. that's why we always say "fuck u nvidia"

(3) 解决方式: 使用XWayland兼容层

强制使用 X11 模式!

Bash
1
google-chrome-stable --ozone-platform=x11

Chrome 窗口现在应该能立即成功打开了

(4) 永久解决: 改变桌面图标的执行命令

我们总不能每次都从终端输入命令吧...

需要把这个 --ozone-platform=x11 标志永久地写入 Chrome 的快捷方式(.desktop 文件)中

Bash
1
2
3
4
5
# 复制系统的 .desktop 文件到你的本地配置
# 这可以确保你的修改不会在系统更新时被覆盖
cp /usr/share/applications/google-chrome.desktop ~/.local/share/applications/
# 打开"桌面快捷方式"配置文件
vim ~/.local/share/applications/google-chrome.desktop

添加 --ozone-platform=x11 标志:

在这个文件里,你需要找到所有以 Exec= 开头的行

通常有 3 行, 一个用于常规启动, 一个用于匿名模式, 一个用于带配置文件的启动

Text Only
1
2
3
4
5
6
7
...
Exec=google-chrome-stable %U
...
Exec=google-chrome-stable
...
Exec=google-chrome-stable --incognito
...

alt text

将它们每个都加上 X11 的标志:

Text Only
1
2
3
4
5
6
7
...
Exec=google-chrome-stable --ozone-platform=x11 %U
...
Exec=google-chrome-stable --ozone-platform=x11
...
Exec=google-chrome-stable --ozone-platform=x11 --incognito
...

QQMusic 打不开

本质: 沙盘应用, 与nvidia驱动产生冲突

(1) 现象:

Bash
1
[...:FATAL:gpu_data_manager_impl_private.cc(1034)] The display compositor is frequently crashing. Goodbye.

(2) 根本原因:

QQ Music 使用的 Electron 框架与 Wayland/XWayland 之间的兼容性问题

QQ Music (Linux版) 是一个 Electron 应用!

Electron 应用在 Wayland 环境下运行时,有两种模式:

  • XWayland 模式:通过 XWayland 兼容层运行
    • 这是最稳定、最推荐的方式
  • 原生 Wayland 模式:直接在 Wayland 上运行
    • 这需要较新版本的 Electron,且 QQ Music 目前没有适配好 (2025-1106)

Electron 的 GPU 进程默认运行在沙箱中, 以便与系统隔离. 在 Hyprland 这样的 Wayland 环境下,这个沙箱与你的(可能是 NVIDIA 或某些 Mesa)驱动程序、XWayland 之间产生了冲突!

(3) 解决方式

Bash
1
2
3
4
# 检查是否安装
sudo apt install xwayland
# 使用 x11 启动, 同时不要使用 GPU 沙箱
qqmusic --ozone-platform=x11 --disable-gpu-sandbox

(4) 永久解决: 改变桌面图标的执行命令

Bash
1
2
3
4
# 修正系统的 .desktop 文件
# 注意这里我们没有像上面那样cp后再改
# 原因是笔者太懒了... 正确步骤是"先cp再改" :))
vim /usr/share/applications/qqmusic.desktop

找到 Exec=qqmusic %U 这一行:

修正为 Exec=qqmusic --ozone-platform=x11 --disable-gpu-sandbox %U:

现在看起来就 everything works well 了 :))

alt text