Arch ? 没搞错吧!

其实在很多年前我就听闻了 Arch Linux 的大名,当时的我应该连 Emacs 都是初学,连一行 Elisp 代码都不会写呢。没记错的话当时应该是在看 Emacs 的教学视频,怎么写配置文件之类的,而 Arch Linux 这个罪恶的名字就出现在相关推荐中。

对 Arch 最初的印象还是从许多它有关的 memes 里产生的,我想跟我差不多的人不在少数。现在想想 Arch 有这么多的刻板印象和 memes 总体来说还是好事,否则许多用户可能都不会去了解这个操作系统。我的情况比较特殊,因为当时已经在折腾 Emacs 这个深坑了,所以即使知道有这么个 So Cool 的发行版,但还是按捺住想尝试的渴望。现在来看当时没去尝试的原因莫不如说是当时被 Emacs 搞得无心再去折腾其他东西了。

时隔多年(大约有4-5年了吧),在一个无聊的下午我又打开了 Arch Linux 的官方安装指南页面,安装了虚拟机平台 VMWare Workstation ,下载了 Arch 的最新安装镜像,开始了我的 Arch Linux 之旅。在虚拟机里的安装非常顺利,有了这一步的成功的经验之后,我深知已经无法停止我的脚步。紧接着我就开始了实体机上的安装。

本篇博客不是一个详尽的 Arch Linux 安装教程,因为这类教程已经太多了,甚至可以说已经过多了。本文只记录一些我踩过的坑,顺便谈谈我如何定制属于我自己的 Arch Linux 的。

BTW,如果你是一个 HIFI 音乐爱好者,或许这篇文章会对你有所启发。你可以直接跳到 对应的节

安装与踩坑记录

练习过程

对于新手来说,在用实体机安装 Arch Linux 之前最好在虚拟机上过一遍安装过程。这里我直接参考了 archlinux简明指南 的内容(下称“简明指南”),一步一步跟着做就能轻松完成基础操作系统和桌面环境的安装,在这里对这篇指南的作者们说声感谢。

我练习时用的是单系统,也就是模拟在实体机上只安装一个操作系统的情况,这是因为我想在之后实体机的安装中使用 Arch Linux 的 Live 环境来对磁盘进行格式化和分区,在安装完 Arch 之后再安装 Windows 11 。这与大多数人的需求可能不太一样,对于大多数人来说,一般是在已有一个 Windows 系统的前提下安装 Arch Linux 做双系统。这种情况下应当完全参照简明指南来安装。

实体机安装

如果你事先在虚拟机上过了一遍安装流程,那么实体机的安装应该不困难,这里只写一些注意事项(其实这些东西在简明指南中都有提及,这里重复一遍只是因为真的很重要):

  1. 确保你在 BIOS 中安装了 Secure Boot
  2. 确保 BIOS 的启动方式为 UEFI(这个我在虚拟机中被坑过一次)
  3. 确保有网络连接(有线或无线)

接着就可以按简明指南的步骤做了。安装过程中在硬盘分区的时候,我按事先的想法给 EFI 分了 512MB 的空间,因为之后还要再装 Windows 11 ,所以这个分区要比单系统大一些。对于 Swap 分区和 Arch 系统空间,我分别给了 24GB 和 512GB 。我电脑的内存为 40GB (没错,就是 “我的十月:修电脑、崩系统、灾祸与重建” 那篇文章里的笔记本电脑),按道理应该用 Swap 文件来代替 Swap 分区的,但因为看到简明指南中提到使用 Swap 文件在 Btrfs 分区中比较复杂,所以就没搞了。这台电脑我用一整块 1TB 的固态硬盘来安装双系统,这里给 Arch 分了更大的空间,因为我之后想把 Arch 做为主力操作系统,而 Windows 只在需要使用只能在 Windows 上运行的软件时才会启动一下。

这样的分区方式只是适合我,每个人在分区之前都要好好想一想制定一个最适合自己工作流的分区方案。

按简明指南的步骤应当已经能安装到桌面环境这一步,本文之后的内容也是在这一步之后发生的。

本节笔记(只做部分记录,完整安装过程参考指南)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看磁盘信息
lsblk
fdisk -l

