ArchLinux + Hyprland 体验报告

起源于在 Bilibili 上看到的一个关于 Hyprland 使用的视频,作为 Windows、MacOS、Gnome 桌面用惯了的人,在看到视频中展示的新奇的 “平铺式” 桌面交互体验、大量的动画效果时,我对它产生了浓厚的兴趣,于是打算动手装一个 Hyprland 桌面。

Hyprland 官方声明其对 ArchLinux、NixOS 的支持最好。久仰 ArchLinux 大名,我对它的部署充满了好奇心(雾),所以又先安装了 ArchLinux。

My desktop

0x01. 在 Linux 下制作 PE 引导盘

使用 Ubuntu 系发行版的用户请自行在前面加 sudo。

插入 U 盘。

fdisk -l

查看 U 盘对应的设备名称:

Disk /dev/sdd:57.3 GiB,61530439680 字节,120176640 个扇区
Disk model:  SanDisk 3.2Gen1
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00000000 

注:磁盘标识符不应该为 0x00000000,我后来才发现我的 U 盘坏了…

找到挂载点:

df -h

卸载 U 盘:

umount /dev/<设备名称>

格式化 U 盘:

mkfs.fat /dev/<设备名称> -I

然后前往 ArchLinux 下载对应的 .ISO 镜像文件。

sudo dd if=archlinux-2024.08.01-x86_64.iso of=/dev/<设备名称>

写入 ISO 镜像文件到 U 盘,最终显示如下:

(base) soulter@806dev:~/下载$ sudo dd if=archlinux-2024.08.01-x86_64.iso of=/dev/sdf
记录了2310208+0 的读入
记录了2310208+0 的写出
1182826496字节(1.2 GB,1.1 GiB)已复制,231.334 s,5.1 MB/s

0x02. Boot ArchLinux

进入 BIOS,找到启动顺序设置,然后将 U 盘放在第一位即可。BIOS 会按照启动顺序依次检查每个设备是否有引导记录,如果有则启动。

0x03. Install ArchLinux

参考 ArchLinux Wiki。主要分为以下几步:

注:请参考 ArchLinux Wiki,本文仅提供一个简单的流程。

  1. 检查网络联通性(更新 pacman 源需要互联网接入)
    1. ping blog.lwl.lol
  2. 设置时间、时区
    1. timedatectl set-timezone Asia/Shanghai
  3. 分区(EFI、bootable)
    1. fdisk -l 查看要分区的 disk。
    2. 使用 fdisk /dev/sdX 进入 disk 来分区
    3. 分别创建两个分区:EFI, Linux FileSystem。EFI 分区大小 512M,Linux FileSystem 分区大小为剩余空间。
  4. 给创建好的两个分区挂载文件系统
    1. mkfs.fat -F32 /dev/sdX1 (EFI 分区)
    2. mkfs.ext4 /dev/sdX2 (Linux FileSystem 分区)
  5. pacman 源更新
    1. pacman -Syy 更新 pacman 源
    2. pacman -S reflector
  6. 使用 pacstrap 安装 ArchLinux。
    1. mount /dev/sdX2 /mnt 此步骤会将 Linux FileSystem 分区挂载到 /mnt 目录下。
    2. pacstrap /mnt base linux linux-firmware nano 此步骤会安装基本的 ArchLinux 系统。
  7. 使用 arch-chroot /mnt 进入到安装好 Arch 的 Disk。
    1. 更新 /etc/hostname, /etc/hosts 设置主机名和 hosts。
    2. 安装/启动 dhcp 服务。yay -S dhcpcd && systemctl enable dhcpcd
    3. passwd 设置密码
    4. 安装 Bootloader(GRUB)
      1. 在 non-UEFI 上和在 UEFI 设备上安装方式不同。
    5. grub-mkconfig -o /boot/grub/grub.cfg 生成 grub 配置文件。
  8. 拔掉 U 盘,reboot~

ArchLinux 默认是不带桌面环境的,因此重启之后你会发现只有一个 tty,如果想使用桌面环境,需要自行安装。

0x04. 安装和使用 Hyprland

