我的 Arch Linux + Niri + Noctalia 安装

更新于 2026 年 5 月 26 日

我的环境:机械革命 S1 Pro,i5-8265u,NVIDIA MX250,双硬盘双系统

由于 Arch Linux 滚动更新,本指南有时效性,请注意本文修改日期。 见 官方的安装指南 。 当下, Archinstall 已经预装在安装镜像中了,但我不太喜欢预定配置,所以手动安装。 我的环境是 UEFI 启动的 amd64 系统,能装 Windows 10 的电脑基本都能满足这一点。 详见 Verify the boot mode

安装前

  1. 下载安装镜像 ,用 Ventory 把没有重要数据的小 U 盘制作成安装盘,然后把安装镜像复制进 U 盘的存储空间。 Linux 下烧录教程请移步 Linux 下制作 U 盘安装镜像
  2. 关闭 BIOS 中的安全启动
  3. 关闭 Windows 的快速启动功能(忘了是否有影响了,不过关了也放心)
💡 提示

最好在虚拟机里尝试安装一次再操作物理机,稳妥永不过时。

安装镜像的系统中自带 vimnano 等文本编辑器,后者用法简单,百度一下就会了。

进入 U 盘的安装系统

U 盘插入电脑后开机,按功能键进入启动菜单(Boot Menu),如 F7F12 等(不同电脑牌子或主板不同),选择 U 盘对应启动项。不清楚就百度搜索自己的电脑型号如何进入启动菜单。

如果字太小,setfont ter-132b 临时换个大的终端字体。

联网

网线连接一般自动配置好了。 如果从 WiFi 连接,用 iwctl 。 然后 ping baidu.com 测试联网,如果大约每秒都出现一行新结果,表明网络畅通。

磁盘分区与格式化

⚠️ 警告

千万不要装错硬盘! 防止不小心格式化其他盘,本文以 sdX 代称。

使用 lsblk 命令得知硬盘的「名字」。

硬盘分区的「名字」举例:

  • /dev/sdc3:硬盘 /dev/sdc 上的第 3 个分区
  • /dev/nvme2n5p3:硬盘 /dev/nvme2n5 上的第 3 个分区
我的方案建议大小作用文件系统分区挂载点位
1 GiB1 GiB引导分区fat32/dev/sdX1/efi
剩余所有空间剩余所有空间根分区btrfs/dev/sdX2/

使用 fdisk /dev/sdX 命令进入交互式分区。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
g          # 创建 GPT 分区表
n          # 新建分区 1
[Enter]    # 默认分区号
[Enter]    # 默认起始扇区
+1G        # 大小 1 GiB
t          # 修改类型
1          # 选择分区 1(或直接回车)
1          # 设为 EFI System 分区
n          # 新建分区 2
[Enter]    # 默认分区号
[Enter]    # 默认起始扇区
[Enter]    # 默认剩余全部空间
t          # 修改类型
2          # 选择分区 2
23         # 设为 Linux root (x86-64) 分区
w          # 写入并退出

然后用 fdisk -l /dev/sdX 检查分区结果。


格式化分区:

1
2
mkfs.fat -F 32 /dev/sdX1
mkfs.btrfs -f /dev/sdX2

创建 Btrfs 子卷:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
mount /dev/sdX2 /mnt

# @ 作为未来系统的根
btrfs subvolume create /mnt/@

# @home 承载用户数据
btrfs subvolume create /mnt/@home

# @log 存放日志,做快照时排除它,避免回滚丢失关键日志
btrfs subvolume create /mnt/@log

# @cache 中储存大多数是 var/cache/pacman/pkg 存放 pacman 下载的包缓存,做快照时排除它,节省空间
btrfs subvolume create /mnt/@cache

# @tmp 存放重启也能保留的临时文件,做快照时排除它,节省空间
btrfs subvolume create /mnt/@cache

# @snapshots 专门存放快照,避免嵌套在 @ 中导致快照混乱
btrfs subvolume create /mnt/@snapshots

umount /mnt

现在按照设计好的布局挂载,特别注意挂载选项 noatime,compress=zstd 对性能和空间非常有益。

⚠️ 警告

如果需要预留给虚拟机用的子卷,记得在参数中关闭 CoW

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 挂载根子卷
mount -o noatime,compress=zstd,subvol=@ /dev/sdX2 /mnt