# 清空磁盘上的分区表
parted /dev/yourdisk
mktable

# 重新分区
cfdisk /dev/yourdisk

# 格式化分区
mkfs.fat -F32 /dev/your_efi_partition
mkswap /dev/your_swap_partition
mkbtrfs -L yourLabel /dev/your_system_partition

# 创建子卷,先临时挂载到一个目录,再创建
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home

# 生成引导
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH

添加 Windows 11 组成双系统

在安装完 Arch 的桌面环境之后就可以先关闭电脑了。接着插入 Windows 11 的启动盘开始装 Windows ,安装时选择安装位置为上面安装 Arch 时留下来的空分区。按步骤安装完成 Windows 11 ,这个安装就很简单了。

因为安装完 Windows 后 EFI 分区会被 Windows 覆盖,所以要再插上 Arch 的启动盘,进 Live 环境修复启动分区。这里详细写一下修复步骤:

首先,挂载 Arch 的所有磁盘分区:

1
2
3
4
5
6
# 查看分区信息
lsblk # 或 fdisk -l
mount -t btrfs -o subvol=/@,compress=zstd /dev/sdxn /mnt
mount -t btrfs -o subvol=/@home,compress=zstd /dev/sdxn /mnt/home
mount /dev/sdxn /mnt/boot
swapon /dev/sdxn

然后切换系统环境:

1
arch-chroot /mnt

接着重新安装 Grub 到 EFI 分区:

1
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH

之后修改 grub 设置,允许 Windows 11 启动:

1
2
3
4
5
vim /etc/default/grub
# 添加一项 GRUB_DISABLE_OS_PROBER=false 后退出

# 生成 grub 配置
grub-mkconfig -o /boot/grub/grub.cfg

退出环境,重启:

1
2
3
exit
umount -R /mnt
reboot

之后你应该就能进入 grub 引导,并且能选择启动 Arch 还是启动 Windows 。

坑1:外接显示器没反应

这个问题出现在安装了 NVidia 显卡驱动之后的独显+集显的笔记本里。一个简单的解决方法就是使用 optimus-manager 把启动时默认的显卡设置为独显。 optimus-manager 的安装参考 简明教程里的这一段

坑2:休眠之后立马被唤醒

查看系统日志 sudo journalctl -b | grep sleep 后出现 System Power Management attempted without driver procfs suspend interface. 相关字样。

这个问题也是 NVidia 驱动的锅(万恶的 NVidia )。解决方法参考 这里 ,简单来说就是添加一个内核参数:

1
2
# 添加配置文件
sudo vim /etc/modprobe.d/nvidia.conf

在配置文件中加入这么一行:

1
options nvidia NVreg_PreserveVideoMemoryAllocations=0

然后重新生成镜像:

1
sudo mkinitcpio -P

重启之后问题得到了解决。

关于休眠相关的内容有点意思,具体参考简明指南的 休眠设置

坑3:使用基于 Electron 的应用时输入法 Fcitx5 巨慢无比

这个其实在简明教程中 提到过 ,解决的办法就是加启动参数。

以 linuxqq 为例,直接编辑它的启动方式:

1
sudo vim /usr/share/applications/qq.desktop

然后将 Exec 后面的启动命令改成:

1
Exec=linuxqq %U --enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime

注意如果这个文件里有不至一个 Exec 那么都需要修改。软件更新的时候新增的启动参数会消失,记得重新加回去。

坑4:在挂载的硬盘里无法使用 git 操作文件

首先简单写一下怎样挂载其他硬盘,按下面的步骤来就行了:

1
2
3
4
# 首先查看硬盘地址
sudo lsblk # 或 sudo fdisk -l
# 这里假定地址是 /dev/sda2,然后查看设备 ID
sudo blkid -d /dev/sda2 # 找到 UUID= 后面的一串编号

我这里编号是 9CB6BBD7B6BBAFDE ,有了这串编号后直接编辑分区表文件 fstab

1
sudo vim /etc/fstab

在最后添加一行:

1
UUID=9CB6BBD7B6BBAFDE   /mnt/data       ntfs-3g defaults      0 0