提到了 Hyprland,就不得不提一下 Wayland。Wayland 是一个计算机图形显示协议,旨在替代 X 协议。由于使用 Wayland 协议的显示服务器也可作为混成窗口管理器,因此被称为混成器。Wayland 本身并不提供图形环境,因此还需要安装混成器。混成器有很多,大致可以分为平铺式和堆叠式两类。Hyprland 就是一个独立的使用 C++ 编写的平铺式 Wayland 混成器。

如果你想自己设计桌面,可以直接使用 yay 安装 hyprland。

yay -S hyprland

安装完成之后,输入 Hyprland 即可进入 hyprland 桌面。

注意:请不要使用 root 账户或者 sudo 启动 hyprland。否则,你需要加一个参数: --i-am-really-stupid

网络上有很多提供好的 hyprland 设计配置称为 hyprland dotfiles,你可以直接使用他们的配置。

一开始我打算自己设计桌面,但是惊讶地发现发现 hyprland 自由度是在太高了,以至于在安装成功之后打开的图形界面是黑屏——壁纸、状态栏等都需要自己安装相应的工具(hyprpaper, waybar 等等)。捣鼓了一会之后觉得太费时(最主要还是效果不好XD),所以最终我还是使用了 end-4/dots-hyprland 的配置。这也是文章一开始提到的 Bilibili 视频中使用的配置。

下面针对这个配置后的 ArchLinux + Hyprland 进行一些简单的个人体验。

0x05. PACMAN + YAY are all you need

ArchLinux 的自带软件包管理器是 pacman。事实证明,simple is the best。pacman 的本地数据库甚至只是包名的目录树,打包脚本也是 bash script。简单的包管理造就了方便的软件包生态。不管软件包来自官方 Arch 库还是用户自己创建,pacman 都能方便地管理。

ArchLinux 的 AUR(Arch User Repository)是一个非常强大的软件源,它是为用户而建、由用户主导的,每个人都可以往里面发自己创建的软件包。从这里就可以看出,AUR 的包生态是非常丰富的。大到常用的软件 VSCode、IDEA、QQ,小到纳西妲鼠标光标、i-use-arch-btw 编程语言,都可以在 AUR 中找到。

如果想搜索软件包,只需要在 https://aur.archlinux.org/ 搜索即可。或者 yay -Ssq <keyword>,也会列出相关的软件包。

可以说,要是在 ArchLinux 上找不到你想要的软件包,那么其他发行版上就更不可能有了。

这意味着,你可以直接以一行安装指令安装你想要的软件,而不需要查看软件包官网上冗长的安装和编译教程(Debian!),让你尝到先苦后甜的滋味 :) 。

需要帮助?大多数软件包都会提供一个 ArchWiki 页面,请自己查阅 ArchWiki,或者在 Arch Community 上提问。

0x06. No 鼠标 Anymore!

“平铺式”,顾名思义,就是将窗口平铺在桌面上而不重叠,这种方式的好处是可以最大化地利用屏幕空间,在需要同时使用多个程序的时候非常方便,免去了鼠标频繁移动到任务栏和点击的麻烦。

Hyprland 中,触发指令通常是 SUPER 键 + XXX 的形式,例如 SUPER + T 打开终端。这里的 SUPER 键默认是 Windows 徽标键。当然了,这是可以配置的。

使用 SUPER + Ctrl + / 会打开类似 MacOS 的聚焦搜索,你可以通过键盘输入来搜索程序,然后回车打开。打开的窗口的位置取决于光标的位置。

在 Hyprland 中,光标下的窗口会被自动激活,也就是说,当鼠标移动到某个窗口上时,这个窗口就会被激活,而不需要点击。是不是这样还不够方便?你可以直接使用 SUPER + 方向键 将光标直接移动到相邻的窗口中央。

如何调整窗口呢?当鼠标移动到一个窗口内时,使用 SUPER+; 即可上下/左右调整该窗口的尺寸,使用 SUPER+Shift+方向键 可以将窗口和相邻的窗口交换位置。