# 创建并挂载其他目录
mkdir -p /mnt/{efi,home,var/log,var/cache,var/tmp,.snapshots}

# 挂载 EFI 分区
mount /dev/sdX1 /mnt/efi

# 挂载其余子卷
mount -o noatime,compress=zstd,subvol=@home /dev/sdX2 /mnt/home
mount -o noatime,compress=zstd,subvol=@log /dev/sdX2 /mnt/var/log
mount -o noatime,compress=zstd,subvol=@cache /dev/sdX2 /mnt/var/cache
mount -o noatime,compress=zstd,subvol=@tmp /dev/sdX2 /mnt/var/tmp
mount -o noatime,compress=zstd,subvol=@snapshots /dev/sdX2 /mnt/.snapshots

安装基础系统与配置

Reflector 设置镜像源:

1
reflector --country China --latest 20 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

如果是 AMD CPU 把 intel-ucode 换成 amd-ucode

1
2
3
4
5
pacstrap -K /mnt base base-devel linux linux-firmware btrfs-progs neovim \
    networkmanager grub efibootmgr intel-ucode \
    zsh grml-zsh-config zsh-autosuggestions zsh-completions zsh-syntax-highlighting
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt

此时将进入硬盘内的系统。


时区与本地化:

1
2
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc

编辑 /etc/locale.gen,找到 en_US.UTF-8 UTF-8zh_CN.UTF-8 UTF-8,取消行首注释。

1
2
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf

网络与用户:

1
2
3
4
5
6
7
8
9
# 给你的电脑起个名
echo "电脑名" > /etc/hostname

# 设置 root 密码
passwd

# 添加普通用户,我这里指定使用 zsh 作为默认终端
useradd -m -G wheel -s /bin/zsh 用户名
passwd 用户名

赋予 wheel 用户组管理员权限,nvim 换成你用的编辑器名字。

1
EDITOR=nvim visudo

找到 # %wheel ALL=(ALL:ALL) ALL,删掉开头的 #,保存退出。 有几行比较像,别找错了。


配置 GRUB

如果需要多系统引导,安装 os-prober 并修改 /etc/default/grub,删除下面这行开头的 #

1
# GRUB_DISABLE_OS_PROBER=false
1
2
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=Arch
grub-mkconfig -o /boot/grub/grub.cfg

系统优化

配置 Zram 。 比起传统的硬盘交换空间,Zram 在内存中动态压缩,速度极快。

1
pacman -S zram-generator

创建配置文件 /etc/systemd/zram-generator.conf,内容如下:

1
2
3
[zram0]
zram-size = min(ram / 2, 8192)  # 取内存一半或 8 GiB 的较小值
compression-algorithm = zstd

下次重启后会自动生效。


固态硬盘开启 TRIM 定时器 ,机械硬盘请忽略。

1
systemctl enable fstrim.timer

Intel CPU 安装 Thermald ,防止过热降频。

1
2
pacman -S thermald
systemctl enable thermald

笔记本电脑安装 TLP ,节省电量。 屏蔽 systemd-rfkill.service 服务和 systemd-rfkill.socket 套接字避免冲突。

1
2
3
pacman -S tlp tlp-rdw
systemctl enable tlp.service
systemctl mask systemd-rfkill.service systemd-rfkill.socket

Pacman 与包管理优化

虽然设置了软件包缓存 @pkg 子卷,但它不会自动清理。 用以下命令设置定时自动清理。

1
2
sudo pacman -S pacman-contrib
sudo systemctl enable paccache.timer

还可以用钩子在安装的时候自动清理,详细配置参考 Pacman#清理包缓存


内核参数微调。减少磁盘写入、提升网络和内存响应。

创建 /etc/sysctl.d/99-custom.conf 添加以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 减少交换倾向,尽量多用物理内存,和 Zram 配合
vm.swappiness=80

# 在内存压力大时,更激进地使用 Zram
vm.watermark_boost_factor=0
vm.watermark_scale_factor=125

# 网络吞吐量优化
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

# 减少文件系统日志写入,提升性能,尤其是 Btrfs
vm.dirty_ratio=10
vm.dirty_background_ratio=5

(可选) Powertop 主要用来查看哪些设备耗电高,并不会在后台持续修改系统设置。

1
pacman -S powertop
  • TLPThermald 可以共存:它们的职责不同。一个主攻省电策略,一个主防 CPU 过热,一起用没有问题。
  • TLPPowertop 存在冲突风险:它们本身不冲突,但功能会「打架」。