其中 ntfs-3g 表示这个分区采用的系统,因为我这个硬盘是与 Windows 11 共用的,所以使用了 NTFS 系统。如果你的硬盘是其他系统的,记得改成对应的系统名(比如 btrfs, ext4 等 )。 /mnt/data/ 是挂载到的目录,确保这个目录是存在的。

编辑完后重启电脑,进入 Dolphin 就能看见挂载的硬盘了。

在这个新硬盘上使用 git 提交的时候出错,原因是这个硬盘是以 root 的身份挂载的,而当前系统是普通用户。这时的解决方法是先查看当前用户的 uid 和 gid 。

1
id 你的用户名

我这里输出 uid=1000, gid=1000 。然后再次打开 fstab 将上面添加的那一行改成:

1
UUID=9CB6BBD7B6BBAFDE   /mnt/data       ntfs-3g defaults,uid=1000,gid=1000      0 0

重启后这块盘的所有者就成当前用户了,再使用 git 就不会出现问题。

当然最好是一开始添加分区项的时候就把 uid 和 gid 加上,免得重启两次电脑。

搭建一个 HIFI 听音系统

这一节已独立成篇,见 如何在 Arch 上播放 HIFI 音乐?

其他定制化

除了上面说的听音系统外,我个人 DIY 的成分就比较少了,不过也是有一些。这里就简单说说了。第一件事就是自定义了一下睡眠机制,编辑文件 /etc/systemd/sleep.conf ,定制了睡眠/休眠的时间:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[Sleep]
AllowSuspend=yes
AllowHibernation=yes
AllowSuspendThenHibernate=yes
AllowHybridSleep=yes
SuspendState=mem standby freeze
HibernateMode=platform shutdown
MemorySleepMode=s2idle deep
HibernateDelaySec=120min
HibernateOnACPower=yes
SuspendEstimationSec=60min

同时我还指定了鼠标和键盘能在睡眠期间唤醒电脑,方式与上面的 DAC 热拔插一致,都是在 /etc/udev/rules.d/ 下创建新规则。规则中检测到特定设备插入时就往相应的设备目录下 power/wakeup 写 enabled 。具体参考 StackExchange 上的回答。

此外,我还更换了主力的写代码编辑器,从 Visual Studio Code 换成了 Zed ,目前用下来体验不错。

Org 笔记工作流调整

作为 Emacser ,在新的系统上装 Emacs 是必然的。这次我决定不在这上面折腾太多,直接用 Doom Emacs + 少量自已定制的 Elisp 代码和 Package 。

原来的笔记全都使用 OneDrive 同步,我在 Arch 上也安装了 onedrive-abraunegg 。想不到 Linux 上也能方便地使用 OneDrive ,感恩开源作者。为了保证 Arch 上的 org 笔记与 OneDrive 上我决定要同步的笔记分开,我创建了两个笔记目录,并使用快捷键切换它们:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
;; doom's config.el
(setq org-directory "~/Documents/notes/org/")
(defun yuh/org-switch-directory ()
  "Switch org directory between Arch and OneDrive"
  (interactive)
  (if (equal org-directory "~/Documents/notes/org/")
      (progn
        (setq org-directory "~/OneDrive/note/org/")
        (message "Switched to OneDrive."))
    (progn
      (setq org-directory "~/Documents/notes/org/")
      (message "Switched to Arch."))))
(map! :leader
      :desc "Org Directory Switcher"
      "n d" #'yuh/org-switch-directory)

尾声

本来只打算浅浅分享一下 Arch Linux 新系统的体验,没想到洋洋洒洒写了五千多个字,甚至为了清晰不得不把其中构建音频系统的部分 提出来 。只要其中的一些内容能对读者有一丁点帮助,那就是我莫大的荣幸了。

同时,我还得感谢 Arch Linux ,帮助我度过一个个无聊的下午和晚上,同时让我获得了 DIY 的乐趣。顺便一提,原本在 Windows 上使用 FIIO KA11 播放音乐的时候由于驱动问题会时常卡顿,到了 Arch 上就完全没有了这种问题,而且还能避免系统的重采样,可能这就是 Arch 给我的见面礼吧。

总之,今后也会以它为主力系统。

Arch, please go easy with me.