悬浮一个窗口也是受支持的。只需要按下 SUPER + Alt + SPACE 即可。你可以通过鼠标拖动窗口来调整窗口的大小,按下 SUPER 和鼠标左键可以拖动窗口。

此外,和 Windows 和 MacOS 类似,Hyprland 也支持多个桌面,可以通过 SUPER + 1/2/3/4/5/6/7/8/9 来切换。

这么多的快捷键使得鼠标的使用频率大大降低,右手可以更专注于键盘上。在一些场景下,比如码字+查资料,甚至可以完全不用鼠标来操作电脑。

对于我来说,我使用这台安装了 Hyprland 的电脑一般就是用来写写代码,浏览网页,因此这种设计非常适合我。

0x07. 高自由度的配置

Hyprland 和其他工具的配置文件都统一到了 ~/.config/ 目录下,并且可配置性非常强,可以很方便地个性化你的桌面。例如按键绑定、壁纸、圆角、窗口透明度、模糊效果、动画效果等等。

alt text

我们 btw 群体安装 Arch 的一大乐趣就是自己捣鼓桌面(也没人用它来做服务器吧),因此可以在网上看到各式各样的桌面样式。

Reddit: u/PahasaraDv

Reddit: u/infarni

Reddit: u/mbregg

0x08. TUI ❤️

把这个有点说成是 Hyprland 的特色似乎有点站不住脚,因为 TUI 只是一个和 GUI 相对的设计理念,基于它们的软件可以运行于任何桌面环境,但是我觉得 Hyprland 为 TUI 软件提供了一个很好的展示平台,极大提高了他们的使用频率。TUI 软件的界面一般只包含有效的文本信息(当然,一些协议像是 iterm2 协议也支持在终端中显示图像)而没有多余的装饰。对于那些对图形界面审美疲劳的人来说,TUI 软件是一个很好的选择。

我安装了 musicfox + ncmpcpp + mpd 来播放网易云音乐。musicfox 是基于 TUI 的第三方网易云音乐客户端,支持登录网易云账号、歌词显示、歌单播放。ncmpcpp 是一个 mpd 客户端,我主要用它显示音乐波形,mpd 是一个音乐播放器守护进程。简单配置之后,效果极其优雅 🤤。

还有很多 TUI 软件,比如 btop,一个类似 htop 的系统监视器,可以查看 CPU、内存、磁盘、网络等信息。

还有 neofetch (x)

0x09. 支持远程桌面

同 X 协议一样,Wayland 协议也支持众多远程桌面协议,如 VNC、RDP。我尝试了使用 wayvnc 来实现远程桌面。

首先安装 wayvnc

yay -S wayvnc

然后使用 hyprctl monitors 查看你的显示器信息,将 Monitor 后的 ID 记录下来。

然后新开一个 terminal,输入 wayvnc 0.0.0.0 5900 来启动 VNC 服务,此时 wayvnc 会堵塞当前 terminal。需要再新开一个 terminal,输入 wayvncctl output-set <Monitor ID> 0 来将 VNC 服务绑定到指定的显示器上。

Wayland 是支持多 monitor 的,如果你不想远程控制现有的桌面而想单开一个桌面,你可以创建一个无头 monitor:

hyprctl output create headless test

然后前往 hyprland 的 config 中设置这个 monitor 的分辨率、位置等信息,比如

monitor=test,1920x1080,auto,1

然后将 VNC 服务绑定到这个 monitor 上,再启动 VNC 服务即可。(顺序不能错)

0x0A. 缺点?

平铺式窗口布局确实有很多好处,但是这仅建立在你有一个大屏幕的基础上。如果屏幕太小,那么平铺式布局可能会显得有些拥挤。

此外,在我的使用过程中,发现在系统 Suspend 之后再重新唤醒,会导致花屏的情况,使得我不得不直接强行重启电脑,非常不方便。当然了,可以通过修改 .config/hypr/hypridle.conf 来禁用一段时间后 Suspend 的功能。

0x0B. 总结

i use arch btw.

这句话已经成为著名的 Linux 圈的梗了,甚至官方也在玩梗(x):https://wiki.archlinux.org/title/Frequently_asked_questions