Powertop 有一个 --auto-tune 功能,运行后会立刻将许多内核参数调到最省电状态。 如果此时 TLP 也在运行,TLP 会按自己的配置文件把设置改回来,两者会反复覆盖相同的设置,导致行为不可预测。

如果日常使用 TLP,就不要使用 powertop --auto-tune 来自动优化,更不要把它设成开机自启。 只把 Powertop 当诊断工具用就好。 用 TLP 负责日常的自动化省电,用 Thermald 负责控制温度。 Powertop 只在你需要排查耗电原因时手动运行。


CTRL + D 退出 chroot 环境并重启

1
2
umount -R /mnt
reboot

重启后安装其他软件

配置 Arch Linux CN 仓库和 AUR

参考 清华源帮助/etc/pacman.conf 末尾加上

1
2
[archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch

之后安装 archlinuxcn-keyring 包导入 GPG key。

1
sudo pacman -Sy archlinuxcn-keyring

AUR helper 推荐 paru

1
sudo pacman -Sy paru

平时编译 AUR 包时可以多线程,添加环境变量:MAKEFLAGS="-j$(nproc)",这样 makepkg 会自动用满所有核心。


显卡驱动(Intel + NVIDIA)。 NVIDIA 已经停止支持我的 MX250 了,因此我安装另一个版本。 如果你的 NVIDIA 显卡还在支持范围,直接安装 nvidia

1
2
paru -S mesa vulkan-intel intel-media-driver libva-utils \
  linux-headers nvidia-580xx-dkms nvidia-prime

以后可以用 prime-run 程序名 来指定用 N 卡运行。 nvidia-580xx-dkms 将以 DKMS 形式安装,需要 linux-headers


  • ly:比较简单的登录管理器,也可以用 sddm 等好看的代替
  • niri: 可滚动平铺的 Wayland 合成器
    • swaybg:壁纸工具,不止用于 Sway
    • xwayland-satellite:在 XWayland 运行 X11 程序
    • xdg-desktop-portal-gtkXDG 桌面后端(应该可以随着安装依赖直接装上)
    • xdg-desktop-portal-gnomeNiri 用它截屏(应该也可以跟着安装依赖装上)
  • noctalia-shell:完整的桌面 shell,代替 waybarfuzzelmako
    • cliphist:剪切板
    • wlsunset:夜间模式支持
    • python-pywalfox:给 Firefox 提供主题同步
  • foot:比较简单的 Wayland 终端模拟器,也可以用 kitty
  • Yazi:终端文件管理器,更习惯 GUI 可以用 dolphin
    • fd:文件搜索
    • resvg:SVG 预览
    • 7zip:压缩包支持
  • fcitx5-rimerime-ice-pinyin-git雾凇拼音,基于 Rime 输入法,Fcitx5 框架
    • fcitx5-nord:一个主题
  • npmlazyvim 的部分插件需要
  • ntfs-3g:用于支持 NTFS 文件系统
  • terminus-font:终端字体,在没加载图形界面时可用,如运行 setfont ter-132b
  • noto-fonts-cjk:Noto 中文字体
  • noto-fonts-emoji:Noto emoji 字体
  • man-dbman-pages-zh_cn:系统帮助文档
  • tree:查看文件夹的树形结构的终端小工具
  • pipewire-audiopipewire-alsapipewire-pulse:多媒体框架,如果没声音就装上
  • firefox firefox-i18n-zh-cn:火狐和中文包
  • chromium咕鸽浏览器
  • loupe:比较简单的图片查看器
  • gthumb:功能多点的图片查看器
  • mpv:音视频播放器
  • wps-office-cnWPS 个人版
    • wps-office-mime-cn:MIME 格式支持
    • wps-office-mui-zh-cn:中文语言包
  • github-cliGithub 的命令行界面客户端,浏览器打不开 Github 时可以作为备选方案。

安装时说不定会遇到几个选择,以下几个是我的推荐,其它的可以自行决定:

  • jack 后端:选择 jack2
  • pipewire 后端:选择 wireplumber
  • 终端字体:我觉得 noto-fonts 好看
  • nerd 字体:个人选择 ttf-nerd-fonts-symbols

系统配置

字体

添加单独的字体文件,要复制到 ~/.local/share/fonts 里,然后运行命令 fc-cache 增量更新字体缓存。 也可 fc-cache -fv 强制重新生成所有缓存并显示过程。 更多内容见 字体

用户的全局字体设置在 /.config/fontconfig/fonts.conf,比如指定默认的无衬线体(sans-serif)衬线体(serif)等宽字体(monospace)。更多内容见 Fontconfig 配置

环境变量

系统级别的全局环境变量一般配置在 /etc/environment 就行。 /etc/profile/etc/profile.d/ 的作用如有需要自行学习。 各 shell 自己的全局环境变量见各自的配置,如 Bash 配置文件Zsh 启动/关闭文件

systemd 的用户环境变量在 ~/.config/environment.d/*.conf。 更详细的可参考 systemd 环境变量

详细内容见 ArchWiki环境变量

Foot 配置

/etc/locale.confLANG=en_US.UTF-8 可能会覆盖 ~/.config/environment.d/ 中语言的环境变量,导致 man 不是中文。 可以在 ~/.config/foot/foot.ini 配置 [environment]

除此之外,字体类似这么写:

1
font=Maple Mono NF CN:size=12, Noto Color Emoji:size=12

Zsh 配置

安装了 grml-zsh-config 之后会自动加载它的配置。 zsh 自带的初始化步骤挺好的,虽然是全英文,但是可以找 AI 帮忙翻译并出出主意。我的配置文件如下(补全功能还没捣鼓 Zsh 自带的高级配置,回头再搞):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# Lines configured by zsh-newuser-install
HISTFILE=~/.zsh_history
HISTSIZE=1000
SAVEHIST=1000
setopt autocd extendedglob nomatch notify
unsetopt beep
bindkey -v
# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '/home/nacl/.zshrc'

autoload -Uz compinit
compinit
# End of lines added by compinstall

source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

autoload -Uz promptinit
promptinit
prompt grml

Yazi 配置

添加 gitvcs-file 两个插件:

1
2
ya pkg add yazi-rs/plugins:git
ya pkg add yazi-rs/plugins:vcs-files

倘若 Yazi 无法打开 WPS 文档、无法默认调用想要的软件打开图片。 需要添加格式关联,在 ~/.config/yazi/yazi.toml 写入 openeropenrules即可。 这是我根据 官方的默认配置 写的:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[opener]
loupe = [
  { run = "loupe %s", desc = "Open with Loupe", orphan = true, for = "unix" },
]
wps-office = [
  { run = "env QT_FONT_DPI=128 wps %s", desc = "WPS", orphan = true },
]
[open]
rules = [
	# 根据文件名匹配:匹配所有 .doc, .docx, .xls, .xlsx, .ppt, .pptx 文件
	{ url = "*.{doc,docx,xls,xlsx,ppt,pptx}", use = "wps-office" },
	# Folder
	{ url = "*/", use = [ "edit", "open", "reveal" ] },
	# Text
	{ mime = "text/*", use = [ "edit", "reveal" ] },
	# Image
	{ mime = "image/*", use = [ "loupe", "open", "reveal" ] },
	# Media
	{ mime = "{audio,video}/*", use = [ "play", "reveal" ] },
	# Code
	{ mime = "application/{json,ndjson,javascript,wine-extension-ini}", use = [ "edit", "reveal" ] },
	# Archive
	{ mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", use = [ "extract", "reveal" ] },
	# Empty file
	{ mime = "inode/empty", use = [ "edit", "reveal" ] },
	# Virtual file system
	{ mime = "vfs/{absent,stale}", use = "download" },
	# Fallback
	{ url = "*", use = [ "open", "reveal" ] },
]

GRUB 中文

如果想让 GRUB 的菜单什么的也设为中文,可以重新生成一下。

1
grub-mkconfig -o /boot/grub/grub.cfg

困难备注

WPS

WPS 的整合版本体、表格或演示无法用启动器打开,可能是本体设为了整合版+系统没……怎么说呢……没联系起来(?)导致的。 先开一次 WPS,比如命令行直接运行 wps,然后随便开一个文档,新建也行,会弹出设为默认软件的选项。 此时点同意,就会在 .config/mimeapps.conf 添加格式的关联。

本文采用 CC BY-NC-SA 4.0 许可
最后更新于 2026年5月27日星期三
当你有机会做出选择时,不要让自己后悔
使用 Hugo 构建
主题 StackJimmy 设计