ArchLinux手册.md 178 KB

Arch Linux 手册

基于 ArchLinuxStudio/ArchLinuxTutorial、nakanomikuorg/arch-guide 及 Arch Wiki CN 综合整理

本文档旨在提供从零开始安装、配置和使用 Arch Linux 的完整指南,涵盖新手入门到进阶使用全流程。


目录


一、安装前的准备

0. 终端编辑器 vim 的使用

在安装 Arch Linux 的过程中,需要使用到 vim 编辑器,基本操作如下:

vim 1.txt           # 创建并编辑名为 1.txt 的文件

进入 vim 后,处于命令模式,输入 a 进入编辑模式,编辑完成后按 Esc 回到命令模式。

:wq     # 保存退出
:q!     # 不保存强制退出
dd      # 删除一行
2dd     # 删除两行
gg      # 回到文本第一行
shift+g # 转到文本最后一行
/xxx    # 在文中搜索内容 'xxx',按 n 转到下一个
?xxx    # 反向搜索

需要完整教程请在终端执行 vimtutor。

1. 确认是否适合安装 Arch Linux

安装 Arch Linux 前,请确认:

  • 具有一定的 Linux 基础:了解基本的命令行操作、文件系统结构。缺乏基础建议先阅读《Linux 就该这么学》等入门书籍
  • 愿意花费时间折腾系统:安装需要在命令行手动输入至少 30 多条命令,后续配置也需要时间
  • 能冷静应对问题:滚动更新可能遇到系统崩溃,需要排查而非简单重装

2. 确保网络环境

  • 有线网络:插入网线,DHCP 自动获取 IP
  • 无线网络:提前将 WiFi 名称改为英文(安装环境无法显示中文)
  • 确保无线网卡硬件开关处于打开状态

3. 下载安装镜像

从 archlinux.org/download 下载最新 ISO,推荐使用磁力链接下载。

国内镜像站:

验证 ISO 完整性(重要)

下载后务必验证文件完整性,防止下载损坏或被篡改:

方法一:PGP 签名验证(推荐)

# 下载 ISO 和对应的签名文件(.sig)
# 从 archlinux.org/download 的 Checksums 部分获取

# 导入 Arch Linux 开发者 PGP 公钥
gpg --keyserver keyserver.ubuntu.com --recv-keys 开发者密钥ID

# 验证签名
gpg --verify archlinux-YYYY.MM.DD-x86_64.iso.sig archlinux-YYYY.MM.DD-x86_64.iso
# 输出显示 "Good signature" 表示验证通过

方法二:SHA-256 校验(无 GPG 时备用)

# 下载对应的 SHA256 文件
# 计算本地文件的哈希值
sha256sum archlinux-YYYY.MM.DD-x86_64.iso
# 与官网提供的 SHA-256 值逐字符对比

PGP 验证比 SHA-256 更安全——SHA-256 仅防传输损坏,PGP 还能防镜像站被篡改后提供伪造的校验值。

4. 刻录启动 U 盘

准备一个 2G 以上的 U 盘。

Linux 下使用 dd 命令:

sudo dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress oflag=sync

推荐使用 Ventoy(跨平台): Ventoy 无需反复格式化 U 盘,拷贝 ISO 即可启动。支持多系统镜像。

# Arch Linux 安装
sudo pacman -S ventoy-bin
sudo ventoy -i -g /dev/sdx    # 安装 Ventoy 到 U 盘
# 然后将 ISO 文件拷贝到 U 盘即可

Windows 下推荐: Ventoy、Rufus、balenaEtcher

5. 进入 BIOS 设置

  1. 插入 U 盘开机,按 F2/F8/F10/DEL 进入 BIOS
  2. 关闭 Secure Boot:在 Security 选项卡中找到并禁用
    • 部分主板(如华硕)在 Boot → Secure Boot → OS Type → Other OS
    • 部分主板同时需要清除 Secure Boot 密钥(Restore Factory Keys 或 Reset to Setup Mode)
    • Arch Linux 虽然支持 Secure Boot(通过 shim/preloader 或自签名),但首次安装建议先关闭
  3. 启动模式设为 UEFI(而非 Legacy/CSM)
    • 若开启 CSM(Compatibility Support Module),确保引导设备选 UEFI 优先
    • 关闭 CSM/Legacy 可避免兼容性问题
  4. 将 U 盘启动顺序调至首位
    • 部分主板按 F11/F12 可在开机时弹出启动菜单,比改顺序更方便
  5. 保存并退出(通常按 F10)

Secure Boot 说明:

  • 关闭 Secure Boot 是最稳妥的做法,绝大多数用户无需开启
  • 如需保持开启,可以使用 sbctl(推荐)或 shim 方案在安装完成后配置
  • 某些双显卡笔记本必须在 BIOS 中关闭 Secure Boot 才能正常加载 NVIDIA 驱动

二、基础安装

0. 禁用 reflector(可选)

reflector 会自动选择镜像源,但结果可能不准确:

systemctl stop reflector.service

2025 年后的镜像已默认禁用 reflector,无需手动操作。

1. 确认引导模式

检查是否为 UEFI 模式:

ls /sys/firmware/efi/efivars

若输出一堆 efi 变量,则说明已在 UEFI 模式。若提示目录不存在,则可能为 Legacy BIOS 模式。

确认 UEFI 位宽(64 位 vs 32 位):

cat /sys/firmware/efi/fw_platform_size
  • 输出 64 → 64 位 UEFI(绝大多数现代设备)
  • 输出 32 → 32 位 UEFI(罕见,多见于老旧平板如 Dell Venue 8 Pro,需使用 archboot 或特殊 ISO)

2025 年后的 Arch ISO 已逐步淘汰对 32 位 UEFI 的支持,旧设备请参考 Arch Wiki 的 Unified Extensible Firmware Interface 页面。

2. 连接网络

无线网络(iwctl):

iwctl
device list                          # 列出设备名
station wlan0 scan                   # 扫描网络
station wlan0 get-networks           # 列出网络
station wlan0 connect YOUR-WIFI-NAME # 连接
exit

有线网络: 插入网线即可(DHCP)。

故障排查:

ip link                              # 列出网络接口
ip link set wlan0 up                 # 激活网卡
rfkill unblock wifi                  # 解锁无线网卡

3. 测试网络连通性

ping www.gnu.org

4. 更新系统时钟

timedatectl set-ntp true
timedatectl status

5. 分区

分区表选择:

  • UEFI 系统 → 必须使用 GPT 分区表(推荐所有 2012 年后设备)
  • Legacy BIOS 系统 → 可使用 MBR 或 GPT(GRUB 在 GPT+BIOS 需要额外 BIOS boot 分区)
  • 双系统(与 Windows 共存)→ 保持原有的分区表类型,Windows 10+ 默认使用 GPT

推荐分区方案(UEFI+GPT):

挂载点 大小 类型 说明
/efi(或 /boot) 1G EFI System ESP(EFI System Partition),建议 ≥ 512 MiB
/ 100G+ Linux filesystem 根分区
/home 剩余全部 Linux filesystem 用户数据
swap 内存×60% Linux swap 可选(详见 Swap 替代方案)

EFI 分区大小:Arch Wiki 推荐 至少 300 MiB,双系统或多内核建议 1 GiB。过小会导致内核更新时空间不足。

方法一:使用 cfdisk(交互式,推荐新手)

lsblk                              # 查看磁盘布局
cfdisk /dev/sdx                    # 选择 GPT 标签类型

在 cfdisk 图形界面中:

  1. 选择分区表类型为 gpt(或 dos 用于 MBR)
  2. New → 输入大小 → 选择类型为 EFI System(EFI 分区)
  3. New → 输入大小 → Linux filesystem(根分区)
  4. New → 剩余全部 → Linux filesystem(home 分区)
  5. Write → 输入 yes 确认 → Quit

方法二:使用 parted(命令行)

parted /dev/sdx
(parted) mktable gpt               # 创建 GPT 分区表
(parted) mkpart ESP fat32 1MiB 1025MiB    # EFI 分区
(parted) set 1 esp on                     # 设为 EFI 启动分区
(parted) mkpart root ext4 1025MiB 100G    # 根分区
(parted) mkpart home ext4 100G 100%       # home 分区
(parted) quit

验证分区对齐(确保 4K 扇区硬盘性能):

fdisk -l /dev/sdx                  # 检查 Start 列值是否能被 4096 整除

双系统特别说明:若与 Windows 共存,请勿格式化原有的 EFI 分区。Arch 会共用该分区中的文件夹。请确保 EFI 分区 ≥ 512 MiB(Windows 默认只有 100 MiB,可能不够用,可考虑在 Windows 中用 DiskGenius 扩容)。

6. 格式化

mkfs.ext4 /dev/root_partition        # 根分区(ext4)
mkfs.ext4 /dev/home_partition        # home 分区(ext4)
mkfs.fat -F32 /dev/efi_partition     # EFI 分区(必须 FAT32)
mkswap /dev/swap_partition           # swap 分区(可选,启用后 swapon)

EFI 分区必须格式化为 FAT32(使用 mkfs.fat -F32)。如果之前安装过 Windows,原有的 EFI 分区无需重新格式化。

Btrfs 文件系统(推荐新手直接选用):

Btrfs 支持子卷快照、透明压缩、校验和等高级功能,以下为安装时的创建步骤:

mkfs.btrfs -L myArch /dev/root_partition
mount -t btrfs -o compress=zstd /dev/root_partition /mnt
btrfs subvolume create /mnt/@        # 根目录子卷
btrfs subvolume create /mnt/@home    # home 子卷
umount /mnt

选择建议:

  • 新手/桌面用户 → 推荐 Btrfs:快照回滚方便,分区空间利用率高(共享空闲空间)
  • 服务器/高负载场景 → ext4:更成熟稳定,极端故障恢复工具更完善
  • 两者日常使用无明显性能差异

7. 挂载

传统 ext4 方式:

mount /dev/root_partition /mnt
mkdir -p /mnt/efi /mnt/home
mount /dev/efi_partition /mnt/efi
mount /dev/home_partition /mnt/home
swapon /dev/swap_partition            # 启用 swap

Btrfs 方式:

mount -t btrfs -o subvol=/@,compress=zstd /dev/root_partition /mnt
mkdir /mnt/home /mnt/boot
mount -t btrfs -o subvol=/@home,compress=zstd /dev/root_partition /mnt/home
mount /dev/efi_partition /mnt/boot
swapon /dev/swap_partition

Btrfs 子卷推荐布局

Btrfs 建议按以下结构划分子卷,便于快照管理:

子卷 挂载点 说明
@ / 根文件系统(需要快照的路径)
@home /home 用户数据
@cache /var/cache 包缓存(排除在快照外节省空间)
@log /var/log 日志(排除在快照外)
@tmp /tmp 临时文件

完整创建示例:

# 创建子卷
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@cache
btrfs subvolume create /mnt/@log
btrfs subvolume create /mnt/@tmp
umount /mnt

# 挂载子卷(带优化参数)
mount -t btrfs -o subvol=/@,compress=zstd:3,noatime,ssd,space_cache=v2 /dev/root_partition /mnt
mkdir -p /mnt/{home,boot,.snapshots}
mount -t btrfs -o subvol=/@home,compress=zstd:3,noatime,ssd /dev/root_partition /mnt/home
mount -t btrfs -o subvol=/@cache,compress=zstd:3,noatime,ssd /dev/root_partition /mnt/var/cache
mount -t btrfs -o subvol=/@log,compress=zstd:1,noatime,ssd /dev/root_partition /mnt/var/log
mount -t btrfs -o subvol=/@tmp,noatime,ssd,nodev,nosuid,noexec /dev/root_partition /mnt/tmp
mount /dev/efi_partition /mnt/boot

参数说明:noatime(禁用访问时间更新)、ssd(SSD 优化)、compress=zstd:3(zstd 压缩级别 3)、space_cache=v2(改进的空间缓存)

8. 选择镜像源

vim /etc/pacman.d/mirrorlist

将国内镜像源放在最前面:

Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch

安全提示:镜像源会记录你的 IP 和软件包列表。如需隐私保护,建议使用非威权国家的镜像源。

9. 安装系统

基础系统包(必须):

pacstrap -K /mnt base base-devel linux linux-firmware linux-headers
  • base:最小基础系统
  • base-devel:编译工具链(gcc, make 等,AUR 需要)
  • linux:内核(可换成 linux-lts 长期支持版)
  • linux-firmware:硬件固件
  • linux-headers:内核头文件(DKMS 模块需要)

核心工具包(推荐):

pacstrap /mnt vim sudo bash-completion networkmanager
  • 不安装 dhcpcd 和 iwd,改用 NetworkManager(桌面环境更方便)
  • iwd 可后续按需安装

Btrfs 用户额外安装:

pacstrap /mnt btrfs-progs

可选内核替代方案: | 内核 | 适用场景 | |------|----------| | linux | 通用,功能最全 | | linux-lts | 稳定优先,兼容性好,推荐服务器 | | linux-zen | 桌面优化,响应性更好 | | linux-hardened | 安全加固,有额外性能开销 |

多内核可同时安装,GRUB 启动时选择。建议至少安装 linux + linux-lts 作为备用。

10. 生成 fstab

genfstab -U /mnt >> /mnt/etc/fstab
cat /mnt/etc/fstab                    # 复查

11. Chroot 进入新系统

arch-chroot /mnt

12. 时区设置

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

13. 本地化(Locale)

vim /etc/locale.gen
# 去掉 en_US.UTF-8 和 zh_CN.UTF-8 行的注释
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf

不要在系统级别设置中文 locale,会导致 tty 乱码。中文在桌面环境的登录管理器中选择即可。

14. 主机名

echo 'myarch' > /etc/hostname        # 替换为你的主机名
vim /etc/hosts

添加内容:

127.0.0.1   localhost
::1         localhost
127.0.1.1   myarch

15. 设置 root 密码

passwd root

16. 安装微码

pacman -S intel-ucode                # Intel CPU
pacman -S amd-ucode                  # AMD CPU

17. 安装引导程序

选项 A:GRUB(通用,推荐新手)

GRUB 功能最全面,支持 UEFI + Legacy BIOS、双系统检测、主题美化:

pacman -S grub efibootmgr os-prober   # os-prober 用于检测双系统

安装到 EFI:

# 先确认 EFI 分区挂载位置
lsblk /dev/efi_partition              # 确认分区

# ext4 用户(EFI 挂载在 /efi):
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB

# Btrfs 用户(EFI 挂载在 /boot):
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB

--efi-directory 必须指向 EFI 分区的挂载点,不是 /boot/efi 这种子目录。

编辑 GRUB 配置 /etc/default/grub:

vim /etc/default/grub

常用配置调整:

GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 nowatchdog"  # 去掉 quiet 可以看到详细启动日志
# loglevel=3(仅警告以上),nowatchdog(禁用看门狗,加速开关机)
# 或 loglevel=5(信息级别),方便排查启动问题

# 双系统用户添加:
GRUB_DISABLE_OS_PROBER=false

生成 GRUB 配置:

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

选项 B:systemd-boot(简单轻量,仅 UEFI)

如果只用 Arch Linux 单系统,systemd-boot 是更简洁的选择:

# 确认 EFI 分区挂载在 /boot
bootctl install

创建引导条目 /boot/loader/entries/arch.conf:

title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img       # Intel CPU;AMD 使用 /amd-ucode.img
initrd  /initramfs-linux.img
options root=PARTUUID=分区UUID rw

编辑 /boot/loader/loader.conf:

default arch.conf
timeout 4
console-mode max
editor yes

选项 C:EFISTUB(最直接,无引导菜单)

直接将内核作为 EFI 可执行文件启动(需要 UEFI 支持),通过 efibootmgr 注册:

efibootmgr --create --disk /dev/sdX --part 1 --label "Arch Linux" \
  --loader /vmlinuz-linux --unicode 'root=PARTUUID=... rw initrd=\initramfs-linux.img'

适合不希望看到引导菜单、开机直达系统的用户。按 F12 等快捷键可进入主板启动菜单选择其他系统。

选项 D:Unified Kernel Image (UKI)(推荐进阶用户)

UKI 将内核、initramfs、微码、内核参数合并为单一 EFI 可执行文件,直接由 UEFI 固件加载。优势:

  • 更快的启动速度(跳过引导加载程序)
  • 更好的安全性(单一签名文件,支持 Secure Boot 验证)
  • 更简洁(无需 GRUB/systemd-boot 配置文件)

使用 mkinitcpio 生成 UKI:

编辑 /etc/mkinitcpio.conf,确保包含微码 hook:

HOOKS=(base systemd autodetect microcode modconf kms block filesystems keyboard fsck)

创建 UKI 输出目录并编辑 /etc/mkinitcpio.d/linux.preset:

sudo mkdir -p /efi/EFI/Linux

在 preset 文件末尾添加:

# /etc/mkinitcpio.d/linux.preset
default_uki="/efi/EFI/Linux/arch-linux.efi"
fallback_uki="/efi/EFI/Linux/arch-linux-fallback.efi"

生成 UKI:

sudo mkinitcpio -P

注册到 UEFI 启动菜单:

sudo efibootmgr --create --disk /dev/sdX --part 1 --label "Arch Linux UKI" \
  --loader /EFI/Linux/arch-linux.efi

使用 systemd-boot 自动发现 UKI: systemd-boot 会自动扫描 /efi/EFI/Linux/ 中的 UKI 文件,无需额外配置条目。

使用 sbctl 签名 UKI(配合 Secure Boot):

sudo sbctl sign --save /efi/EFI/Linux/arch-linux.efi

注意:使用 UKI 后,内核参数不再通过引导加载程序配置,而是嵌入在 /etc/kernel/cmdline 文件中(或通过 preset 中的 # UKI_CMDLINE= 指定)。修改内核参数后需要重新运行 sudo mkinitcpio -P。

引导程序选择建议:

  • 双系统 + 需要主题美化 → GRUB
  • 单系统 + 追求简洁启动速度 → systemd-boot(默认已集成在 systemd 中,无需额外包)
  • 单系统 + 追求安全/极简 → UKI(无需引导加载程序,最快启动,支持 Secure Boot)
  • 临时测试/多内核切换需求 → GRUB(菜单选择最方便)

17.5 理解 initramfs 和 mkinitcpio

initramfs(initial RAM filesystem) 是内核启动早期阶段使用的微型文件系统,包含加载根文件系统所需的驱动和工具。

mkinitcpio 是 Arch Linux 的 initramfs 生成工具,通过钩子(hooks)机制决定哪些功能被包含:

关键 Hook 功能 需要启用的情况
base 基础工具(默认) 所有情况
udev 设备检测(默认) 所有情况
autodetect 仅包含本机所需模块(加速启动) 所有情况
microcode 加载 CPU 微码(替代 initrd 行单独指定) 所有情况(推荐,用于 UKI)
modconf 加载 modprobe.d 配置 所有情况
kms 提前初始化显卡,避免分辨率切换闪烁 所有桌面用户
block 块设备驱动 所有情况
lvm2 加载 LVM 卷 使用 LVM
encrypt 解密 LUKS 根分区 全盘加密
keyboard USB 键盘支持(输入密码用) LUKS 加密需要
resume 从休眠恢复 需要休眠(hibernate)功能
filesystems 挂载根文件系统 所有情况
fsck 文件系统检查 所有情况
systemd 使用 systemd 作为 init(替代 base+udev) UKI 用户推荐

推荐 HOOKS 配置:

标准桌面用户(无加密):

HOOKS=(base udev autodetect microcode kms modconf block filesystems keyboard fsck)

LUKS 加密用户:

HOOKS=(base udev autodetect microcode modconf block encrypt filesystems keyboard fsck)

UKI + LUKS 加密用户:

HOOKS=(systemd autodetect microcode modconf block sd-encrypt filesystems keyboard fsck)

查看当前配置:

cat /etc/mkinitcpio.conf | grep HOOKS

修改配置后重新生成:

mkinitcpio -P          # 重新生成所有内核的 initramfs
mkinitcpio -p linux    # 仅重新生成 linux 内核的 initramfs

注意:自定义 HOOKS 后忘记运行 mkinitcpio -P 是导致重启后无法解密/挂载根分区的最常见原因之一。

17.6 Secure Boot 配置(可选)

如果未在 BIOS 中关闭 Secure Boot,可以通过 sbctl 自行签名引导文件。

安装与设置 sbctl:

# 重启进入新系统后
sudo pacman -S sbctl

# 检查 Secure Boot 状态
sbctl status
# Setup Mode: Enabled → 可以配置(BIOS 中 Secure Boot 设为 Setup Mode)
# Secure Boot: Disabled → 需要先在 BIOS 中启用

# 创建签名密钥
sudo sbctl create-keys

# 注册密钥到 UEFI(需要 Setup Mode)
# 重启后在 BIOS 中导入 /usr/share/secureboot/keys/db/db.pem
# 或使用 sbctl 自动注册(部分主板支持):
sudo sbctl enroll-keys --microsoft
# --microsoft 同时导入 Microsoft 证书以兼容 Windows 双系统

签名引导文件:

# 签名所有需要签名的文件
sudo sbctl sign --save /boot/vmlinuz-linux          # 内核
sudo sbctl sign --save /boot/*.img                  # initramfs
sudo sbctl sign --save /efi/EFI/GRUB/grubx64.efi    # GRUB(如使用)
sudo sbctl sign --save /efi/EFI/systemd/systemd-bootx64.efi  # systemd-boot
sudo sbctl sign --save /efi/EFI/Linux/arch-linux.efi  # UKI(如使用)

# 查看已签名文件
sbctl list-files

# 验证 Secure Boot 已生效
sbctl status
# Setup Mode: Disabled ✓
# Secure Boot: Enabled ✓

自动签名钩子(Pacman Hook):

创建 /etc/pacman.d/hooks/999-sbctl.hook:

[Trigger]
Type = Path
Target = usr/lib/modules/*/vmlinuz
Target = usr/lib/initcpio/*
Target = boot/*-ucode.img
Operation = Install
Operation = Upgrade

[Action]
Description = Signing Kernel and initramfs for Secure Boot...
When = PostTransaction
Exec = /usr/bin/sbctl sign-all

注意:NVIDIA 闭源驱动模块需要额外签名(参见 mkinitcpio 的 NVIDIA 章节)。VirtualBox 等 DKMS 模块也需手动签名。

18. 完成安装

exit                                  # 退出 chroot 环境
umount -R /mnt                        # 卸载所有挂载
reboot                                # 重启

重启前拔掉 U 盘。

重启后,用 root 账户登录。首次启动可能提示 timed out waiting for device——这是正常的,稍等即可。

启动网络服务:

systemctl enable --now NetworkManager

验证网络:

ping archlinux.org

如果安装时没有安装 NetworkManager,可以用 systemctl enable --now dhcpcd 替代。后续安装桌面环境时会自动切换。

Chroot 后操作顺序回顾

Chroot 后按以下顺序完成:

步骤 内容 命令
1 时区 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2 Locale 编辑 locale.gen → locale-gen → 写入 locale.conf
3 主机名 编辑 hostname 和 hosts
4 Root 密码 passwd
5 微码 pacman -S intel-ucode / amd-ucode
6 引导程序 GRUB / systemd-boot
7 initramfs(可选) 修改 mkinitcpio.conf 后运行 mkinitcpio -P
8 创建普通用户 useradd -m -G wheel user && passwd user
9 sudo 权限 EDITOR=vim visudo → 取消 %wheel 行注释
10 退出并重启 exit → umount -R /mnt → reboot

19. 进阶存储方案

A. Btrfs 管理命令(安装后)

# 查看子卷列表
sudo btrfs subvolume list /
sudo btrfs subvolume list /home

# 创建/删除子卷
sudo btrfs subvolume create /home/@snapshots
sudo btrfs subvolume delete /path/to/subvolume

# 创建只读快照
sudo btrfs subvolume snapshot -r /home /home/@snapshot-$(date +%Y%m%d)

# 定期 Scrub(检查数据一致性,建议每月一次)
sudo btrfs scrub start /
sudo btrfs scrub status /
# 启用定时 scrub
sudo systemctl enable --now btrfs-scrub@-.timer

# 平衡(Balancing,空间回收后执行)
sudo btrfs balance start -dusage=50 /
sudo btrfs balance status /

# 查看压缩率
sudo compsize /
sudo compsize /home

# 启用 Quota(为子卷设置配额)
sudo btrfs quota enable /
sudo btrfs qgroup limit 50G /home    # 限制 home 最大 50G

# 转换 ext4 到 Btrfs(不丢数据)
# 从 Live USB 启动后:
# sudo btrfs-convert /dev/sdX

B. LVM(逻辑卷管理)

LVM 可在多个磁盘间灵活分配空间、动态调整大小。

安装时设置 LVM:

# 1. 创建物理卷(PV)
pvcreate /dev/sda2 /dev/sdb1          # 可以使用多个磁盘

# 2. 创建卷组(VG)
vgcreate myvg /dev/sda2 /dev/sdb1

# 3. 创建逻辑卷(LV)
lvcreate -L 50G myvg -n root          # 根分区 50G
lvcreate -L 200G myvg -n home         # home 分区 200G
lvcreate -L 8G myvg -n swap           # swap 8G

# 4. 格式化并挂载
mkfs.ext4 /dev/myvg/root
mkfs.ext4 /dev/myvg/home
mkswap /dev/myvg/swap

mount /dev/myvg/root /mnt
mkdir /mnt/home
mount /dev/myvg/home /mnt/home
swapon /dev/myvg/swap

# 5. Chroot 后安装 LVM 钩子
pacman -S lvm2                    # 安装 LVM 工具
# 编辑 /etc/mkinitcpio.conf:
# 在 HOOKS 中 block 后添加 lvm2:
# HOOKS=(base udev autodetect modconf block lvm2 filesystems keyboard fsck)
mkinitcpio -P

LVM 日常管理:

# 扩展逻辑卷(在线扩容)
lvextend -L +10G /dev/myvg/root       # 增加 10G
resize2fs /dev/myvg/root              # ext4 在线扩容
# Btrfs 无须 resize2fs,自动识别

# 缩减逻辑卷
lvreduce -L -5G /dev/myvg/home
resize2fs /dev/myvg/home

# 查看 LVM 状态
pvdisplay
vgdisplay
lvdisplay

# 添加新磁盘到卷组
pvcreate /dev/sdc1
vgextend myvg /dev/sdc1

C. dm-crypt / LUKS 全盘加密

方案一:LUKS 加密根分区(最常用)

# 分区阶段创建加密分区
# 使用 cfdisk 创建普通 Linux 分区后:
cryptsetup luksFormat /dev/root_partition
cryptsetup open /dev/root_partition cryptroot

# 在解密设备上创建文件系统
mkfs.btrfs /dev/mapper/cryptroot
mount -t btrfs -o compress=zstd /dev/mapper/cryptroot /mnt

# 创建 EFI 分区(不加密)
mkfs.vfat /dev/efi_partition
mkdir /mnt/boot
mount /dev/efi_partition /mnt/boot

Chroot 后配置:

# 编辑 /etc/mkinitcpio.conf
# HOOKS 中添加 encrypt:
# HOOKS=(base udev autodecrypt modconf block encrypt filesystems keyboard fsck)

# 编辑 /etc/default/grub
GRUB_CMDLINE_LINUX="cryptdevice=UUID=磁盘UUID:cryptroot root=/dev/mapper/cryptroot"

# 重建引导
grub-mkconfig -o /boot/grub/grub.cfg
mkinitcpio -P

方案二:LUKS + LVM(加密+灵活分区)

# 创建加密的 LVM 物理卷
cryptsetup luksFormat /dev/sda2
cryptsetup open /dev/sda2 cryptlvm
pvcreate /dev/mapper/cryptlvm
vgcreate myvg /dev/mapper/cryptlvm
lvcreate -L 50G myvg -n root
lvcreate -L 200G myvg -n home
# ... 后续步骤同 LVM 方案

密钥文件自动解锁(二阶段解锁):

# 创建密钥文件
dd if=/dev/urandom of=/etc/cryptkey bs=512 count=8
chmod 600 /etc/cryptkey
cryptsetup luksAddKey /dev/root_partition /etc/cryptkey

# 编辑 /etc/crypttab:
# cryptroot UUID=磁盘UUID /etc/cryptkey luks

D. Swap 替代方案(避免使用传统 swap 分区)

建议:内存 ≥ 8GB 时,推荐 Zram(压缩内存)替代 swap 分区。休眠(hibernate)需要 swap 空间 ≥ 内存大小。

对比总结:

方案 原理 适用场景 优点 缺点
Swap 分区 磁盘交换 任何情况 简单稳定 浪费磁盘空间,速度慢
Zram 内存压缩 内存充足 速度快,无磁盘 IO 不能休眠,占用内存
Zswap 内核压缩缓存 任何情况 与 swap 文件配合 配置稍复杂
Swap 文件 文件交换 ext4/Btrfs 灵活调整大小 Btrfs 配置稍复杂

Zram(内存压缩,推荐桌面/笔记本):

# 安装 zram-generator(自动创建压缩 swap,无需独立分区)
pacman -S zram-generator

# 配置文件 /etc/systemd/zram-generator.conf(默认即可)
# [zram0]
# zram-size = ram / 2    # 默认为内存的 50%

启用后重启或:

systemctl start systemd-zram-setup@zram0
swapon --show              # 验证 zram 已启用

Zram 将一部分内存压缩后作为 swap 使用,压缩率通常 2-3:1。8G 内存设置 4G zram 实际约占用 1.3-2G 物理内存。

Zswap(内核级压缩缓存):

# 通过内核参数启用(配合传统 swap 文件/分区使用)
# 编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX 中添加:
zswap.enabled=1 zswap.compressor=zstd zswap.max_pool_percent=20

Swap 文件(Btrfs:需额外步骤):

# Btrfs 必须先禁用写时复制(CoW)
truncate -s 0 /swapfile
chattr +C /swapfile                     # 禁用 CoW
btrfs property set /swapfile compression none
fallocate -l 4G /swapfile               # 或 dd if=/dev/zero of=/swapfile bs=1M count=4096
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

# 添加至 /etc/fstab:
# /swapfile none swap defaults 0 0

三、桌面环境与常用应用

1. 更新系统

pacman -Syyu

2. 创建普通用户

useradd -m -G wheel -s /bin/bash yourusername
passwd yourusername
EDITOR=vim visudo
# 取消注释:%wheel ALL=(ALL:ALL) ALL

3. 开启 32 位支持与 archlinuxcn 源

编辑 /etc/pacman.conf:

  • 取消 [multilib] 节的注释
  • 添加:

    [archlinuxcn]
    Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
    

更新并安装 keyring:

pacman -Syyu
pacman -S archlinuxcn-keyring yay

4. 桌面环境选择指南

Arch Linux 支持多种桌面环境(Desktop Environment, DE),以下为常见 DE 的对比:

桌面环境 工具包 特点 资源占用 推荐人群
KDE Plasma Qt 功能丰富、高度可定制、现代化 中等 喜欢定制、功能全面的用户
GNOME GTK 简洁现代、设计统一、工作流高效 较高 喜欢简洁、macOS 风格的用户
XFCE GTK 轻量、传统布局、稳定 较低 旧硬件、喜欢传统桌面
Cinnamon GTK Win 风格、易用、功能完整 中等 Win 迁移用户
Budgie GTK 简洁美观、Solus 项目 中等 追求美观的用户
Deepin Qt/GTK 极美、适合 Linux 新手 较高 颜值追求者
LXQt Qt 极轻量、模块化 极低 非常旧的硬件
i3 / Hyprland 无(WM) 平铺窗口、键盘驱动、极高效率 极低 键盘流、高级用户

建议:新手推荐 KDE Plasma(功能全、社区大、问题易搜)或 GNOME(设计简洁、开箱即用)。旧机器推荐 XFCE。喜欢折腾且追求效率可尝试 Hyprland(Wayland 平铺)。

5. 安装 KDE Plasma 桌面(推荐)

# 安装 KDE Plasma 完整组
sudo pacman -S plasma-meta konsole dolphin

# 安装 SDDM 显示管理器(KDE 默认)
sudo systemctl enable sddm

# 可选:安装 Plasma 额外组件
sudo pacman -S plasma-nm              # 网络管理器小程序
sudo pacman -S plasma-pa              # 音频小程序
sudo pacman -S kscreen                # 显示设置
sudo pacman -S kdegraphics-thumbnailers # 文件缩略图
sudo pacman -S ffmpegthumbs           # 视频缩略图

# 可选:安装 KDE 应用套件
sudo pacman -S kde-applications       # 完整 KDE 应用(较大)
# 或按需安装:
sudo pacman -S gwenview               # 图片查看器
sudo pacman -S okular                 # 文档查看器
sudo pacman -S ark                    # 压缩文件管理

Wayland 支持:KDE Plasma 已默认使用 Wayland 会话。登录时在 SDDM 选择 "Plasma (Wayland)"。如需强制启用:

sudo pacman -S plasma-wayland-session

6. 安装其他桌面环境

GNOME(简洁现代风格):

sudo pacman -S gnome gnome-tweaks
sudo systemctl enable gdm
# 登录管理器选择 GDM,会话选 "GNOME"
# 注意:GNOME 默认使用 Xorg,可在 GDM 登录界面选择 "GNOME on Wayland"

XFCE(轻量传统风格):

sudo pacman -S xfce4 xfce4-goodies lightdm lightdm-gtk-greeter
sudo systemctl enable lightdm

Cinnamon(Windows 风格):

sudo pacman -S cinnamon lightdm lightdm-gtk-greeter
sudo systemctl enable lightdm

i3 WM(平铺窗口管理器):

sudo pacman -S i3-wm i3status i3lock dmenu
# 搭配显示管理器或使用 ~/.xinitrc

Hyprland(现代化 Wayland 平铺合成器):

sudo pacman -S hyprland waybar wofi dunst
# 参见 Hyprland Wiki 配置

7. 配置网络(桌面环境)

sudo systemctl disable iwd
sudo systemctl stop iwd
sudo systemctl enable --now NetworkManager

8. 安装基础功能包

# 声音固件
sudo pacman -S sof-firmware alsa-firmware alsa-ucm-conf

# NTFS 支持
sudo pacman -S ntfs-3g

# 中文字体
sudo pacman -S adobe-source-han-serif-cn-fonts wqy-zenhei
sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra

# 浏览器
sudo pacman -S firefox chromium

# 压缩工具
sudo pacman -S ark p7zip unrar unarchiver lzop lrzip

# 软件中心
sudo pacman -S packagekit-qt6 packagekit appstream-qt appstream

# 图片查看器
sudo pacman -S gwenview

# 工具
sudo pacman -S git wget kate

9. 设置 DNS

sudo vim /etc/resolv.conf

添加:

nameserver 8.8.8.8
nameserver 2001:4860:4860::8888

防止被覆盖:

sudo chattr +i /etc/resolv.conf

10. 设置系统为中文

系统设置 → 区域设置 → 语言,添加中文,注销重登即可。

11. 安装输入法

Arch Linux 下推荐使用 Fcitx5 输入法框架(尤其是 KDE Plasma 用户),GTK 环境(GNOME)也可使用 IBus。

安装 Fcitx5:

sudo pacman -S fcitx5-im fcitx5-chinese-addons fcitx5-pinyin-zhwiki fcitx5-material-color

安装 IBus(GNOME 用户可选):

sudo pacman -S ibus ibus-libpinyin

设置环境变量(新建 ~/.config/environment.d/im.conf):

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus

Fcitx5 配置:

  • 在 KDE 系统设置 → 区域设置 → 输入法,添加拼音输入法
  • 或运行 fcitx5-configtool 图形化配置
  • 点击右上角配置按钮可调整候选词数量(推荐 5-9 个)
  • 云拼音:安装 fcitx5-pinyin-zhwiki 后,在输入法配置中启用云拼音

Fcitx5 主题:

  • 安装更多主题:yay -S fcitx5-skin-material fcitx5-skin-nord
  • 在 fcitx5-configtool → 附加组件 → 经典用户界面 → 主题 中切换

常见快捷键: | 操作 | 默认快捷键 | |------|-----------| | 切换输入法 | Ctrl + Space | | 中英文切换 | Shift(可配置)| | 翻页 | - / + 或 [ / ] | | 切换简体/繁体 | Ctrl + Shift + F |

12. 蓝牙(若有)

sudo pacman -S bluez bluez-utils bluez-obex
sudo systemctl enable --now bluetooth

13. 打印支持(CUPS)

# 安装 CUPS 打印服务
sudo pacman -S cups cups-pdf

# 安装打印机驱动(根据打印机型号选择)
sudo pacman -S hplip          # HP 打印机
sudo pacman -S gutenprint     # 通用打印机驱动
sudo pacman -S epson-inkjet-printer-escpr  # Epson

# 启用 CUPS 服务
sudo systemctl enable --now cups

# 访问 Web 管理界面
# http://localhost:631
# 或使用系统设置 → 打印机 添加打印机

如果打印机无法自动识别,可安装 sudo pacman -S cups-filters。

14. 显示管理器使用说明

显示管理器(Display Manager)提供图形化登录界面。

显示管理器 推荐 DE 特点
SDDM KDE Plasma(默认) Qt 界面,可定制主题
GDM GNOME(默认) GTK 界面,简洁
LightDM XFCE / Cinnamon 轻量,多 Greeter

如需切换显示管理器:

sudo systemctl disable sddm
sudo systemctl enable gdm    # 切换到 GDM

注意:同一时间只能启用一个显示管理器。切换前先 disable 当前的。

15. 配置 Timeshift 快照

sudo pacman -S timeshift
sudo systemctl enable --now cronie.service

打开 Timeshift,按向导配置即可。推荐使用 Btrfs 模式(更快、更省空间)。


四、显卡驱动

0. 提前加载 KMS(Kernel Mode Setting)

KMS 让内核在启动早期就初始化显卡,可避免启动过程中的分辨率切换闪烁,并加速 Plymouth 开机动画。

在 /etc/mkinitcpio.conf 的 HOOKS 中,将 kms 放在 autodetect 之后:

HOOKS=(base udev autodetect microcode kms modconf block filesystems keyboard fsck)

或通过 /etc/modprobe.d/ 加载对应驱动模块:

显卡 模块 配置
Intel i915 options i915 enable_guc=3(GuC 固件加速)
AMD amdgpu 默认即可
NVIDIA nvidia_drm options nvidia_drm modeset=1 fbdev=1

NVIDIA 用户特别注意:

# /etc/modprobe.d/nvidia.conf
options nvidia_drm modeset=1 fbdev=1

# 内核参数(/etc/default/grub):
# GRUB_CMDLINE_LINUX_DEFAULT="... nvidia_drm.modeset=1"

# 在 /etc/mkinitcpio.conf 的 MODULES 中添加:
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)

添加模块后重新生成 initramfs:

sudo mkinitcpio -P

英特尔核芯显卡

sudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel

Intel HD 4000 及以上才支持 Vulkan。不建议安装 xf86-video-intel。

AMD 核芯显卡

先查架构(techpowerup.com),GCN3+ 架构使用 AMDGPU 驱动:

sudo pacman -S mesa lib32-mesa xf86-video-amdgpu vulkan-radeon lib32-vulkan-radeon

老显卡(GCN2.0 及以下)使用 ATI 开源驱动。

NVIDIA 独立显卡

较新型号:

sudo pacman -S nvidia nvidia-settings lib32-nvidia-utils

老卡(GeForce 630-920):

yay -S nvidia-470xx-dkms nvidia-settings lib32-nvidia-470xx-utils linux-headers

更老(GeForce 400-630):

yay -S nvidia-390xx-dkms nvidia-settings lib32-nvidia-390xx-utils linux-headers

双显卡笔记本(NVIDIA Optimus)

yay -S optimus-manager optimus-manager-qt
sudo systemctl enable optimus-manager

提供三种模式:仅独显、仅核显、hybrid 动态切换。

# 使用独显运行特定程序
sudo pacman -S nvidia-prime
prime-run some_program

AMD 独显

安装与 AMD 核显相同。使用 DRI_PRIME=1 切换独显:

DRI_PRIME=1 glmark2                    # 测试独显性能
DRI_PRIME=1 steam steam://rungameid/570 # 用独显运行 Dota 2

Wayland 补充说明

Wayland 是新一代显示协议,逐步替代 X11。KDE Plasma 已默认使用 Wayland。

Wayland 的优势:

  • 更高的安全性(每个窗口隔离,不能截取其他窗口内容)
  • 更流畅的动画渲染
  • 更好的高分屏(HiDPI)支持
  • 更好的多显示器支持(各显示器独立刷新率)

NVIDIA 显卡在 Wayland 下:

  • 确保使用 nvidia-dkms 驱动(非 dkms 版本也可)
  • 需要安装 nvidia-utils ≥ 545 版本以获得较好的 Wayland 支持
  • 设置环境变量以解决 Electron 应用问题:

    # ~/.config/environment.d/wayland.conf
    KWIN_DRM_NO_AMS=1                    # 禁用 KDE 的原子模式设置(NVIDIA 兼容)
    ELECTRON_OZONE_PLATFORM_HINT=wayland # Electron 应用使用 Wayland
    
  • 在登录管理器(SDDM)选择 "Plasma (Wayland)" 会话

Wayland 中可能失效的功能:

  • 截图工具(Flameshot 在 Wayland 下需安装 flameshot 并配置)
  • 屏幕录制(OBS 需安装 pipewire 和 xdg-desktop-portal)
  • 全局快捷键需要应用支持 Wayland 协议

Wayland 工具:

# 查看当前显示协议
echo $XDG_SESSION_TYPE
# 截屏
sudo pacman -S grim slurp
grim -g "$(slurp)" screenshot.png       # 区域截图
# 屏幕录制
sudo pacman -S wf-recorder
wf-recorder -f record.mp4               # 录屏

五、音频系统

1. 概述

Arch Linux 音频系统主要有三个层次:

  • ALSA — 内核级音频驱动(底层),负责与硬件通信
  • PipeWire — 新一代音频/视频服务(推荐,取代 PulseAudio)
  • PulseAudio — 传统音频服务(已逐步被 PipeWire 取代)

推荐使用 PipeWire,因其低延迟、支持专业音频(JACK 兼容)、屏幕录制整合更好。

2. 安装 PipeWire

# 安装 PipeWire 核心组件
sudo pacman -S pipewire pipewire-alsa pipewire-pulse pipewire-jack

# 安装会话管理(必需)
sudo pacman -S wireplumber

# 安装图形化音量控制
sudo pacman -S pavucontrol qt6-pipewire

3. 启用 PipeWire

# 如果之前使用了 PulseAudio,先停用
systemctl --user disable --now pulseaudio.service pulseaudio.socket

# 启用 WirePlumber(PipeWire 会话管理器)
systemctl --user enable --now wireplumber

# 重启或重新登录后生效

PipeWire 默认会自动启动,无需手动 enable pipewire.service。 验证是否正常运行:

> pactl info | grep "Server Name"    # 应显示 "PipeWire"
> pw-cli info | grep "version"       # 显示 PipeWire 版本
> ```

### 4. 音量控制

bash

CLI 控制(推荐,适合脚本)

pactl set-sink-volume @DEFAULT_SINK@ -10% # 减少 10% pactl set-sink-volume @DEFAULT_SINK@ +10% # 增加 10% pactl set-sink-mute @DEFAULT_SINK@ toggle # 静音切换 pactl list sinks short # 列出输出设备

切换音频输出设备

pactl set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo

GUI 控制

pavucontrol # PulseAudio 音量控制(兼容 PipeWire)


### 5. 蓝牙音频(LDAC/aptX)

bash

安装蓝牙音频支持

sudo pacman -S bluez bluez-utils bluez-obex

启用蓝牙服务(如果尚未启用)

sudo systemctl enable --now bluetooth

安装 LDAC/aptX 编解码器支持

sudo pacman -S pipewire-aptx # aptX/AAC 支持 yay -S pipewire-codec-aptx # AUR 版(如有必要)


配置 WirePlumber 蓝牙音频质量(`/etc/wireplumber/bluetooth.lua.d/51-bluez-config.lua` 或 `~/.config/wireplumber/bluetooth.lua.d/51-bluez-config.lua`):

lua bluez_monitor.properties = { -- 选择蓝牙音频编解码器 ["bluez5.codecs"] = "[ldac, aptx, aac, sbc]",

-- LDAC 质量(0=自适应(最佳), 1=330k, 2=660k, 3=990k) ["bluez5.ldac.quality"] = 1, }


重启 WirePlumber:

bash systemctl --user restart wireplumber


### 6. 专业音频(JACK 支持)

PipeWire 原生兼容 JACK 应用:

bash

安装 JACK 工具(可选)

sudo pacman -S jack2 jack2-dbus

使用 qjackctl 或 pw-jack 运行 JACK 应用

pw-jack your_audio_app

专业路由工具

sudo pacman -S qpwgraph # PipeWire 版的路由矩阵


### 7. 音频故障排除

bash

列出音频设备

pw-cli list-objects | grep -i node

或

pactl list cards

查看 PipeWire 日志

journalctl --user -xu pipewire journalctl --user -xu wireplumber

检查 ALSA 设备

cat /proc/asound/cards aplay -l

测试扬声器

speaker-test -t wav -c 2

ALSA 强制声卡顺序(如有多个声卡冲突)

创建 /etc/modprobe.d/alsa.conf:

options snd slots=snd_hda_intel,snd_usb_audio


### 8. 高质量音频配置(可选)

bash

禁用 ALSA 自动静音(解决耳机插孔无声音)

sudo vim /etc/modprobe.d/alsa-base.conf options snd-hda-intel model=auto enable=yes

安装音频均衡器

sudo pacman -S pulseeffects # PulseEffects(完整版) yay -S easyeffects # 新版均衡器(推荐)

easyeffects 支持:均衡器、压缩器、限制器、降噪等


---

## 六、魔法上网

> 本节涉及突破网络审查的内容,在需要访问被封锁的互联网资源时使用。**请遵守当地法律法规。**

### 节点准备

节点链接形如:

ss://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx vmess://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


可通过自建服务器或购买机场服务获取。

### 安装 v2ray 和 v2rayA

bash

先安装 v2ray

sudo pacman -S v2ray

安装 v2rayA(推荐新手使用)

yay -S v2raya-bin sudo systemctl enable --now v2raya


打开浏览器访问 `http://localhost:2017` 即可使用 Web 界面管理。

### 代理初步设置

**终端代理:**

bash export https_proxy=http://127.0.0.1:8889 export http_proxy=http://127.0.0.1:8889 export all_proxy=http://127.0.0.1:8889


**proxychains-ng:**

bash sudo pacman -S proxychains-ng sudo vim /etc/proxychains.conf

修改最后一行为本地代理地址:socks5 127.0.0.1 1089

proxychains4 command # 对单个命令使用代理


### 为什么不建议分流代理?

分流代理(国内直连、国外代理)容易泄露隐私。例如:
- 国外网站嵌入百度统计,可关联真实 IP 与代理 IP
- 恶意邮件嵌入国内资源图片,可获取真实 IP

建议使用全局代理(见下一章)。

---

## 七、透明代理(全局代理)

透明代理使**系统所有流量**都通过代理,应用感知不到代理存在。

### 使用 v2rayA 全局代理

v2rayA 的设置页面可直接开启全局代理,最简单的方式,推荐新手使用。

### 使用 Qv2ray + cgproxy

bash

安装 cgproxy(AUR)

yay -S cgproxy


**配置步骤:**

1. 在 Qv2ray 首选项 → 入站设置 → 启用任意门
   - 监听地址:`127.0.0.1`
   - 嗅探:Full
   - Destination Override:三项均勾选
   - 模式:tproxy

2. 配置 `/etc/cgproxy/config.json`:
   - `cgroup_proxy` 中添加 `"/"`
   - `port` 改为 Qv2ray 透明代理端口
   - `program_noproxy` 中添加 `"v2ray"`, `"qv2ray"`

3. 给 v2ray 添加特权(UDP 需要):

bash sudo setcap "cap_net_admin,cap_net_bind_service=ep" /usr/bin/v2ray


4. 启动服务:

bash sudo systemctl enable --now cgproxy.service


---

## 八、Linux 日常操作与基础知识

### 文件系统基础

- **Linux 无盘符概念**,最上层为根目录 `/`(不像 Windows 有 C:/, D:/)
- **绝对路径**:`/home/user/Download`
- **相对路径**:`./Download`(当前目录)、`../Desktop`(上级目录)
- **`~`** 表示当前用户的家目录(`/home/用户名`)

**Linux 文件系统层次标准(FHS)简介:**

| 目录 | 用途 |
|------|------|
| `/bin` → `/usr/bin` | 基本命令(软链接) |
| `/etc` | 系统配置文件 |
| `/home` | 用户家目录 |
| `/usr` | 用户程序和数据 |
| `/var` | 可变数据(日志、缓存、数据库) |
| `/tmp` | 临时文件(重启清空) |
| `/boot` | 内核和引导文件 |
| `/opt` | 可选第三方软件 |
| `/mnt` | 临时挂载点 |
| `/proc` | 进程和内核虚拟文件系统 |
| `/dev` | 设备文件 |

### 文件权限与属性

**查看权限:**

bash ls -l file.txt

输出示例:-rw-r--r-- 1 user group 1024 May 1 10:00 file.txt

^^^^^^^^^^ ^^^^ ^^^^

权限 用户 组


权限由 10 个字符组成:
- 第 1 位:文件类型(`-`普通文件,`d`目录,`l`软链接,`b`块设备,`c`字符设备)
- 第 2-4 位:所有者权限(owner)
- 第 5-7 位:组权限(group)
- 第 8-10 位:其他人权限(other)

r = 4 (读) w = 2 (写) x = 1 (执行) -rw-r--r-- → 644 = owner 读写, group/other 只读 -rwxr-xr-x → 755 = owner 读写执行, group/other 读执行


**修改权限(chmod):**

bash chmod 755 script.sh # 数字法 chmod u+x script.sh # 字符法:给所有者增加执行 chmod g-w file.txt # 去掉组的写权限 chmod o+r file.txt # 给其他人加读权限 chmod -R 755 directory/ # 递归修改目录


**修改所有者(chown):**

bash sudo chown user:group file.txt # 修改所有者和组 sudo chown user file.txt # 仅修改所有者 sudo chown :group file.txt # 仅修改组 sudo chown -R user:group directory/ # 递归修改


**特殊权限:**

bash chmod u+s file # SUID(以所有者身份执行,如 /usr/bin/passwd) chmod g+s dir # SGID(子文件继承组) chmod +t dir # Sticky Bit(只有自己可删自己的文件,如 /tmp)


**默认权限与 umask:**

bash umask # 查看当前 umask(常见:022) umask 077 # 设置更严格的默认权限

umask 022 → 新建文件 644 (rw-r--r--),新建目录 755 (rwxr-xr-x)

umask 077 → 新建文件 600 (rw-------),新建目录 700 (rwx------)


### 进程管理

bash

查看进程

ps aux # 所有进程(BSD 风格) ps -ef # 所有进程(标准风格) ps aux --sort=-%mem # 按内存占用排序 ps aux | grep firefox # 查找指定进程

交互式进程查看

top # 实时进程监视(按 q 退出) htop # 增强版(需安装:sudo pacman -S htop)

进程信号

kill PID # 正常终止(SIGTERM = 15) kill -9 PID # 强制杀死(SIGKILL = 9,慎用) kill -15 PID # 优雅终止(SIGTERM) killall firefox # 杀死所有同名进程 pkill pattern # 按模式杀进程

后台运行

command & # 后台运行 nohup command & # 后台运行(退出终端不终止) Ctrl + Z # 挂起当前程序 bg # 后台继续运行 fg # 前台运行 jobs # 查看后台任务

优先级(nice)

nice -n 10 command # 以较低优先级运行 renice -n 5 -p PID # 调整已运行进程的优先级


### 用户和组管理

bash

用户管理

useradd -m -G wheel -s /bin/bash newuser # 创建用户(-m 创建家目录,-G 附加组) passwd newuser # 设置密码 usermod -aG docker newuser # 将用户添加到 docker 组 userdel -r newuser # 删除用户(及家目录)

查看用户信息

whoami # 当前用户名 id # 用户 ID 和组 ID who # 已登录用户 w # 登录用户及活动

组管理

groups # 查看当前用户所属组 groupadd newgroup # 创建组 groupdel newgroup # 删除组 gpasswd -a user group # 将用户添加到组 gpasswd -d user group # 将用户移出组

切换用户

su - username # 切换用户(- 加载环境变量) sudo -i # 切换到 root sudo -u user command # 以指定用户身份执行命令


### Shell 基础(Bash/Zsh)

Arch Linux 默认为 Bash。推荐安装 Zsh 获得更好的体验:

bash sudo pacman -S zsh zsh-completions zsh-syntax-highlighting chsh -s /usr/bin/zsh # 切换默认 shell(注销重登生效)


**配置文件:**
- **Bash**:`~/.bashrc`(交互式 shell 配置),`~/.bash_profile`(登录 shell)
- **Zsh**:`~/.zshrc`

**常用别名配置(添加到 ~/.bashrc 或 ~/.zshrc):**

bash alias ll='ls -lah' alias la='ls -A' alias l='ls -CF' alias ..='cd ..' alias ...='cd ../..' alias cls='clear' alias grep='grep --color=auto' alias rm='rm -I' # 删除前确认


**PATH 环境变量:**

bash export PATH="$HOME/.local/bin:$PATH" # 添加到 ~/.bashrc echo $PATH # 查看当前 PATH which commandname # 查看命令所在路径


**环境变量:**

bash echo $HOME # 家目录 echo $USER # 当前用户名 echo $SHELL # 当前 shell echo $LANG # 系统语言 env # 列出所有环境变量 export VAR=value # 设置环境变量


> 对配置文件修改后,执行 `source ~/.bashrc` 或重开终端即可生效。

### 软链接与硬链接

bash

软链接(符号链接)——指向文件路径,类似 Windows 快捷方式

ln -s /path/to/target link_name # 创建软链接

软链接可跨文件系统,可指向目录,删除目标文件则链接失效

硬链接——多个文件名指向同一 inode(同一数据块)

ln target link_name # 创建硬链接

硬链接只能在同文件系统内,不可指向目录

删除一个硬链接不影响其他硬链接,所有链接删除后才释放数据

查看 inode

ls -li file # -i 显示 inode 编号 stat file # 更详细的文件信息


> **实际应用**:软链接常用于管理配置文件版本、管理 dotfiles、创建快捷方式。例如 `~/.config/nvim` → `~/dotfiles/nvim`。

### 文本处理基础

bash

grep — 文本搜索

grep "pattern" file.txt # 查找匹配行 grep -i "pattern" file.txt # 忽略大小写 grep -r "pattern" /path/to/dir/ # 递归搜索目录 grep -n "pattern" file.txt # 显示行号 grep -v "pattern" file.txt # 反向匹配(不含 pattern 的行) grep -c "pattern" file.txt # 统计匹配行数 grep "pattern" file1 file2 # 搜索多个文件 command | grep "pattern" # 管道过滤

sed — 流编辑器(文本替换)

sed 's/old/new/' file.txt # 替换每行第一个匹配 sed 's/old/new/g' file.txt # 替换全部匹配 sed 's/old/new/2' file.txt # 替换每行第二个匹配 sed -i 's/old/new/g' file.txt # 直接修改文件(原地编辑) sed -i.bak 's/old/new/g' file.txt # 原地编辑并备份原文件 sed '/pattern/d' file.txt # 删除匹配行

awk — 文本分析工具

awk '{print $1}' file.txt # 打印第一列 awk -F: '{print $1, $3}' /etc/passwd # 以:分割,打印第1、3列 awk '/error/ {print NR, $0}' log.txt # 查找含 error 的行并显示行号

其他实用命令

sort file.txt # 排序 uniq # 去重(需先排序) wc -l file.txt # 统计行数 head -n 20 file.txt # 查看前 20 行 tail -n 20 file.txt # 查看后 20 行 tail -f file.txt # 实时跟踪文件追加内容 tee output.txt # 同时输出到屏幕和文件 diff file1 file2 # 比较文件差异


### 文件系统挂载与管理

bash

查看磁盘和分区

lsblk # 列出块设备(简略) lsblk -f # 列出块设备(含文件系统) sudo fdisk -l # 查看磁盘分区表 blkid # 查看分区 UUID 和类型

挂载/卸载

sudo mount /dev/sdX1 /mnt # 挂载分区到 /mnt sudo mount -o "uid=1000,gid=1000" /dev/sdX1 /mnt # 指定所有者 sudo umount /mnt # 卸载 sudo umount -l /mnt # 强制卸载(延迟)

查看已挂载文件系统

mount | grep /dev findmnt # 树形显示挂载点

自动挂载(/etc/fstab)

/etc/fstab 格式:设备 挂载点 文件系统 选项 dump pass

示例:UUID=xxxx-xxxx /mnt/data ext4 defaults 0 2


### 常用终端命令(基础)

bash ls /path # 查看目录内容 pwd # 当前路径 cd /path # 切换目录 cp source dest # 复制 cp -r source dest # 复制目录 rm file # 删除 mv old new # 移动/重命名 mkdir dir # 创建目录 cat file # 查看文件内容 sudo command # 以 root 执行


### Pacman 包管理

bash sudo pacman -S pkg # 安装 sudo pacman -Syu # 更新系统 sudo pacman -R pkg # 删除 sudo pacman -Rs pkg # 删除及其依赖 sudo pacman -Rns pkg # 删除、依赖及配置 sudo pacman -Sc # 清理缓存 sudo pacman -Ss keyword # 搜索 pacman -F command # 查询命令属于哪个包


### systemd-networkd 与 systemd-resolved

如果不需要 NetworkManager 的 GUI 网络管理,systemd-networkd 提供轻量级替代方案:

**systemd-networkd 基础配置:**

有线网络 `/etc/systemd/network/20-wired.network`:

ini [Match] Name=en*

[Network] DHCP=yes

静态 IP:

Address=192.168.1.10/24

Gateway=192.168.1.1

DNS=1.1.1.1 9.9.9.9


无线网络 `/etc/systemd/network/25-wireless.network`:

ini [Match] Name=wl*

[Network] DHCP=yes


**配合 iwd 管理 WiFi:**

bash sudo pacman -S iwd

编辑 /etc/iwd/main.conf:

[General] EnableNetworkConfiguration=true

sudo systemctl enable --now iwd systemd-networkd systemd-resolved


**启用 systemd-networkd:**

bash

先禁用 NetworkManager(二者冲突)

sudo systemctl disable --now NetworkManager sudo systemctl enable --now systemd-networkd systemd-resolved

替换 /etc/resolv.conf

sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

查看网络状态

networkctl status networkctl list


**systemd-resolved DNS over TLS:**

bash

编辑 /etc/systemd/resolved.conf

[Resolve] DNS=1.1.1.1#cloudflare-dns.com 9.9.9.9#dns.quad9.net DNSOverTLS=yes DNSSEC=yes Cache=yes

sudo systemctl restart systemd-resolved resolvectl status # 验证 DoT


### systemd 服务与系统管理

**服务管理:**

bash systemctl start name # 启动 systemctl stop name # 停止 systemctl enable name # 开机启动 systemctl disable name # 取消开机启动 systemctl status name # 查看状态 systemctl enable --now name # 开机启动并立即启动 systemctl restart name # 重启 systemctl reload name # 重载配置(不中断服务) systemctl mask name # 完全禁用(无法手动启动) systemctl unmask name # 恢复


**查看服务状态:**

bash systemctl list-units --type=service # 列出所有服务 systemctl list-units --failed # 列出失败的服务 systemctl list-dependencies name # 查看依赖树 systemctl show name # 查看完整属性


**systemd 定时器(替代 cron):**

bash

创建定时器 /etc/systemd/system/mytask.timer

[Unit] Description=My weekly task

[Timer] OnCalendar=weekly Persistent=true

[Install] WantedBy=timers.target

创建对应的服务 /etc/systemd/system/mytask.service

[Unit] Description=My weekly task script

[Service] Type=oneshot ExecStart=/usr/local/bin/mytask.sh

启用定时器

sudo systemctl enable --now mytask.timer

查看所有定时器

systemctl list-timers --all


**日志管理(journalctl):**

bash journalctl -b # 本次启动日志 journalctl -b -1 # 上次启动日志 journalctl -u service # 指定服务日志 journalctl -k # 内核日志 journalctl -p 3 -b # 错误级别(0-7),本次启动 journalctl -f # 实时跟踪 journalctl --since "1 hour ago" # 最近1小时 journalctl --until "2024-01-01" # 截止日期


**系统分析:**

bash

启动时间分析

systemd-analyze # 总启动时间 systemd-analyze blame # 各服务启动耗时(降序) systemd-analyze critical-chain # 关键启动链 systemd-analyze plot > boot.svg # 生成启动图

检查单元文件

systemd-analyze verify /etc/systemd/system/myservice.service

查看 systemd 版本

systemctl --version


**Target(运行级别):**

bash

查看当前 target

systemctl get-default

设置默认 target

sudo systemctl set-default multi-user.target # CLI 模式 sudo systemctl set-default graphical.target # 图形模式

切换 target(不修改默认设置)

sudo systemctl isolate multi-user.target sudo systemctl isolate graphical.target


**自定义服务单元:**

ini

/etc/systemd/system/myapp.service

[Unit] Description=My Application After=network.target Wants=network-online.target

[Service] Type=simple User=myuser WorkingDirectory=/opt/myapp ExecStart=/usr/bin/myapp --config /etc/myapp/config.conf Restart=on-failure RestartSec=5 LimitNOFILE=65536

[Install] WantedBy=multi-user.target


启用自定义服务:

bash sudo systemctl daemon-reload # 重载所有单元文件 sudo systemctl enable --now myapp.service sudo journalctl -u myapp -f # 查看日志


### sudoedit 编辑配置文件

最佳实践——使用普通用户权限编辑系统文件:

bash EDITOR=vim sudoedit /path/to/config


### Pacman 进阶用法

bash

查看已安装包的详细信息

pacman -Qi package_name

查看包所安装的文件列表

pacman -Ql package_name

某文件属于哪个包

pacman -Qo /path/to/file

列出所有显式安装的包(非依赖)

pacman -Qe

查看孤儿包(无用的依赖)

pacman -Qdt

搜索已安装的包

pacman -Qs keyword

查看软件包依赖树

pactree package_name

检查损坏的依赖

sudo pacman -Dk


### AUR 使用指南

Yay 常用命令:

bash yay -S package # 安装(AUR 和官方源都可) yay -Syu # 升级所有包 yay -Ss keyword # 搜索(含 AUR) yay -Qi package # 查看信息 yay -Rns package # 彻底卸载 yay -Yc # 清理不需要的依赖


AUR 安全建议:
- 安装前查看 PKGBUILD 文件:`yay -G package && cat package/PKGBUILD`
- 关注 AUR 包的评价和投票数
- 优先选择 `-bin` 版本(预编译)以节省构建时间
- 对于频繁更新的 AUR 包可考虑 `paru`(Rust 版替代)

**Paru(yay 替代品):**

bash

安装 paru

sudo pacman -S --needed base-devel git git clone https://aur.archlinux.org/paru.git cd paru && makepkg -si

常用命令(与 yay 高度相似)

paru -S package # 安装 paru -Syu # 更新 paru -Ss keyword # 搜索 paru -Rns package # 卸载 paru -c # 清理孤立依赖

优势:更快的依赖解析,更好的 PKGBUILD 审查界面


### systemd 用户服务

用户级 systemd 服务(无需 root)适合管理桌面应用的后台进程:

bash

用户服务文件位置

~/.config/systemd/user/ # 自定义用户服务 /usr/lib/systemd/user/ # 包安装的用户服务

用户服务管理(无需 sudo)

systemctl --user start service_name systemctl --user enable service_name systemctl --user enable --now service_name systemctl --user status service_name systemctl --user list-unit-files

创建自定义用户服务示例 ~/.config/systemd/user/myapp.service

[Unit] Description=My Background App After=graphical-session.target

[Service] Type=simple ExecStart=/usr/bin/myapp --daemon Restart=on-failure

[Install] WantedBy=default.target

启用

systemctl --user daemon-reload systemctl --user enable --now myapp.service

注意:用户服务在用户登出时默认终止

如需保持运行,运行:sudo loginctl enable-linger $USER


**常用桌面用户服务:**

bash

PipeWire(音频)

systemctl --user enable --now wireplumber

Syncthing(文件同步)

systemctl --user enable --now syncthing

用户级 Docker(rootless)

systemctl --user enable --now docker

Emacs daemon

systemctl --user enable --now emacs


### Pacman Hooks(自动触发操作)

Pacman 支持在安装/升级/删除包前后自动执行操作。自定义 hooks 位于 `/etc/pacman.d/hooks/`。

**常用 pacman hooks 示例:**

**1. 自动清理包缓存:**

ini

/etc/pacman.d/hooks/clean_package_cache.hook

[Trigger] Operation = Upgrade Operation = Install Operation = Remove Type = Package Target = *

[Action] Description = Cleaning pacman cache... When = PostTransaction Exec = /usr/bin/paccache -rk 2


**2. 内核更新后自动重建 initramfs(系统默认已有):**

ini

/etc/pacman.d/hooks/90-mkinitcpio-install.hook

[Trigger] Type = Path Target = usr/lib/modules/*/vmlinuz

[Action] Description = Updating linux initcpios... When = PostTransaction Exec = /usr/bin/mkinitcpio -p linux


**3. 更新后自动更新 GRUB 配置:**

ini

/etc/pacman.d/hooks/update-grub.hook

[Trigger] Operation = Upgrade Type = Package Target = linux Target = linux-lts Target = linux-zen

[Action] Description = Updating GRUB config... When = PostTransaction Exec = /usr/bin/grub-mkconfig -o /boot/grub/grub.cfg


**4. 更新后自动重建 AUR 包的 DKMS 模块:**
某些 DKMS 模块在内核更新后需要重建(如 `nvidia-dkms` 的 hook 已自动处理)。

**管理 hooks:**

bash

查看系统已安装的 hooks

ls /etc/pacman.d/hooks/ ls /usr/share/libalpm/hooks/

测试 hook(不实际执行)

将 hook 临时移出目录,确认无误后移回


> **注意**:不要创建会互相冲突的 hooks(如多个 hook 同时重建 initramfs)。测试新 hook 前建议创建 Btrfs/Timeshift 快照。

### Flatpak(沙盒化应用管理)

Flatpak 提供与系统隔离的应用运行环境,适合获取最新版本应用或运行专有软件:

bash

安装 Flatpak

sudo pacman -S flatpak

添加 Flathub 仓库(最大的 Flatpak 应用商店)

flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

重启系统或重新登录后,Flathub 应用会出现在应用菜单中


**基本使用:**

bash

搜索应用

flatpak search firefox

安装应用

flatpak install flathub org.mozilla.firefox

运行应用

flatpak run org.mozilla.firefox

列出已安装应用

flatpak list

更新所有 Flatpak 应用

flatpak update

卸载应用

flatpak uninstall org.mozilla.firefox

清理未使用的运行时

flatpak uninstall --unused


**Flatpak vs Pacman vs AUR 对比:**

| 特性 | Pacman | AUR | Flatpak |
|------|--------|-----|---------|
| 沙盒隔离 | 无 | 无 | 有(Bubblewrap) |
| 更新速度 | 依赖发行版 | 依赖维护者 | 上游直接发布 |
| 安全性 | 高(官方签名) | 需审查 PKGBUILD | 中(沙盒+权限管理) |
| 磁盘占用 | 最小 | 小 | 较大(独立运行时) |
| 桌面集成 | 完美 | 完美 | 良好(需配置主题) |
| 适用场景 | 系统核心组件 | 社区维护包 | 专有软件/最新版本 |

**Flatpak 权限管理(Flatseal):**

bash

图形化管理 Flatpak 应用权限

flatpak install flathub com.github.tchx84.Flatseal

可精细控制每个应用的:网络、文件系统、设备、D-Bus 等权限


**Flatpak 主题整合(让 Flatpak 应用使用系统主题):**

bash

安装与系统匹配的 Flatpak 主题

KDE Breeze 主题

flatpak install flathub org.gtk.Gtk3theme.Breeze

查看已安装主题

flatpak list | grep theme


> **选择建议**:系统工具和开发工具用 Pacman/AUR,专有软件(Discord、Slack、Spotify)和需要最新版本的应用优先考虑 Flatpak。

### systemd Journal 管理

bash

查看本次启动的日志

journalctl -b

查看上次启动的日志(排查崩溃)

journalctl -b -1

查看指定服务的日志

journalctl -u NetworkManager

查看指定优先级以上的日志(0=emerg, 1=alert, 2=crit, 3=err)

journalctl -p 3 -b

查看内核日志

journalctl -k

实时跟踪日志

journalctl -f

限制日志大小(保留 500MB)

sudo journalctl --vacuum-size=500M


### Arch Build System (ABS) 与 Clean Chroot 构建

对于需要从源码编译的 AUR 包,使用干净 chroot 可确保构建环境一致、隔离依赖污染:

bash

安装 devtools

sudo pacman -S devtools

创建 clean chroot(首次使用)

mkdir -p ~/.cache/chroot/root mkarchroot ~/.cache/chroot/root base-devel

在干净 chroot 中构建

extra-x86_64-build -- -r ~/.cache/chroot/root

更新 chroot

sudo arch-nspawn ~/.cache/chroot/root pacman -Syu


**查看包构建信息:**

bash

下载 PKGBUILD

yay -G package_name cd package_name cat PKGBUILD

手动构建

makepkg -si

-s:自动安装依赖

-i:安装构建好的包

-c:构建后清理

查看构建的包

namcap *.pkg.tar.zst # 检查包质量


### 文件解压缩

除了 `tar` 命令,KDE 下的 `ark` 可以配合 Dolphin 文件管理器右键解压。但解压 Windows 下创建的压缩包(含中文文件名)可能会乱码。使用 **Unarchiver** 可以避免此问题:

bash sudo pacman -S unarchiver unar xxx.zip # 解压,自动处理编码问题


常用压缩/解压命令速查:

bash

tar

tar -czvf archive.tar.gz ./folder # 打包压缩 tar -xzvf archive.tar.gz # 解压

zip

zip -r archive.zip ./folder # 压缩为 zip unzip archive.zip # 解压 zip

7z

7z a archive.7z ./folder # 压缩 7z x archive.7z # 解压

rar

unrar x archive.rar # 解压 rar


### 磁盘空间信息

**df 命令:**

bash df -h # 人类可读格式查看文件系统占用 df -i # 查看 inode 使用情况 du -sh /path/to/dir # 查看某目录总大小 du -sh /* 2>/dev/null | sort -rh | head -15 # 根目录下最大 15 个目录


**Filelight(图形化磁盘分析):**

bash sudo pacman -S filelight

打开 Filelight 即可直观看到磁盘空间占用,点击区块可深入分析子目录。类似 Windows 下的 WizTree。

**命令行替代(ncdu):**

bash sudo pacman -S ncdu ncdu / # 交互式磁盘分析,方向键导航,d 删除


### 磁盘空间清理

**清理 pacman 缓存(推荐保留最近 3 个版本):**

bash sudo pacman -S pacman-contrib paccache -rk3 # 仅保留最近 3 个版本 paccache -ruk0 # 删除所有未安装包的缓存


**自动清理缓存(pacman hook):**

创建 `/etc/pacman.d/hooks/clean_package_cache.hook`:

ini [Trigger] Operation = Upgrade Operation = Install Operation = Remove Type = Package Target = *

[Action] Description = Cleaning pacman cache... When = PostTransaction Exec = /usr/bin/paccache -rk 2


**清理 yay/paru 构建缓存:**

bash rm -rf ~/.cache/yay rm -rf ~/.cache/paru


**清理 systemd journal:**

bash journalctl --disk-usage # 查看日志占用 sudo journalctl --vacuum-time=30days # 保留 30 天 sudo journalctl --vacuum-size=200M # 保留 200MB


**查找大文件:**

bash find /home -type f -size +100M -exec ls -lh {} \; | sort -k5 -rh | head -20


### 硬件信息检测

**磁盘健康检测(Smartmontools):**

bash sudo pacman -S smartmontools sudo smartctl -A /dev/sda # SATA 硬盘 sudo smartctl -A /dev/nvme0n1 # NVMe 硬盘 sudo smartctl -d sat -A /dev/sdb # USB 外接硬盘

关注 `Reallocated_Sector_Ct`(重分配扇区数)和 `Power_On_Hours`(通电时间)。

**CPU 信息:**

bash

命令行

lscpu # CPU 架构/频率/缓存 cat /proc/cpuinfo | grep "model name" # CPU 型号

图形化(类似 CPU-Z)

sudo pacman -S cpu-x # archlinuxcn 源 yay -S cpu-x # AUR


**GPU 信息:**

bash

命令行

lspci -k | grep -A 3 -E "VGA|3D" glxinfo | grep "OpenGL" # 需要 mesa-utils

图形化

yay -S gpu-viewer


**完整硬件信息(Dmidecode):**

bash sudo pacman -S dmidecode sudo dmidecode # 全部信息(BIOS、内存频率等) sudo dmidecode -t memory # 仅内存信息 sudo dmidecode -t bios # 仅 BIOS 信息


**其他实用检测工具:**

bash

磁盘测速

sudo pacman -S hdparm sudo hdparm -Tt /dev/sda

USB 设备树

lsusb -t

PCI 设备树

lspci -tv

硬件探测器

sudo pacman -S hwdetect hwdetect --show-modules # 列出当前硬件所需的内核模块


### Timeshift 快照恢复

Timeshift 不仅是备份工具,更是系统"后悔药"。以下是不同场景的恢复方式:

**场景一:能进入桌面环境**

直接打开 Timeshift GUI,选择快照 → 根据提示还原即可。

**场景二:无法进入桌面但能进入 tty**

按 `Ctrl + Alt + F2~F6` 进入 tty 终端,执行:

bash sudo timeshift --list # 列出所有快照 sudo timeshift --restore --snapshot '20XX-XX-XX_XX-XX-XX' --skip-grub

根据提示完成还原,重启


**场景三:系统完全无法启动(通过 Live USB 恢复)**

bash

从 Arch Live USB 启动,连接网络后:

sudo pacman -Sy timeshift sudo timeshift --restore --snapshot-device /dev/sdXY # 指定快照所在分区

后续步骤同场景二


**Btrfs 快照恢复后 /home 无法挂载:**

Timeshift 恢复 Btrfs 快照后,子卷 ID 可能变更。若系统启动失败,进入 emergency shell 后修改 fstab:

bash vim /etc/fstab

删除 / 和 /home 条目中的 subvolid=xxx 参数,仅保留 subvol=/@ 和 subvol=/@home

保存后重启

也可通过以下命令查看正确子卷 ID 后手动更正:

sudo btrfs sub list -u /


**定时快照不生效:**

确保 cronie 服务已启用:

bash sudo systemctl enable --now cronie.service


### rsync 文件同步与备份

`rsync` 已取代 `scp`,支持增量传输、压缩、保留权限等特性:

bash

基本传输

rsync foo.txt user@server:/home/user/ rsync -avz ./folder/ user@server:/home/user/folder/ # 目录同步(归档+压缩)

常用参数:

-a: 归档模式(保留权限、时间戳等)

-v: 显示详细信息

-z: 传输时压缩

-P: 显示进度 + 支持断点续传

--delete: 删除目标端多余文件(使两端完全同步)

-n: 干运行(仅显示将要执行的操作,不实际执行)

本地备份(常用)

rsync -avP --delete /home/user/Documents/ /mnt/backup/Documents/


---

## 九、系统维护与安全

### 1. 系统更新最佳实践

**更新前:**
1. 查看 [Arch Linux News](https://archlinux.org/news/) 是否有重大变更
2. 检查 pacman 提示的 `.pacnew` 文件
3. 如果是重大更新(内核、显卡驱动),建议先创建快照

**更新命令:**

bash

完整更新

sudo pacman -Syu

包括 AUR

yay -Syu

仅更新指定包

sudo pacman -S package_name

更新后重启(内核更新后必须重启)


**检查系统服务状态:**

bash

查看所有失败的服务

systemctl --failed

查看本次启动耗时

systemd-analyze

查看各服务启动耗时

systemd-analyze blame

查看关键启动链耗时

systemd-analyze critical-chain


### 2. 处理 .pacnew 和 .pacsave 文件

更新后,Pacman 会在配置文件有冲突时生成 `.pacnew`(新配置)或 `.pacsave`(备份):

bash

查找所有 .pacnew 文件

sudo find /etc -name "*.pacnew"

查找 .pacsave 文件

sudo find /etc -name "*.pacsave"

使用 meld 比较差异后合并

sudo pacman -S meld sudo meld /etc/xxx /etc/xxx.pacnew

或使用 pacdiff 工具自动处理(推荐)

sudo pacman -S pacman-contrib sudo pacdiff


### 3. 镜像源管理与 Reflector

bash

手动选择最快镜像源

sudo pacman -S reflector

自动更新镜像源(按速度排序,仅 HTTPS)

sudo reflector --latest 10 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

配置定时更新(每周自动更新镜像列表)

sudo systemctl enable --now reflector.timer

使用率镜像源测试:

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


### 4. 备份策略

**Timeshift(推荐新手,支持 Btrfs 快照):**

bash sudo pacman -S timeshift sudo systemctl enable --now cronie

打开 Timeshift GUI 配置定时快照

Btrfs 用户选择 Btrfs 模式(高效)

ext4 用户选择 RSYNC 模式


**手动 Btrfs 快照:**

bash

创建快照

sudo btrfs subvolume snapshot /home /home/.snapshots/$(date +%Y%m%d_%H%M%S)

回滚快照(需要 live USB)

sudo btrfs subvolume set-default /mnt/@snapshot


**Snapper(Btrfs 快照管理,自动化定时快照):**

bash

安装

sudo pacman -S snapper

为根文件系统创建配置(注意:这会修改 / 的子卷布局)

sudo snapper -c root create-config /

查看配置

sudo snapper list-configs

手动创建快照

sudo snapper -c root create -d "更新前快照" sudo snapper -c root create -t pre -p # pre 快照(用于操作前后对比)

执行操作...

sudo snapper -c root create -t post --pre-number N # post 快照

列出快照

sudo snapper -c root list

查看快照间差异

sudo snapper -c root status N..M sudo snapper -c root diff N..M

删除快照

sudo snapper -c root delete N

回滚快照

sudo snapper -c root undochange N..0

启用自动定时快照(按小时/天/月创建)

sudo systemctl enable --now snapper-timeline.timer sudo systemctl enable --now snapper-cleanup.timer


> **Snapper vs Timeshift:** Snapper 比 Timeshift 更灵活(支持 pre/post 快照、差异对比、命令行操作),但配置稍复杂。Timeshift 界面友好,适合新手。

**重要数据备份:**

bash

rsync 远程备份

rsync -avz --delete /home/user /backup/drive

加密备份(使用 tar + gpg)

tar cz folder | gpg -c > backup.tar.gz.gpg

定期备份 cron 任务

sudo crontab -e

添加:0 3 * * 0 rsync -avz --delete /home /mnt/backup/


### 5. 安全加固

**防火墙(UFW):**

bash sudo pacman -S ufw sudo ufw default deny # 默认拒绝所有入站 sudo ufw allow from 192.168.1.0/24 # 信任局域网 sudo ufw allow ssh # 开放 SSH sudo ufw limit ssh # SSH 限速防爆破 sudo ufw enable sudo systemctl enable --now ufw sudo ufw status verbose


**Fail2ban(SSH 防爆破):**

bash sudo pacman -S fail2ban sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo systemctl enable --now fail2ban

查看被 ban 的 IP

sudo fail2ban-client status sshd


**系统安全审计:**

bash

检查开放端口

sudo ss -tulpn

查看监听服务

sudo lsof -i -P -n | grep LISTEN

检查 SetUID 文件(突然增加的 SUID 可能表示入侵)

sudo find /usr -type f -perm -4000 > /tmp/suid_before

定期对比

系统完整性检查(AIDE)

sudo pacman -S aide sudo aideinit

定期检查:sudo aide --check


**SSH 密钥配置(免密码登录):**

bash

1. 生成密钥对(客户端)

ssh-keygen -t ed25519 -C "your_email@example.com"

ed25519 比 RSA 更安全更快,兼容所有现代 SSH 服务器

如需兼容老旧系统:ssh-keygen -t rsa -b 4096

2. 复制公钥到服务器(两种方式)

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip # 方式一

或手动复制:

cat ~/.ssh/id_ed25519.pub | ssh user@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

3. 测试免密登录

ssh user@server_ip

4. 配置文件优化(~/.ssh/config)

使 SSH 连接更便捷

Host myserver

HostName server.example.com
Port 2222
User myuser
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60

连接方式:ssh myserver


**使用 SSH 代理(ssh-agent):**

bash

自动启动 ssh-agent(添加到 ~/.bashrc 或 ~/.zshrc)

eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519

或使用 keychain(推荐)

yay -S keychain

添加到 ~/.bashrc:

eval $(keychain --eval --quiet ~/.ssh/id_ed25519)


**SSH 安全配置(`/etc/ssh/sshd_config`):**

conf Port 2222 # 更换默认端口(降低扫描风险) PermitRootLogin no # 禁止 root 登录 PasswordAuthentication no # 禁用密码认证(使用密钥) PubkeyAuthentication yes AllowUsers yourusername # 限制可登录用户 MaxAuthTries 3 # 最大认证尝试次数 ClientAliveInterval 300 # 客户端超时断连


重启 SSH 服务:

bash sudo systemctl restart sshd


**WireGuard VPN(轻量级 VPN):**

bash

安装

sudo pacman -S wireguard-tools

生成密钥对

wg genkey | sudo tee /etc/wireguard/private.key sudo chmod 600 /etc/wireguard/private.key sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

创建配置 /etc/wireguard/wg0.conf

[Interface] Address = 10.0.0.2/24 # 客户端 IP(与服务器同网段) PrivateKey = <客户端私钥> DNS = 10.0.0.1 # 使用 VPN 的 DNS

[Peer] PublicKey = <服务器公钥> Endpoint = your-server.com:51820 AllowedIPs = 0.0.0.0/0, ::/0 # 所有流量走 VPN(全隧道)

AllowedIPs = 10.0.0.0/24 # 仅内网流量走 VPN(分流)

PersistentKeepalive = 25

启动 WireGuard

sudo systemctl enable --now wg-quick@wg0

查看状态

sudo wg show


**DNS 隐私与安全:**

bash

安装 systemd-resolved(DNS 缓存与加密)

sudo pacman -S systemd-resolved sudo systemctl enable --now systemd-resolved

使用 DNS over TLS(DoT)

sudo vim /etc/systemd/resolved.conf [Resolve] DNS=1.1.1.1#cloudflare-dns.com 9.9.9.9#dns.quad9.net DNSOverTLS=yes DNSSEC=yes Cache=yes

替换 /etc/resolv.conf

sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

或安装 stubby(DNS over TLS 独立守护进程)

sudo pacman -S stubby sudo systemctl enable --now stubby

验证 DNS 加密

sudo pacman -S dnscrypt-proxy # 另一个选择:DNSCrypt


**网络连接检查与诊断:**

bash

查看路由表

ip route

查看 DNS 解析

resolvectl status # systemd-resolved 状态

测试 DNS 安全

dig +short txt qnamemintest.internet.nl # 测试 DNSSEC

端口扫描(检查本机开放端口)

sudo nmap -sS localhost


### 6. AppArmor(强制访问控制)

AppArmor 通过为每个应用程序定义安全配置文件,限制其可访问的文件、网络、capabilities 等资源。比 SELinux 更易配置,已被 Ubuntu/openSUSE 默认使用。

**安装与启用:**

bash

安装 AppArmor

sudo pacman -S apparmor

启用 AppArmor(需要内核参数)

编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 中添加:

apparmor=1 security=apparmor

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

启用服务

sudo systemctl enable --now apparmor


**查看 AppArmor 状态:**

bash

查看当前加载的配置文件

sudo aa-status

查看哪些进程被 AppArmor 限制

sudo ps auxZ | grep -v unconfined

查看审计日志

sudo journalctl -k | grep -i apparmor


**安装预配置的 AppArmor 配置文件:**

bash

安装社区维护的配置文件集

sudo pacman -S apparmor-profiles

AUR 中有更多配置文件

yay -S apparmor-profiles-git


**为自定义应用创建配置文件:**

bash

使用 aa-genprof 生成配置文件

sudo aa-genprof /usr/bin/myapp

在另一终端运行应用,触发各种操作

回到 aa-genprof 按 S(扫描)→ A(允许)或 D(拒绝)

按 F 完成

将配置文件设为 enforce 模式

sudo aa-enforce /etc/apparmor.d/usr.bin.myapp

切换到 complain 模式(仅记录不阻止,调试用)

sudo aa-complain /etc/apparmor.d/usr.bin.myapp


> **建议**:桌面用户优先启用 AppArmor + 防火墙(UFW)。AppArmor 对浏览器(Firefox)等面向网络的应用程序有现成配置文件,能有效限制漏洞利用的波及范围。

### 7. 内核管理

**查看当前内核信息:**

bash

查看运行中的内核版本

uname -r

查看已安装的内核

ls /boot/vmlinuz-*

查看所有可用的官方内核包

pacman -Ss linux linux-lts linux-zen linux-hardened

查看当前内核配置(如编译时启用此选项)

zcat /proc/config.gz | grep CONFIG_XXX


**Arch Linux 官方内核选择:**

| 内核包 | 特点 | 推荐场景 |
|--------|------|----------|
| `linux` | 最新稳定内核,附带少量补丁 | 大多数用户的默认选择 |
| `linux-lts` | 长期支持版(数年维护一个主版本) | 追求稳定性、NVIDIA 驱动兼容性问题、服务器 |
| `linux-zen` | 针对桌面交互优化,使用 MuQSS/BBR 等 | 桌面用户追求更低延迟和响应速度 |
| `linux-hardened` | 安全加固版,启用更多内核防御机制 | 对安全性有较高要求的场景 |

> **建议:** 安装 `linux-lts` 作为备用内核。若主内核更新后出现兼容性问题,可从引导菜单选择 LTS 内核启动。

**安装与管理多内核:**

bash

安装 LTS 内核(与当前内核共存)

sudo pacman -S linux-lts linux-lts-headers

安装后 hook 会自动生成新 initramfs

引导加载程序(GRUB/systemd-boot)自动检测新内核条目

重启后在引导菜单中选择相应内核即可切换

删除不需要的内核版本

sudo pacman -R linux linux-headers

删除后记得重新生成引导配置

sudo grub-mkconfig -o /boot/grub/grub.cfg # GRUB 用户


**内核模块管理:**

bash

列出所有已加载模块

lsmod

查看模块详细信息

modinfo module_name

手动加载/卸载模块

sudo modprobe module_name # 加载 sudo modprobe -r module_name # 卸载

开机自动加载模块

echo "module_name" | sudo tee /etc/modules-load.d/my-modules.conf

禁止加载(黑名单)某模块

echo "blacklist module_name" | sudo tee /etc/modprobe.d/blacklist.conf

为模块设置参数

echo "options module_name param=value" | sudo tee /etc/modprobe.d/module-options.conf


常用模块参数示例(`/etc/modprobe.d/`):

conf

解决 Intel 显卡音频问题

options snd_hda_intel power_save=0

禁用 NVMe 省电模式(缓解掉盘问题)

options nvme apst=0


**内核参数配置(kernel command line):**
内核参数在系统引导时传递给内核,用于控制各种行为:

bash

查看当前使用的内核参数

cat /proc/cmdline


常用内核参数及说明:
| 参数 | 作用 |
|------|------|
| `quiet` | 减少启动时内核信息输出 |
| `nowatchdog` | 关闭硬件看门狗(略微提升性能) |
| `mitigations=off` | 关闭 CPU 漏洞缓解措施(提升性能,降低安全性) |
| `iommu=pt` | 开启 IOMMU 直通模式(VM 显卡直通所需) |
| `acpi_osi=!Windows 2012` | 解决特定笔记本 ACPI 兼容性问题 |
| `noibrs` / `noibpb` | 旧 CPU 上关闭 Spectre v2 缓解(提升性能) |
| `pcie_aspm=off` | 关闭 ASPM 省电(解决某些 NVMe/PCIe 设备问题) |
| `acpi_backlight=native` | 切换背光控制方式(解决亮度调节无效) |

配置内核参数的方法取决于引导加载程序类型:

**systemd-boot 用户:**

conf

/boot/loader/entries/arch.conf

options root=UUID=xxxxxxxx rw quiet nowatchdog mitigations=off


**GRUB 用户:**

bash

编辑 /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet nowatchdog"

然后重新生成配置

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


**mkinitcpio 重新生成 initramfs:**

bash

为所有已安装内核重新生成 initramfs

sudo mkinitcpio -P

为特定内核生成

sudo mkinitcpio -k linux-lts -g /boot/initramfs-linux-lts.img

查看当前 initramfs 包含哪些 hook

lsinitcpio /boot/initramfs-linux.img


> **注意:** 内核包更新时,pacman hook 会自动重新生成 initramfs,一般无需手动操作。但在修改 `/etc/mkinitcpio.conf`(如添加 encrypt/lvm2 hook)或安装新内核后,需要手动运行上述命令。

### 8. 日志管理

systemd-journald 是 Arch Linux 的默认日志系统,取代了传统的 syslog。

**基本日志查看:**

bash

查看完整系统日志(通常最后几页)

journalctl -xe

本次启动的所有日志

journalctl -b

上一次启动的日志(排查启动失败问题)

journalctl -b -1

列出所有可回溯的启动记录

journalctl --list-boots


**高级过滤:**

bash

按服务单元过滤

journalctl -u sshd journalctl -u NetworkManager.service journalctl -u sshd -u nginx # 多服务

按时间过滤

journalctl --since "2024-01-01" --until "2024-01-02" journalctl --since "1 hour ago" journalctl --since "yesterday" --until "now"

按优先级/紧急程度

0: emerg, 1: alert, 2: crit, 3: err, 4: warning, 5: notice, 6: info, 7: debug

journalctl -p 3 -b # 本次启动的错误及以上

内核日志

journalctl -k journalctl -k -p 3 # 内核错误

实时跟踪(类似 tail -f)

journalctl -f journalctl -u sshd -f # 跟踪特定服务

按可执行文件路径

journalctl /usr/bin/sshd

按 PID

journalctl _PID=1234

按命令

journalctl /usr/bin/pacman # pacman 操作记录


**journald 持久化配置:**
默认 journald 将日志保存在内存(`/run/log/journal`),重启后丢失。配置持久化可保留历史日志用于排查:

bash

创建持久化目录即可启用持久化

sudo mkdir -p /var/log/journal

重启 journald

sudo systemctl restart systemd-journald


更精细的配置在 `/etc/systemd/journald.conf`:

ini [Journal] Storage=persistent # 持久化存储(auto 会在 /var/log/journal 存在时自动持久化) Compress=yes # 压缩旧日志节省空间 SystemMaxUse=500M # 日志最大总空间 SystemMaxFileSize=100M # 单个日志文件最大 MaxRetentionSec=2week # 最长保留时间(超过则清理) RuntimeMaxUse=100M # /run 中日志最大空间 ForwardToSyslog=no # 不转发传统 syslog


配置后重启服务:

bash sudo systemctl restart systemd-journald


**日志维护:**

bash

查看日志占用磁盘空间

journalctl --disk-usage

主动清理

sudo journalctl --vacuum-time=30days # 保留最近30天 sudo journalctl --vacuum-size=200M # 保留200MB sudo journalctl --vacuum-files=5 # 保留最后5个日志文件

轮转日志(手动触发,配合清理)

sudo journalctl --rotate


### 9. 定期维护清单

| 频率 | 任务 | 命令/说明 |
|------|------|-----------|
| 每日 | 系统更新 | `sudo pacman -Syu` |
| 每日 | 检查失败服务 | `systemctl --failed` |
| 每周 | 阅读 Arch Linux 新闻 | <https://archlinux.org/news/>(重大更新前务必查看) |
| 每周 | 检查 AUR 包更新 | AUR 助手(如 `yay -Syu --devel`) |
| 每月 | 检查 .pacnew 文件并合并 | `sudo pacdiff`(需安装 pacman-contrib) |
| 每月 | 清理孤立依赖 | `sudo pacman -Rns $(pacman -Qtdq)` |
| 每月 | 清理软件包缓存 | `sudo paccache -rk2`(保留最近2个版本) |
| 每月 | 清理日志 | `sudo journalctl --vacuum-size=200M` |
| 每月 | 检查系统服务耗时 | `systemd-analyze blame \| head -10` |
| 每季 | SSD Trim | `sudo fstrim -av`(已启用 `fstrim.timer` 则自动) |
| 每季 | 检查磁盘健康 | `sudo smartctl -A /dev/sda`(需安装 `smartmontools`) |
| 每季 | 检查大型文件/目录 | `du -sh /* 2>/dev/null \| sort -rh \| head -15` |
| 每季 | 文件系统检查 | 下次重启时:`sudo touch /forcefsck` |
| 半年 | 刷新 pacman 密钥 | `sudo pacman-key --refresh-keys` |
| 半年 | 更新 CPU 微码 | `sudo pacman -S intel-ucode` 或 `amd-ucode`(如已安装则自动更新) |
| 半年 | 检查开放端口与监听服务 | `sudo ss -tulpn` |
| 按需 | 更新镜像列表 | `sudo reflector --latest 10 --protocol https --sort rate --save /etc/pacman.d/mirrorlist` |
| 按需 | 检查系统完整性 | `sudo aide --check`(需安装 aide 并先运行 `sudo aideinit`) |
| 按需 | 健康检查综合命令 | `systemctl --failed && journalctl -p 3 -b -q --no-pager && df -h && free -h` |
| 按需 | 清理 AUR 构建缓存 | `rm -rf ~/.cache/yay && rm -rf ~/.cache/paru` |
| 按需 | 检查 pacman hook 日志 | `journalctl -u pacman-init.service` |
| 按需 | 搜索卸载包残留配置 | `sudo find /etc -name "*.pacsave" -o -name "*.pacorig"` |
| 按需 | 查看可安全删除的依赖 | `pacman -Qdtq`(确认后 `sudo pacman -Rns $(pacman -Qdtq)`) |
| 按需 | 按安装日期查看包 | `grep -E 'installed (linux|firefox)' /var/log/pacman.log` |

---

## 十、系统美化

> 建议:美化不应浪费过多时间,花最少的时间完成性价比最高的美化。

### 主题

系统设置 → 外观 → 全局主题 → 获取新全局主题,搜索使用 **Layan** 主题。

### 图标

bash

通过包管理器安装图标主题

sudo pacman -S papirus-icon-theme # Papirus(最流行,支持多种颜色) yay -S tela-icon-theme # Tela 扁平风 yay -S whitesur-icon-theme # WhiteSur macOS 风格 yay -S nordzy-icon-theme # Nord 配色


**KDE 设置:** 系统设置 → 外观 → 图标 → 获取新图标主题
**手动安装:** 解压到 `~/.local/share/icons/`(用户)或 `/usr/share/icons/`(系统)

### 光标主题

bash

安装光标主题

sudo pacman -S breeze-cursors # KDE 默认 yay -S capitaine-cursors # 流行光标 yay -S bibata-cursor-theme # Bibata 系列(多种样式) yay -S whitesur-cursor-theme # WhiteSur


**KDE 设置:** 系统设置 → 外观 → 光标
**全局配置:** 创建 `/usr/share/icons/default/index.theme`:

ini [Icon Theme] Inherits=Bibata-Modern-Classic

或通过 GTK 设置 `~/.config/gtk-3.0/settings.ini`:

ini [Settings] gtk-cursor-theme-name=Bibata-Modern-Classic


### SDDM 登录界面

**KDE 内置:** 系统设置 → 开机和关机 → 登录屏幕(SDDM) → 获取新登录屏幕,搜索 **Layan**。

**手动安装 SDDM 主题:**

bash yay -S sddm-theme-sugar-candy-git # 高度可定制(颜色、背景、字体) yay -S sddm-chili-theme # Chili 简洁风 yay -S sddm-nordic-theme # Nordic 风格


安装后编辑 `/etc/sddm.conf`(或 `/etc/sddm.conf.d/kde_settings.conf`):

ini [Theme] Current=sugar-candy

[Users] MaximumUid=60000 HideShells=/sbin/nologin,/bin/false


**SDDM 背景图设置:**

ini [Theme]

在 sugar-candy 中通过主题配置文件设置背景

或在 KDE 系统设置中直接修改 SDDM 背景


### 终端样式

**Konsole 配色:** konsole → 设置 → 编辑当前方案 → 外观,选择 `Red-Black`。
也可从 [KDE Store](https://store.kde.org/) 下载更多配色方案。

#### Shell 提示符美化

**Starship(推荐,跨 Shell)**:

bash sudo pacman -S starship

在 ~/.bashrc 或 ~/.zshrc 末尾添加:

eval "$(starship init bash)" # Bash

eval "$(starship init zsh)" # Zsh

配置 ~/.config/starship.toml

mkdir -p ~/.config cat > ~/.config/starship.toml << 'EOF' format = "$all" [git_branch] symbol = "🌱 " [package] symbol = "📦 " [rust] symbol = "🦀 " [nodejs] symbol = "⬢ " EOF


**Oh My Zsh + Powerlevel10k(Zsh 专属):**

bash sudo pacman -S zsh zsh-completions sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安装 powerlevel10k 主题

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \ ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

在 ~/.zshrc 中设置 ZSH_THEME="powerlevel10k/powerlevel10k"

重启终端后自动进入配置向导


#### LS_COLORS 增强

bash

vivid 提供更美观的目录/文件颜色

sudo pacman -S vivid echo 'export LS_COLORS="$(vivid generate dracula)"' >> ~/.bashrc


### Picom 合成器(X11 窗口特效)

如果你使用 X11 窗口管理器(如 i3、openbox),Picom 提供透明、阴影、模糊等特效:

bash sudo pacman -S picom


**基础配置(`~/.config/picom/picom.conf`):**

ini

阴影

shadow = true; shadow-radius = 7; shadow-opacity = 0.5;

窗口透明

opacity-rule = [ "90:class_g = 'Alacritty'", "80:class_g = 'Firefox'" ];

模糊

blur-backend = "kawase"; blur-method = "kawase"; blur-strength = 10;


**启用:**

bash picom --config ~/.config/picom/picom.conf &


### 壁纸管理

**KDE Plasma:** 右键桌面 → 配置桌面 → 壁纸,支持图片、幻灯片、动态壁纸。

bash

KDE 动态壁纸(支持 mp4/视频壁纸)

yay -S plasma6-wallpapers-wallpaper-engine-git

Variety 自动更换壁纸

sudo pacman -S variety

Nitrogen(轻量级 X11 壁纸管理器)

sudo pacman -S nitrogen nitrogen --set-zoom-fill --random ~/wallpapers/


### Kvantum 主题

bash sudo pacman -S kvantum

下载 Layan Kvantum 主题,配置后系统设置中的应用风格选择 kvantum。

### 统一 Qt 和 GTK 应用程序外观

KDE 下 GTK 应用可能不协调。以下方法可统一外观:

**方法一:安装 KDE GTK 集成(推荐)**

bash sudo pacman -S breeze-gtk kcm-gtk-config

在 系统设置 → 外观 → 应用程序风格 → 配置 GNOME/GTK 中设置 GTK 主题


**方法二:使用 Kvantum 统一(效果最佳)**
Kvantum 同时支持 Qt 和 GTK 的主题渲染:

bash

安装 kvantum 和 GTK 集成

sudo pacman -S kvantum # Kvantum 主题引擎(Qt6)

如需 Qt5 应用主题支持:

sudo pacman -S kvantum-qt5

在 Kvantum Manager 中选择主题

然后设置 GTK 使用 Kvantum:

编辑 ~/.config/gtk-3.0/settings.ini

gtk-theme-name=kvantum


**方法三:QGtkStyle(Qt 应用使用 GTK 主题)**

bash sudo pacman -S qgtkstyle

Qt 应用将自动使用当前 GTK 主题渲染


### GRUB 主题

1. 下载喜欢的主题(如 [grub2-themes](https://github.com/vinceliuice/grub2-themes))
2. `sudo cp -r theme-dir /usr/share/grub/themes/your-theme`
3. 编辑 `/etc/default/grub`:

bash GRUB_THEME="/usr/share/grub/themes/your-theme/theme.txt" GRUB_GFXMODE=1920x1080,auto # 推荐设置分辨率

4. 生成配置:

bash sudo grub-mkconfig -o /boot/grub/grub.cfg


**热门 GRUB 主题:**

bash yay -S grub2-themes-archlinux # Arch Linux 风格主题 yay -S grub-theme-vimix # Vimix 扁平风 yay -S grub2-theme-whitesur # WhiteSur 风格


### Plymouth 开机动画

Plymouth 提供图形化的开机启动动画,替代默认文字滚动:

bash sudo pacman -S plymouth


**配置 mkinitcpio:**
编辑 `/etc/mkinitcpio.conf`,在 `HOOKS` 中 `base udev` 后添加 `plymouth`:

bash HOOKS=(base udev plymouth autodetect ...)


**选择主题:**

bash

查看可用主题

ls /usr/share/plymouth/themes/

切换主题

sudo plymouth-set-default-theme -R spinner

或编辑 /etc/plymouth/plymouthd.conf 设置 Theme=spinner


**内核参数(GRUB):**
在 `GRUB_CMDLINE_LINUX_DEFAULT` 中添加 `quiet splash`:

bash GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"


**重新生成:**

bash sudo mkinitcpio -P sudo grub-mkconfig -o /boot/grub/grub.cfg


> NVIDIA 闭源驱动用户可能需要添加 `nvidia_drm.modeset=1` 内核参数。

### 字体配置与 Fontconfig

**查看系统字体:**

bash

列出所有已安装字体

fc-list | less

搜索特定字体

fc-list | grep -i "noto"

查看字体详情

fc-match "sans-serif"


**安装更多字体:**

bash

基础字体

sudo pacman -S ttf-dejavu ttf-liberation ttf-droid ttf-ubuntu-font-family

中文字体

sudo pacman -S noto-fonts-cjk # Noto 中日韩(约 100MB) sudo pacman -S adobe-source-han-sans-cn-fonts # 思源黑体 sudo pacman -S adobe-source-han-serif-cn-fonts # 思源宋体

等宽/编程字体

sudo pacman -S ttf-fira-code # Fira Code(支持连字) sudo pacman -S ttf-jetbrains-mono # JetBrains Mono sudo pacman -S ttf-hack-nerd # Hack Nerd Font

表情符号

sudo pacman -S noto-fonts-emoji # Noto Emoji

AUR 字体

yay -S ttf-mac-fonts # Mac 风格 yay -S ttf-ms-win11-auto # Windows 字体(自动下载) yay -S ttf-sarasa-gothic # 更纱黑体(混合等宽+中文)


**Nerd Fonts(终端开发者专用):**
为编程字体添加 Powerline 和图标字符,配合 starship/powerlevel10k 使用:

bash

按需安装(只装需要的即可)

yay -S nerd-fonts-fira-code # FiraCode Nerd Font yay -S nerd-fonts-jetbrains-mono # JetBrains Mono Nerd Font yay -S nerd-fonts-hack # Hack Nerd Font yay -S nerd-fonts-complete # 完整包(较大,约 1GB)


**Fontconfig 配置(改善中文字体渲染):**

创建 `~/.config/fontconfig/fonts.conf`:

xml <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd">

<edit name="antialias" mode="assign"><bool>true</bool></edit>
<edit name="hinting" mode="assign"><bool>true</bool></edit>
<edit name="hintstyle" mode="assign"><const>hintslight</const></edit>
<edit name="rgba" mode="assign"><const>rgb</const></edit>
<edit name="lcdfilter" mode="assign"><const>lcddefault</const></edit>

<family>sans-serif</family>
<prefer>
  <family>Noto Sans CJK SC</family>
  <family>Source Han Sans SC</family>
</prefer>


bash

生效配置

fc-cache -fv


### HiDPI 高分屏设置

**KDE Plasma 全局缩放:**

系统设置 → 显示和监视器 → 显示配置 → 缩放

推荐:

  • 1080p 14寸 → 125%-150%
  • 2K 14寸 → 150%-200%
  • 4K 27寸 → 200%

    
    **命令行设置缩放:**
    

    bash

设置 1.5 倍缩放

kwriteconfig6 --file ~/.config/kdeglobals --group KScreenscaling --key EnabledByDefault true

或通过 kscreen-doctor

kscreen-doctor output.eDP-1.scale.1.5


**Electron/Chromium 应用:**

bash

~/.config/environment.d/hidpi.conf

对 Electron 应用生效

ELECTRON_OZONE_PLATFORM_HINT=wayland

强制 GTK 缩放

GDK_DPI_SCALE=1.25

QT 缩放(KDE 已支持)

QT_ENABLE_HIGHDPI_SCALING=1

浏览器默认缩放

GOOGLE_CHROME_DEFAULT_DISPLAY_SCALE=125


**X11 下独立缩放(如使用 X11 而非 Wayland):**

bash

设置 DPI(需注销重登)

xrdb -merge ~/.Xresources Xft.dpi: 144

或通过 ~/.xprofile

xrandr --dpi 144


### 多显示器配置

**查看显示器信息:**

bash

X11

xrandr --listmonitors xrandr --query

Wayland

kscreen-doctor -o


**配置多显示器布局:**

bash

X11 使用 xrandr

xrandr --output eDP-1 --primary --mode 1920x1080 --rate 60

   --output HDMI-1 --mode 2560x1440 --rate 144 --right-of eDP-1

常用布局选项:

--left-of, --right-of, --above, --below, --same-as

--auto(自动最佳分辨率)

--off(关闭显示器)


**保存显示器配置:**

bash

KDE 会自动保存多显示器配置

手动保存/加载:

kscreen-doctor config.save ~/.config/kscreen-local.conf kscreen-doctor config.restore ~/.config/kscreen-local.conf

使用 arandr(X11 图形化配置)

sudo pacman -S arandr


---

## 十一、性能优化与功耗控制

> 性能优化应根据实际硬件和使用场景进行。先诊断瓶颈再优化,避免为了优化而优化。
> 常用诊断命令:`htop`(CPU/内存)、`free -h`(内存)、`iostat -x 1`(磁盘 I/O)、`systemd-analyze blame`(启动耗时)

### 1. CPU 频率调度(Governor)

查看当前调度器与可用模式:

bash cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors


常见调度器:
| 调度模式 | 说明 |
|---------|------|
| `performance` | 最高频率运行,性能最强 |
| `powersave` | 最低频率运行,最省电 |
| `schedutil` | 内核调度器动态调节(推荐,现代 CPU 默认) |
| `ondemand` | 按需调节(传统方案) |

临时切换所有核心:

bash echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor


持久化配置(使用 systemd 服务):

bash sudo tee /etc/systemd/system/cpufreq.service << 'EOF' [Unit] Description=CPU Frequency Governor

[Service] Type=oneshot ExecStart=/usr/bin/sh -c 'echo schedutil > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor'

[Install] WantedBy=multi-user.target EOF sudo systemctl enable cpufreq


### 2. Intel CPU 降压(Haswell 及更新)

bash yay -S intel-undervolt

编辑 /etc/intel-undervolt.conf

sudo systemctl enable --now intel-undervolt


参数含义:0=核心电压,1=核显电压,2=缓存电压。
建议从 -50mV 开始尝试,每次增加 -10mV。

### 3. 降低功率墙(TDP 限制)

查看是否可调:

bash grep . /sys/class/powercap/intel-rapl/intel-rapl:0/*


调整短时/长时功率限制(笔记本降功耗降温度):

bash sudo pacman -S powertop sudo powertop --auto-tune # 自动优化


### 4. 编译优化(Makepkg 配置)

优化 AUR 包和自定义软件包的编译过程,减少编译时间、提升二进制性能:

**编辑 `/etc/makepkg.conf`:**

bash

使用所有 CPU 核心编译(MAKEFLAGS)

查看核心数:nproc

MAKEFLAGS="-j$(nproc)"

CPU 特定优化(CHOST 和 CFLAGS)

使用 -march=native 自动检测 CPU 指令集

CFLAGS="-march=native -O2 -pipe -fno-plt" CXXFLAGS="-march=native -O2 -pipe -fno-plt"

使用多线程链接(对于大项目可减少 link 时间)

安装 lld: sudo pacman -S lld

在 /etc/makepkg.conf 中:

LDFLAGS="-fuse-ld=lld"


**各参数说明:**
| 参数 | 说明 |
|------|------|
| `-j$(nproc)` | 使用全部 CPU 核心并行编译 |
| `-march=native` | 针对本机 CPU 指令集优化(不可移植) |
| `-O2` | 标准优化级别(平衡速度和体积) |
| `-pipe` | 使用管道而非临时文件加速编译 |
| `-fno-plt` | 减少 PLT 开销,提升动态链接性能 |

**在 tmpfs 中编译(减少磁盘 I/O):**

bash

在 /etc/makepkg.conf 或 ~/.makepkg.conf 中设置

需要足够的内存(建议 8GB+)

BUILDDIR=/tmp/makepkg

创建 tmpfs 挂载:

bash mkdir -p /tmp/makepkg

如有需要可加大 tmpfs 大小

sudo mount -t tmpfs -o size=8G tmpfs /tmp/makepkg


**使用 ccache 编译缓存:**

bash sudo pacman -S ccache

在 /etc/makepkg.conf 中启用

BUILDENV=(!distcc color ccache check !sign)


### 5. I/O 调度器优化

查看当前 I/O 调度器:

bash cat /sys/block/sda/queue/scheduler


**NVMe 固态**推荐 `none`(即 mq-deadline):

bash echo none | sudo tee /sys/block/nvme0n1/queue/scheduler


**机械硬盘**推荐 `bfq`(更好的交互响应):

bash echo bfq | sudo tee /block/sda/queue/scheduler


持久化配置(通过 udev 规则):

bash sudo tee /etc/udev/rules.d/60-iosched.rules << 'EOF'

NVMe SSD

ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/scheduler}="none"

机械硬盘

ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq" EOF


### 6. SSD 固态硬盘优化

**启用 TRIM:**

bash

检查是否支持 TRIM

sudo lsblk --discard

如果 DISC-GRAN(discard granularity)>0,说明支持

启用定时 TRIM(fstrim.timer 每周自动执行)

sudo systemctl enable --now fstrim.timer

验证状态

sudo systemctl status fstrim.timer

手动执行

sudo fstrim -av


**挂载优化(/etc/fstab):**

推荐 Btrfs 挂载选项:

noatime,compress=zstd:3,ssd,space_cache=v2,autodefrag


推荐 ext4 挂载选项:

noatime,discard=async,commit=120


**减少磁盘写入:**

bash

避免 atime 更新(上面的 noatime 选项)

将浏览器缓存移到内存(tmpfs)

将 /tmp 设为 tmpfs(默认可能已是)

sudo vim /etc/fstab

添加:tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0


### 7. Zram / Zswap(内存压缩)

**Zram**(推荐,在 RAM 中创建压缩的交换设备):

bash sudo pacman -S zram-generator


创建配置文件 `/etc/systemd/zram-generator.conf`:

ini [zram0] zram-size = ram / 2 # 用一半内存作为压缩交换 compression-algorithm = zstd # 推荐 zstd,速度和压缩比平衡


启用服务:

bash sudo systemctl daemon-reload sudo systemctl start systemd-zram-setup@zram0

检查

swapon --show


**Zswap**(内核级,拦截页面压缩后放入内存缓存):
在 GRUB 的 `GRUB_CMDLINE_LINUX_DEFAULT` 中添加:

zswap.enabled=1 zswap.compressor=zstd zswap.max_pool_percent=20


### 8. Swap 文件管理

**创建 swap 文件(Btrfs 需先禁用 CoW):**

bash

Btrfs 文件系统

touch /swapfile chattr +C /swapfile # 禁用 CoW chmod 600 /swapfile dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress # 4GB mkswap /swapfile swapon /swapfile


**添加到 /etc/fstab:**

/swapfile none swap defaults 0 0


查看 swap 使用情况:

bash swapon --show free -h


### 9. 内核参数优化

在 `/etc/sysctl.d/99-performance.conf` 中添加:

conf

降低 swappiness(减少使用 swap,默认 60)

vm.swappiness=10

增加文件系统缓存

vm.vfs_cache_pressure=50

网络缓冲区优化

net.core.rmem_max = 16777216 net.core.wmem_max = 16777216

内核响应性

kernel.numa_balancing=0 # 单路 CPU 可关闭 NUMA 平衡


### 10. 系统响应性优化

#### ananicy(自动优先级调整)

bash

ananicy-cpp 自动调整进程 IO/CPU 优先级

yay -S ananicy-cpp sudo systemctl enable --now ananicy

查看规则:ls /etc/ananicy.d/


#### irqbalance(中断负载均衡)
将硬件中断分散到多个 CPU 核心,提升多核响应性:

bash sudo systemctl enable --now irqbalance


#### earlyoom(预防内存耗尽)
在系统内存即将耗尽时主动终止占用最多的进程,避免系统卡死:

bash yay -S earlyoom sudo systemctl enable --now earlyoom

查看状态

sudo systemctl status earlyoom

默认策略:当内存剩余 <10% 且 swap 剩余 <10% 时,终止占用最大的进程

配置:/etc/default/earlyoom


**替代方案:**
- `systemd-oomd`:systemd 内置的 OOM 管理(`sudo systemctl enable --now systemd-oomd`)
- `nohang`:Python 实现,可配置性更强(`yay -S nohang`)

#### ionice(手动调整 I/O 优先级)

bash

将备份等后台任务的 I/O 优先级设为 Idle(仅当空闲时才读写)

sudo ionice -c 3 -p $(pgrep backup-process)

优先级级别:

-c 0: 无(默认)

-c 1: Realtime(实时)

-c 2: Best-effort(尽力)

-c 3: Idle(空闲,仅当磁盘空闲时操作)


#### preload(预测启动,需足够内存)

bash yay -S preload sudo systemctl enable --now preload

preload 会分析用户行为,将常用程序预加载到内存


### 11. TLP 笔记本电源管理

TLP 提供笔记本电池优化,自动管理各种硬件状态:

bash

安装 TLP

sudo pacman -S tlp tlp-rdw

启用 TLP 服务(会覆盖 systemd 的电源管理)

sudo systemctl enable --now tlp

查看 TLP 状态

sudo tlp-stat -s sudo tlp-stat -b # 电池信息 sudo tlp-stat -p # 处理器 sudo tlp-stat -d # 磁盘


**TLP 配置(`/etc/tlp.conf`):**

conf

电池模式阈值(默认)

START_CHARGE_THRESH_BAT0=75 # 开始充电阈值 STOP_CHARGE_THRESH_BAT0=80 # 停止充电阈值

电源模式

CPU_SCALING_GOVERNOR_ON_AC=performance # 插电使用性能调度 CPU_SCALING_GOVERNOR_ON_BAT=powersave # 电池使用省电调度

硬盘超时

DISK_SPINDOWN_TIMEOUT_ON_AC=0 # 插电不休眠 DISK_SPINDOWN_TIMEOUT_ON_BAT=30 # 电池30分钟休眠

USB 自动挂起

USB_AUTOSUSPEND=1 # 开启 USB 自动挂起

无线省电

WIFI_PWR_ON_AC=off WIFI_PWR_ON_BAT=on

SATA 电源管理

SATA_LINKPWR_ON_AC=med_power_with_dipm SATA_LINKPWR_ON_BAT=min_power


**TLP 与其他工具的关系:**
- TLP 会自动覆盖 systemd 的电源管理设置
- 不要与 `laptop-mode-tools` 同时使用
- 可与 `powertop` 配合:先用 `sudo powertop --auto-tune` 再启用 TLP

### 12. kernel 参数引导优化

编辑 `/etc/default/grub`,在 `GRUB_CMDLINE_LINUX_DEFAULT` 中添加:

nowatchdog mitigations=off # 关闭看门狗与 CPU 安全缓解(权衡安全性)

mitigations=auto 为保留安全缓解


> **注意**:`mitigations=off` 会禁用 Meltdown/Spectre 等 CPU 漏洞缓解措施,提升性能但降低安全性。仅在个人桌面且了解风险的情况下使用。

生成配置:

bash sudo grub-mkconfig -o /boot/grub/grub.cfg


### 13. 网络性能优化

#### 启用 BBR 拥塞控制算法
BBR(Bottleneck Bandwidth and Round-trip)由 Google 开发,比传统 CUBIC 算法延迟更低、吞吐量更高:

bash

在 /etc/sysctl.d/99-network.conf 中添加

sudo tee /etc/sysctl.d/99-network.conf << 'EOF'

BBR 拥塞控制

net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr

TCP 缓冲区优化

net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.tcp_rmem=4096 87380 16777216 net.ipv4.tcp_wmem=4096 65536 16777216

启用 TCP Fast Open(减少握手延迟)

net.ipv4.tcp_fastopen=3

增加连接跟踪表大小

net.netfilter.nf_conntrack_max=262144 EOF

生效

sudo sysctl -p /etc/sysctl.d/99-network.conf


**验证 BBR 是否启用:**

bash sysctl net.ipv4.tcp_congestion_control

输出:net.ipv4.tcp_congestion_control = bbr

查看可用算法

/sbin/tc -d qdisc show dev wlan0


### 14. 系统启动时间优化

#### 分析启动耗时

bash

查看总启动时间

systemd-analyze

查看每个服务启动耗时(从长到短排序)

systemd-analyze blame

查看关键链的时间线

systemd-analyze critical-chain

图形化分析(生成 SVG)

systemd-analyze plot > boot.svg


#### 优化方法

bash

1. 禁用不必要的服务

sudo systemctl disable bluetooth.service # 不需要蓝牙时 sudo systemctl disable NetworkManager-wait-online # 不需要等待网络就绪 sudo systemctl disable pkgfile-update.timer # 关闭 pkgfile 更新

2. 并行化服务启动(编辑 /etc/systemd/system.conf)

默认超时 90s,减少超时时间

sudo tee -a /etc/systemd/system.conf << 'EOF' DefaultTimeoutStopSec=10s DefaultTimeoutStartSec=10s EOF

3. 关闭看门狗(已在内核参数中配置)

nowatchdog

4. 精简 mkinitcpio hooks(仅保留必要的)

编辑 /etc/mkinitcpio.conf:

使用 autodetect 自动检测需要的模块

确保 hooks 中只有: base udev autodetect modconf block filesystems keyboard


---

## 十二、常见问题排除与解决

### 关机卡住 1 分 30 秒

bash sudo vim /etc/systemd/system.conf

设置 DefaultTimeoutStopSec=30s

sudo systemctl daemon-reload


### 磁盘容量不足

bash sudo pacman -Sc # 清理包缓存 sudo pacman -Rns $(pacman -Qtdq) # 删除孤立包


### 软件降级

bash yay -S downgrade downgrade package_name


### 无法锁定数据库

bash sudo rm /var/lib/pacman/db.lck


### 手动开关混成器

bash qdbus org.kde.KWin /Compositor suspend # 禁用 qdbus org.kde.KWin /Compositor resume # 开启


### 静态 IP 设置

bash sudo systemctl stop dhcpcd NetworkManager sudo systemctl disable dhcpcd NetworkManager sudo systemctl enable --now systemd-networkd


创建 `/etc/systemd/network/10-static-eth0.network`:

conf [Match] Name=eth0

[Network] Address=YOUR_IPV4/MASK Gateway=YOUR_GATEWAY DNS=8.8.8.8


### 声卡/音频问题排查

**无声音输出:**

bash

1. 检查 ALSA 是否识别声卡

aplay -l

列出播放设备

cat /proc/asound/cards

2. 检查音频服务状态(PipeWire 或 PulseAudio)

PipeWire(现代推荐)

systemctl --user status pipewire pipewire-pulse

PulseAudio(传统)

systemctl --user status pulseaudio

3. 测试音频输出

speaker-test -t wav -c 2 # 测试扬声器 aplay /usr/share/sounds/alsa/Front_Center.wav

4. 检查音量与静音

alsamixer # ALSA 混音器(MM=静音) pavucontrol # PulseAudio GUI 音量控制(需安装 pavucontrol)

5. 重新加载音频驱动(最后手段)

sudo modprobe -r snd_hda_intel && sudo modprobe snd_hda_intel


**常见 PipeWire 修复:**

bash

重启 PipeWire 服务

systemctl --user restart pipewire pipewire-pulse

检查是否有其他服务冲突

systemctl --user status pulseaudio # 如果 PulseAudio 在运行,禁用之 systemctl --user --now disable pulseaudio

安装 WirePlumber(推荐会话管理器)

sudo pacman -S wireplumber systemctl --user --now enable wireplumber


**麦克风不工作:**

bash

检查录音设备

arecord -l

测试录音

arecord -d 5 -f cd test.wav && aplay test.wav

在 alsamixer 中按 F4 切换到录音页面,确保 Mic 未静音


> 提示:如果声音问题出现在更新后,可能是 `sof-firmware` 或 `alsa-firmware` 需要更新:`sudo pacman -S sof-firmware alsa-firmware`

### 蓝牙连接问题

**检查蓝牙状态:**

bash

查看蓝牙服务状态

sudo systemctl status bluetooth

启用蓝牙服务

sudo systemctl enable --now bluetooth

查看蓝牙设备

bluetoothctl list bluetoothctl devices

蓝牙适配器信息

hciconfig -a


**配对与连接:**

bash bluetoothctl

进入 bluetoothctl 交互后:

power on # 开启蓝牙 agent on # 启用配对代理 scan on # 扫描设备(记录目标 MAC 地址) pair XX:XX:XX:XX:XX:XX # 配对 connect XX:XX:XX:XX:XX:XX # 连接 trust XX:XX:XX:XX:XX:XX # 信任设备(自动连接) exit


**常见问题:**
- 蓝牙适配器未识别 → 检查内核模块:`lsmod | grep bt`(btusb、bluetooth)
- 连接后断开 → 安装 `pulseaudio-bluetooth` 或 `pipewire-pulse`(音频设备需要)
- 耳机无声音 → `pavucontrol` 中将播放设备设为蓝牙耳机
- 蓝牙鼠标延迟 → 检查干扰,避免 USB 3.0 接口靠近蓝牙天线
- 使用 systemd-networkd 时蓝牙 tethering 可能需额外配置

### 黑屏/花屏问题排查

**安装/启动后黑屏(最常见 - 显卡驱动问题):**

bash

在 GRUB 菜单按 e 编辑启动项,在 linux 行末添加:

nomodeset

或更详细的:

nomodeset i915.modeset=0 # Intel 集显禁用 modesetting nomodeset nouveau.modeset=0 # NVIDIA 开源驱动 nomodeset radeon.modeset=0 # AMD 旧卡

如果 nomodeset 有效,安装驱动后移除该参数

NVIDIA:sudo pacman -S nvidia nvidia-utils

AMD:sudo pacman -S mesa lib32-mesa xf86-video-amdgpu

Intel:sudo pacman -S mesa lib32-mesa xf86-video-intel


**桌面环境启动后黑屏/花屏:**

bash

1. 重置 KDE Plasma 配置

mv ~/.config ~/.config.bak

2. 检查 X11 日志

cat ~/.local/share/xorg/Xorg.0.log | grep -iE 'fail|error|ww'

3. 混合显卡(NVIDIA Optimus)需要额外配置

查看:sudo pacman -S nvidia-prime

或使用 optimus-manager:yay -S optimus-manager

4. 尝试切换显示服务器

登录界面选择不同的会话类型(Plasma X11 / Plasma Wayland)


**系统启动到 dmesg 就卡住:**

bash

在启动参数中添加:

关闭 ACPI(某些笔记本需要)

acpi=off

或仅关闭问题组件

acpi_osi=Linux

如果怀疑是 ACPI 问题,尝试:

pci=noacpi

关闭看门狗(某些主板冲突)

nowatchdog


### 系统更新后崩溃/回滚

**部分回滚特定软件包:**

bash

使用 pacman 缓存(默认在 /var/cache/pacman/pkg/)

查看已安装版本历史

pacman -Qi package_name

安装指定旧版本

sudo pacman -U /var/cache/pacman/pkg/package_name-old_version.pkg.tar.zst

如果缓存已被清理,使用 downgrade 工具

yay -S downgrade sudo downgrade package_name # 从本地缓存和 Arch Rollback Machine 选择版本


**完全回滚系统(谨慎操作):**

bash

方法一:使用 pacman 缓存 + 锁定关键包

1. 查看 pacman 日志找到更新前的状态

tac /var/log/pacman.log | head -50

2. 从缓存安装旧版本

ls -lt /var/cache/pacman/pkg/ | head

3. 锁定包版本防止被再次更新

编辑 /etc/pacman.conf,在 [options] 中添加:

IgnorePkg = linux nvidia ...(需要锁定的包名)

方法二:使用 Btrfs 快照回滚(推荐,如果使用了 Snapper/Timeshift)

从 Live USB 启动

mount /dev/root_partition /mnt mount /dev/efi_partition /mnt/boot snapper -c root mount-config /mnt/.snapshots # Snapper 回滚

详细操作参见 Snapper 章节


**内核崩溃切换到 LTS 内核:**

bash

安装 LTS 内核

sudo pacman -S linux-lts linux-lts-headers

重新生成引导

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

重启后在 GRUB 选择 "Arch Linux LTS"


**修复 pacman 事务中断:**

bash

如果 pacman 在更新过程中被中断(终端关闭、断电等)

症状:运行任何 pacman 命令都报错

强制完成事务

sudo pacman -Syu --overwrite='*'

如果数据库损坏

sudo rm /var/lib/pacman/db.lck sudo pacman -Syy sudo pacman -S archlinux-keyring sudo pacman -Syu


### 系统无法启动(进入紧急模式)

bash

在引导加载菜单选择"Arch Linux Fallback"或添加启动参数

在 grub 菜单按 e,在 linux 行末添加:

systemd.unit=emergency.target

或 systemd.unit=rescue.target

进入 emergency 后查看日志

journalctl -xb -p 3 # 只看错误级别

检查 fstab 是否有误

cat /etc/fstab

尝试手动挂载

mount -a

修复后重启

exit


### 内核 Panic / Kernel Oops

bash

通过 journalctl 查看内核崩溃信息

journalctl -k -p 3 # 内核日志,仅错误级别

常见原因与排查:

1. 显卡驱动冲突 → 尝试 nomodeset 启动参数

2. 内存故障 → memtest86+

3. 内核模块兼容问题 → 尝试 LTS 内核

sudo pacman -S linux-lts linux-lts-headers


### fsck 文件系统检查

bash

强制下次启动时检查根分区

sudo touch /forcefsck

或指定分区

sudo fsck /dev/sdX # 注意:需要分区未挂载

从 live USB 环境检查:

先 umount 目标分区,再运行 fsck


### Pacman 数据库损坏恢复

bash

症状:pacman 操作报 database error

恢复 pacman 数据库

sudo rm /var/lib/pacman/db.lck # 先解锁 sudo pacman -Syy # 刷新数据库

如果问题持续,手动重建数据库

sudo mv /var/lib/pacman/local /var/lib/pacman/local.bak sudo pacman -Syyu

恢复 pacman 密钥环

sudo rm -r /etc/pacman.d/gnupg/ sudo pacman-key --init sudo pacman-key --populate archlinux sudo pacman-key --populate archlinuxcn # 如果使用 archlinuxcn 源 sudo pacman -S archlinux-keyring


### 用户密码重置(无需 Live USB)

bash

在 GRUB 菜单按 e 编辑启动项

在 linux 行末尾添加:rd.break

Ctrl+X 启动进入紧急 shell

重新挂载根分区为读写

mount -o remount,rw /sysroot chroot /sysroot passwd yourusername

输入新密码,重启即可


### 网络连接问题排查

**NetworkManager 管理网络:**

bash

查看连接状态

nmcli device status nmcli connection show

重启网络

sudo systemctl restart NetworkManager

扫描可用 WiFi

nmcli device wifi list

连接 WiFi

nmcli device wifi connect "SSID" password "password"


**DHCP 获取不到 IP:**

bash

检查 DHCP 客户端是否正常运行

sudo systemctl status dhcpcd NetworkManager

手动释放并续期 DHCP

sudo dhcpcd -k # 释放 sudo dhcpcd # 重新获取

如果使用静态 IP 但无法上网,检查网关和 DNS

ip route show default ping -c 3 8.8.8.8 # 测试外网连通性 ping -c 3 google.com # 测试 DNS 解析


**DNS 解析问题:**

bash

测试 DNS

dig archlinux.org nslookup archlinux.org

检查 systemd-resolved 状态

sudo systemctl status systemd-resolved

如果 systemd-resolved 运行但 DNS 不工作

sudo systemctl restart systemd-resolved

查看 resolv.conf

ls -la /etc/resolv.conf # 应是指向 /run/systemd/resolve/stub-resolv.conf 的链接

临时使用 Google DNS

sudo sh -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'

或在 NetworkManager 中设置 DNS

nmcli connection modify "连接名" ipv4.dns "8.8.8.8 1.1.1.1"


**无线网卡不识别:**

bash

查看无线网卡

lspci -k | grep -iA 3 network # PCIe 无线网卡 lsusb | grep -i wireless # USB 无线网卡

检查驱动是否加载

lsmod | grep -E 'iwl|ath|rtw|brcm'

iwlwifi(Intel)、ath9k(Atheros)、rtw88/rtw89(Realtek)、brcmfmac(Broadcom)

安装固件

sudo pacman -S linux-firmware # 通用固件包

Intel 无线网卡

sudo pacman -S iwlwifi-* # 或从 AUR 安装对应型号固件

Broadcom 网卡

yay -S broadcom-wl # 或 b43-firmware


**SSH 连接问题:**

bash

服务端:确保 sshd 已启用

sudo systemctl enable --now sshd

检查端口

ss -tlnp | grep :22

防火墙检查(如果使用)

sudo ufw status sudo firewall-cmd --list-all

客户端调试

ssh -vvv user@host # 详细日志输出


### 系统时间不同步

bash

查看当前时间和时区

timedatectl status

设置时区

sudo timedatectl set-timezone Asia/Shanghai

启用 NTP 自动同步

sudo timedatectl set-ntp true

检查 NTP 服务

sudo systemctl status systemd-timesyncd

手动同步时间

sudo systemctl restart systemd-timesyncd

查看同步状态

timedatectl timesync-status

如果 systemd-timesyncd 失败,可以安装 chrony 替代

sudo pacman -S chrony sudo systemctl enable --now chronyd

强制立即同步

sudo chronyc -a makestep # chrony sudo systemd-timesyncd --adjust # systemd-timesyncd

硬件时钟同步

sudo hwclock --systohc # 将系统时间写入硬件时钟


### 磁盘空间不足深度清理

bash

1. 最大目录分析

sudo du -sh /* 2>/dev/null | sort -rh | head -15

2. 清理 pacman 缓存(保留最新 2 个版本)

sudo paccache -rk2

删除所有未安装包的缓存

sudo paccache -ruk0

或直接清空(谨慎)

sudo pacman -Scc

3. 清理 systemd journal(保留最近 100M)

sudo journalctl --vacuum-size=100M

保留最近 2 周

sudo journalctl --vacuum-time=2weeks

4. 查找大文件

find /home -type f -size +100M -exec ls -lh {} \; | sort -k5 -rh | head -20

5. 清理 AUR 构建缓存(yay/paru)

rm -rf ~/.cache/yay rm -rf ~/.cache/paru


### 引导修复(GRUB)

bash

使用 Arch Live USB 启动

mount /dev/root_partition /mnt mount /dev/efi_partition /mnt/boot # 或 /mnt/efi arch-chroot /mnt grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB --recheck grub-mkconfig -o /boot/grub/grub.cfg exit umount -R /mnt reboot


### X11 /Wayland 显示问题

bash

X11 崩溃后查看日志

cat ~/.local/share/xorg/Xorg.0.log

Wayland 崩溃

journalctl --user -xe | grep -i wayland

重置 KDE Plasma 配置

mv ~/.config ~/.config.bak

重新登录即可生成默认配置


### Pacman 常见问题

**GPG 密钥错误("signature is unknown trust"):**

bash sudo pacman -S archlinux-keyring # 先更新密钥环 sudo pacman-key --refresh-keys sudo pacman -Syu

如果问题持续:

sudo rm -r /etc/pacman.d/gnupg sudo pacman-key --init sudo pacman-key --populate archlinux


**文件冲突("exists in filesystem"):**

bash

查看冲突文件属于哪个包

pacman -Qo /path/to/conflicting/file

强制覆盖(谨慎)

sudo pacman -Syu --overwrite=/path/to/file

检查是否有错误安装的包

pacman -Qdtt


**部分更新(Partial upgrade)错误:**

bash

永远不要运行 pacman -Sy pkg 再 pacman -S pkg2

始终使用 pacman -Syu 完整更新后再安装新包

如果已出现错误,运行完整更新修复:

sudo pacman -Syu


**"failed to commit transaction (conflicting files)":**

bash

通常因手动安装的文件与包冲突

找到冲突文件并删除(确认它们不需要后)

sudo rm /path/to/conflicting/file sudo pacman -Syu


### 内存不足排查

bash

查看内存使用概况

free -h

查看内存占用 TOP 10 进程

ps aux --sort=-%mem | head -11

查看 OOM Killer 历史

journalctl -k | grep -i "killed process"

查看 systemd-oomd 状态

systemctl status systemd-oomd

安装 earlyoom 预防内存耗尽

yay -S earlyoom sudo systemctl enable --now earlyoom


### 系统启动时间过长排查

bash

分析启动耗时

systemd-analyze systemd-analyze blame | head -20 systemd-analyze critical-chain

常见优化

1. 禁用不需要的服务

sudo systemctl disable bluetooth # 不需要蓝牙 sudo systemctl disable pkgfile-update.timer

2. 检查 fstab 中是否有不存在的挂载点(会导致 90s 超时)

cat /etc/fstab

3. 添加内核参数 nowatchdog


### 电源管理 / 笔记本电池耗尽快

bash

安装笔记本电源管理工具

sudo pacman -S tlp tlp-rdw sudo systemctl enable --now tlp

查看电池健康状态

upower -i /org/freedesktop/UPower/devices/battery_BAT0 tlp-stat -b

检查哪些进程阻止睡眠

systemd-inhibit --list

检查是否阻止挂起

grep . /sys/power/mem_sleep # 查看支持的睡眠模式 cat /sys/power/state # freeze(s2idle)/ mem(deep)/ disk(hibernate)


### 挂起/休眠问题

bash

测试挂起

sudo systemctl suspend

如果无法唤醒,尝试内核参数:

/etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT="acpi_sleep=nonvs"

休眠设置(需要 swap >= 内存大小)

1. 查看 swap 大小:free -h

2. 获取 swap 设备偏移量:

sudo filefrag -v /swapfile | awk 'NR==4{print $4}'

3. 添加内核参数:

resume=UUID=xxx resume_offset=OFFSET

4. 编辑 /etc/mkinitcpio.conf:

HOOKS 中 block 后添加 resume

5. 重新生成:sudo mkinitcpio -P

配置合盖行为 /etc/systemd/logind.conf:

HandleLidSwitch=suspend # 合盖挂起 HandleLidSwitchExternalPower=ignore # 插电合盖不挂起 HandleLidSwitchDocked=ignore # 连接扩展坞合盖不挂起


### 系统重启后内核模块未加载

bash

查看模块状态

lsmod | grep module_name

手动加载

sudo modprobe module_name

设置开机自动加载

echo "module_name" | sudo tee /etc/modules-load.d/module_name.conf

如果模块有参数

echo "options module_name param=value" | sudo tee /etc/modprobe.d/module_name.conf


### Python/pip 与系统包冲突

bash

永远不要用 sudo pip install(会覆盖系统 Python 包)

解决方法:

1. 使用虚拟环境

python -m venv myenv && source myenv/bin/activate

2. 使用 pipx 全局安装 Python 工具

sudo pacman -S python-pipx pipx install package_name

3. 使用 --user 安装到用户目录

pip install --user package_name


### AUR 构建失败

bash

常见原因与解决:

1. GPG 密钥缺失

gpg --recv-keys KEY_ID

2. 依赖版本不匹配(更新后重试)

yay -Syu --devel

3. 构建目录空间不足

rm -rf ~/.cache/yay

或修改 build 目录到更大的分区

4. 使用 clean chroot 构建(devtools)

sudo pacman -S devtools extra-x86_64-build # 在干净 chroot 中构建


## 十三、办公日常

### 即时通讯

- **Telegram**:`sudo pacman -S telegram-desktop`
- **Element**(Matrix 客户端):`sudo pacman -S element-desktop`
- **Signal**:`sudo pacman -S signal-desktop`
- **Discord**:`sudo pacman -S discord` 或 `flatpak install flathub com.discordapp.Discord`
- **QQ**:`yay -S linuxqq`(官方 Linux 版)
- **微信**:`yay -S wechat-uos`(UOS 版,功能较完整)或 `flatpak install flathub com.tencent.WeChat`
- **Fractal**(Matrix 客户端,GNOME 风格):`sudo pacman -S fractal`
- **qTox**(P2P 加密通讯):`sudo pacman -S qtox`
- **Skype**:`yay -S skypeforlinux-bin`

### 邮件客户端

- **Thunderbird**:`sudo pacman -S thunderbird`
- **Geary**(GNOME 风格,简洁):`sudo pacman -S geary`
- **KMail**(KDE,功能全面):`sudo pacman -S kmail kmail-account-wizard`
- **Claws Mail**(轻量级,高度可配置):`sudo pacman -S claws-mail`
- **NeoMutt**(终端邮件客户端):`sudo pacman -S neomutt`

### 办公套件

bash sudo pacman -S libreoffice-still # 稳定版 yay -S onlyoffice-bin # OnlyOffice(兼容性更好)


**LibreOffice 中文支持:**

bash sudo pacman -S libreoffice-still-zh-cn # 中文语言包


**字体回退方案(办公文档兼容):**

bash

如果打开 Windows 创建的文档排版错乱,安装 Windows 兼容字体

yay -S ttf-ms-win11-auto

或安装开源替代

sudo pacman -S ttf-liberation # 替代 Arial/Times New Roman/Courier


### PDF 与文档处理

- **Okular**(KDE 文档查看器,支持 PDF/EPUB/CBR 等):`sudo pacman -S okular`
- **Zathura**(轻量级 Vim 风格 PDF 阅读器):`sudo pacman -S zathura zathura-pdf-mupdf`
- **Evince**(GNOME 文档查看器):`sudo pacman -S evince`
- **PDF Arranger**(PDF 页面合并/拆分/重排):`sudo pacman -S pdfarranger`
- **Stirling PDF**(Web 端全能 PDF 工具):`yay -S stirling-pdf-bin`
- **OCRmyPDF**(PDF OCR 文字识别):`sudo pacman -S ocrmypdf`

### 笔记软件

bash yay -S joplin-desktop # Joplin(Markdown,多端同步) yay -S trilium-bin # Trilium(知识管理,层级笔记) yay -S vnote # VNote(Markdown 笔记) sudo pacman -S obsidian # Obsidian(如果官方源有;否则 yay -S obsidian) yay -S logseq-desktop-bin # Logseq(大纲式双向链接笔记)


**终端笔记方案:**

bash

纯终端笔记(Vim 用户)

sudo pacman -S vimwiki # Vim 中的个人 Wiki

或直接使用 Markdown + Git 管理

mkdir ~/notes && cd ~/notes && git init


### 截图与录屏

**截图:**

bash sudo pacman -S flameshot # 火焰截图(功能最强) sudo pacman -S spectacle # KDE 默认截图工具 sudo pacman -S grim slurp # Wayland 截图(grim 截图,slurp 选区)


**录屏(Wayland):**

bash sudo pacman -S wf-recorder # Wayland 轻量录屏 sudo pacman -S kooha # GNOME/Wayland 简洁录屏工具


**录屏(X11):**

bash sudo pacman -S simplescreenrecorder # 老牌录屏工具 sudo pacman -S peek # GIF 录屏


### 下载与云存储

bash

BT 下载

sudo pacman -S qbittorrent # 功能全面 sudo pacman -S transmission-qt # 轻量简洁

下载管理器

sudo pacman -S uget # 多线程下载 sudo pacman -S aria2 # 命令行下载工具(支持多协议)

网盘

yay -S megasync # Mega 网盘 sudo pacman -S rclone # 命令行网盘管理(支持 40+ 云存储)

rclone 配置:rclone config


**Rclone 快速上手:**

bash

配置远程存储

rclone config

挂载网盘到本地

rclone mount remote:path /mnt/cloud --vfs-cache-mode writes

同步文件夹

rclone sync /home/user/Documents remote:backup/Documents


### 电子书与 RSS

bash sudo pacman -S calibre # 电子书管理(转换、编辑、推送 Kindle) sudo pacman -S foliate # epub 阅读器(支持注释、翻译) yay -S thorium-reader-bin # Thorium Reader(EPUB/PDF 阅读器) sudo pacman -S newsflash # RSS 阅读器(GTK) yay -S fluent-reader # RSS 阅读器(现代 UI)


### 远程协助

bash yay -S teamviewer # TeamViewer sudo systemctl enable --now teamviewerd


**开源替代方案:**

bash sudo pacman -S rustdesk # RustDesk(开源远程桌面,推荐) sudo pacman -S remmina # 远程桌面客户端(支持 RDP/VNC/SSH) sudo pacman -S krfb # KDE VNC 服务端 sudo pacman -S xdg-desktop-portal # 桌面门户(Wayland 远程屏幕共享需要)


### 密码管理

bash sudo pacman -S keepassxc # KeePassXC(推荐,离线密码管理) sudo pacman -S bitwarden # Bitwarden 桌面客户端 yay -S bitwarden-cli # Bitwarden 命令行 sudo pacman -S pass # Unix 风格密码管理器(基于 GPG+Git)


**KeePassXC 浏览器集成:**

bash

安装浏览器扩展 KeePassXC-Browser,并在 KeePassXC 设置中启用浏览器集成


### 思维导图与图表

bash sudo pacman -S drawio-desktop # Draw.io(流程图/UML) sudo pacman -S dia # Dia(图表编辑器) yay -S xmind # XMind(思维导图)


### 翻译与词典

bash yay -S crow-translate # 翻译工具(支持 OCR 翻译) sudo pacman -S goldendict # GoldenDict(多词典查询) yay -S sdcv # 星际译王命令行版


**CUPS 打印系统:**

bash

安装 CUPS

sudo pacman -S cups cups-pdf system-config-printer

启用服务

sudo systemctl enable --now cups.service

浏览器管理界面:http://localhost:631

添加打印机:系统设置 → 打印机 → 添加


**驱动安装:**

| 品牌 | 安装命令 |
|------|----------|
| 惠普 | `sudo pacman -S hplip` |
| 爱普生 | `yay -S epson-inkjet-printer-escpr` |
| 佳能 | `yay -S cnijfilter2`(AUR 搜索对应型号) |
| 兄弟 | `yay -S brscan4`(扫描)或 AUR 查找 |
| 通用(Gutenprint) | `sudo pacman -S gutenprint` |

**网络打印机(IPP/SMB):**

bash

查找网络打印机

/usr/share/cups/mdnsd.sh avahi-browse -r _ipp._tcp

或使用 system-config-printer GUI 自动发现


**扫描仪(SANE):**

bash

安装 SANE

sudo pacman -S sane sane-airscan

查看已连接的扫描仪

scanimage -L

GUI 扫描工具

sudo pacman -S simple-scan # 文档扫描仪 sudo pacman -S xsane # 高级扫描工具

网络扫描仪(eSCL/WSD 协议)

yay -S brscan4 # 兄弟网络扫描


**打印故障排除:**

bash

查看 CUPS 日志

journalctl -u cups cat /var/log/cups/error_log

重置 CUPS

sudo systemctl restart cups

清除卡住的打印任务

sudo cancel -a -x


---

## 十四、视频影音

### 在线音乐

bash yay -S yesplaymusic # 全网资源整合 yay -S listen1-desktop-appimage # 老牌听歌软件 yay -S feeluown # 符合 Unix 哲学的音乐播放器 yay -S netease-cloud-music-gtk4 # 网易云音乐(GTK4 版) sudo pacman -S spotify-launcher # Spotify(通过官方仓库安装) flatpak install flathub com.spotify.Client # Spotify Flatpak 版


### 本地音乐播放器

bash sudo pacman -S elisa # KDE 音乐播放器 sudo pacman -S strawberry # Clementine 分支(功能丰富) sudo pacman -S rhythmbox # GNOME 音乐播放器 sudo pacman -S cmus # 终端音乐播放器 sudo pacman -S mpd mpc # Music Player Daemon(服务端播放)


### 视频播放器

bash sudo pacman -S vlc # VLC 播放器(功能最全) sudo pacman -S mpv # MPV 播放器(性能最佳) sudo pacman -S haruna # Haruna(MPV 前端,KDE 风格) sudo pacman -S celluloid # GNOME 风格 MPV 前端


**MPV 配置优化(`~/.config/mpv/mpv.conf`):**

conf

硬件解码

hwdec=auto-safe

高质量缩放

profile=gpu-hq

音量标准化

af=lavfi=[loudnorm]

记住播放位置

save-position-on-quit=yes

截图保存位置

screenshot-directory=~/Pictures/mpv


### 在线视频

bash yay -S zy-player-bin # 在线影视资源播放 yay -S freetube-bin # FreeTube(隐私优先的 YouTube 客户端) sudo pacman -S minitube # YouTube 桌面客户端


### 弹弹Play(弹幕播放器)

bash yay -S dandanplay # 弹弹Play(本地视频弹幕播放)


### 视频转码与处理

bash

FFmpeg(命令行视频处理,几乎所有播放器的后端)

sudo pacman -S ffmpeg ffmpegthumbnailer

HandBrake(视频转码,图形化)

sudo pacman -S handbrake

MKV 工具

sudo pacman -S mkvtoolnix-gui # MKV 封装/提取/合并

媒体信息查看

sudo pacman -S mediainfo mediainfo-gui


### IPTV 与直播源

bash sudo pacman -S kodi # Kodi 媒体中心 sudo pacman -S hypnotix # IPTV 播放器


### 音频标签与整理

bash sudo pacman -S kid3 # 音频标签编辑器 sudo pacman -S picard # MusicBrainz Picard(自动识别+打标签) sudo pacman -S beets # 命令行音乐库管理(自动整理)


---

## 十五、娱乐软件

### Steam

**安装 Steam:**

bash

启用 multilib 仓库(如未启用)

sudo vim /etc/pacman.conf

取消注释 [multilib] 和 Include 行

安装 Steam

sudo pacman -S steam

如需使用原生系统运行时(避免 Steam 内置运行时)

yay -S steam-native-runtime

启动:steam-native


**安装前提(否则游戏可能无法运行):**

bash

1. 安装 32 位 OpenGL/Vulkan 驱动(关键)

NVIDIA

sudo pacman -S lib32-nvidia-utils

AMD

sudo pacman -S lib32-vulkan-radeon lib32-amdgpu-pro-oglp

Intel

sudo pacman -S lib32-mesa lib32-vulkan-intel

2. 生成 en_US.UTF-8 语言环境(避免非法指针错误)

sudo vim /etc/locale.gen

取消注释:en_US.UTF-8 UTF-8

sudo locale-gen

3. 安装必要字体

sudo pacman -S ttf-liberation wqy-zenhei

4. 增大 vm.max_map_count(防止部分游戏崩溃)

sudo sysctl -w vm.max_map_count=2147483642

持久化

sudo tee /etc/sysctl.d/99-gaming.conf <<< "vm.max_map_count=2147483642"


**Proton(Windows 游戏兼容层):**

bash

Steam 内置 Proton - 在 Steam 客户端中启用:

Steam → 设置 → 兼容性 → 启用 Steam Play

勾选"为所有其他标题启用 Steam Play"

选择 Proton 版本(推荐 Proton Experimental 或 Proton GE)

Proton GE(社区增强版,修复更多游戏)

yay -S proton-ge-custom

安装后重启 Steam,在兼容性选项中会多出 GE-Proton 选项


**Steam 游戏性能提示:**
- 查询游戏兼容性:[protondb.com](https://www.protondb.com/)
- 为单个游戏设置启动选项(右键游戏 → 属性 → 启动选项):

bash gamemoderun mangohud %command% # GameMode + MangoHud gamemoderun mangohud DXVK_HUD=fps %command% # 带 FPS 显示 gamescope -f -r 60 -- %command # Gamescope 嵌套会话


**SteamCMD(命令行版本):**

bash yay -S steamcmd steamcmd +login anonymous +app_info_update 1 +quit


### ProtonUp-Qt(Proton 版本管理)

bash yay -S protonup-qt

图形化管理 Proton GE / Luxtorpeda / Wine-GE 版本,一键安装和切换。

### Heroic Games Launcher(Epic/GOG)

开源的 Epic Games 和 GOG 游戏启动器,支持云存档:

bash yay -S heroic-games-launcher-bin

- 登录 Epic/GOG 账号
- 自动管理 Wine/Proton prefix
- 支持 DXVK/VKD3D 切换
- 内置 FPS 限制器和性能监控

### Bottles(Wine Prefix 管理器)

基于 GTK 的 Wine prefix 管理工具,轻松配置 Windows 应用和游戏环境:

bash

AUR 安装

yay -S bottles

或使用 Flatpak(官方推荐,有沙箱隔离)

flatpak install bottles


**Bottles 特点:**
- 图形化创建和管理 Wine prefix(每个游戏/应用独立环境)
- 内置依赖安装(VC++、.NET、DirectX 等)
- 支持不同 Wine runner 切换(Wine-GE、Proton、Staging)
- 预设模式:游戏、办公、软件
- 支持 DXVK / VKD3D 一键启停

### Lutris(开源游戏平台)

统一的游戏管理平台,支持 Steam、Wine、RetroArch、原生 Linux 游戏:

bash sudo pacman -S lutris

- 从 [lutris.net](https://lutris.net/) 一键安装脚本(自动配置 Wine prefix 和依赖)
- 安装显卡驱动和 32 位依赖后即可使用
- 支持自定义运行器和环境变量

### Wine 详细配置

bash

安装 Wine(开发版本,推荐)

sudo pacman -S wine

或安装 Staging 版本(带额外补丁)

sudo pacman -S wine-staging

安装必要组件

sudo pacman -S wine-gecko wine-mono # IE 和 .NET 实现 sudo pacman -S winetricks # 依赖管理脚本


**Wine 基本用法:**

bash

创建独立的 Wine prefix(每个游戏独立的 Windows 环境)

export WINEPREFIX=~/Games/my-game winecfg # 配置 prefix(Windows 版本、库替代等)

安装 Windows 依赖

winetricks vcrun2022 corefonts dxvk

运行 Windows 程序

wine setup.exe

DXVK(DirectX 9/10/11 → Vulkan,大幅提升游戏性能)

sudo pacman -S dxvk winetricks dxvk # 在 prefix 中安装 DXVK

VKD3D(DirectX 12 → Vulkan)

sudo pacman -S vkd3d lib32-vkd3d


**Wine 32 位声音支持:**

bash

根据音频后端安装对应 32 位库

sudo pacman -S lib32-alsa-lib lib32-alsa-plugins # ALSA sudo pacman -S lib32-libpulse # PulseAudio sudo pacman -S lib32-pipewire lib32-libpulse # PipeWire


### Gamescope(Valve 微合成器)

来自 Steam Deck 的游戏专用微合成器,提供分辨率伪装、FSR 上采样、帧率限制等:

bash sudo pacman -S gamescope


**使用方式:**

bash

在桌面环境以嵌套模式运行游戏

gamescope -f -r 60 -W 1920 -H 1080 -- glxgears

常用参数:

-f:全屏

-r FPS:帧率限制

-W/-H:内部分辨率

-U:使用 AMD FSR 上采样

--fsr-sharpness 5:FSR 锐度(0-20)

在 Steam 启动选项中:

gamescope -f -r 120 -- %command%


**NVIDIA 用户需添加内核参数:**

bash

/etc/default/grub 中添加:

nvidia_drm.modeset=1

然后:sudo grub-mkconfig -o /boot/grub/grub.cfg


### RetroArch(全能模拟器)

统一前端的多平台游戏模拟器:

bash sudo pacman -S retroarch sudo pacman -S libretro-* # 安装所有核心(或选择特定核心)


**基本使用:**
1. 首次运行:`retroarch`
2. 下载核心:主菜单 → Online Updater → Core Downloader
3. 加载游戏:主菜单 → Load Content → 选择 ROM 文件 → 选择对应核心
4. 核心推荐:
   - `glcore`:NES
   - `snes9x`:SNES
   - `mgba`:GBA
   - `pcsx_rearmed`:PS1
   - `flycast`:Dreamcast
   - `yabause`:SS
   - `ppsspp`:PSP

### 游戏性能优化

| 工具 | 功能 | 安装方式 |
|------|------|----------|
| **GameMode** | 自动优化 CPU 调度/IO 优先级 | `sudo pacman -S gamemode lib32-gamemode` |
| **MangoHud** | 游戏内性能监控叠加层 | `sudo pacman -S mangohud lib32-mangohud` |
| **Gamescope** | 合成器/分辨率伪装/FSR | `sudo pacman -S gamescope` |
| **linux-zen** | 优化桌面/游戏响应性的内核 | `sudo pacman -S linux-zen linux-zen-headers` |
| **proton-ge-custom** | 社区增强 Proton | `yay -S proton-ge-custom` |

**GameMode 配置:**

bash

将自己加入 gamemode 组

sudo usermod -aG gamemode $USER

编辑用户配置 ~/.config/gamemode.ini

[general] renice=10 # 提升游戏进程优先级 desiredgov=performance # 切换为 performance 调度 softrealtime=auto # 自动软实时调度 reaper_freq=5 # 检查频率

[gpu] apply_gpu_optimisations=accept-responsibility gpu_device=0 nv_powermizer_mode=1 # NVIDIA: 最高性能

验证 GameMode 是否生效

gamemoded -t


**MangoHud 配置(`~/.config/MangoHud/MangoHud.conf`):**

ini fps_limit=60,120 # 帧率限制 cpu_stats # 显示 CPU 占用 gpu_stats # 显示 GPU 占用 ram # 显示内存 vram # 显示显存 fps # FPS 显示 frame_timing=0 # 帧时间 gpu_name # GPU 名称 cpu_temp # CPU 温度 gpu_temp # GPU 温度 toggle_hud=Shift_R+F12 # 切换快捷键


**调优清单:**
1. ✅ 关闭 KDE 混成器:全屏游戏自动关闭,也可手动 `qdbus org.kde.KWin /Compositor suspend`
2. ✅ 使用 `gamemoderun %command%` 作为 Steam 启动选项
3. ✅ 使用 Zen 内核降低延迟、提高帧率稳定性
4. ✅ 使用 `vm.max_map_count=2147483642` 修复 UE4/Unity 游戏崩溃
5. ✅ 使用 `mangohud` 监控性能瓶颈
6. ✅ 更新显卡驱动到最新版本
7. ✅ AMD 用户考虑 `RADV_PERFTEST=ngc` 或 `aco` 编译器

### 游戏手柄

bash

查看手柄是否被识别

ls /dev/input/js0 # Joystick API 接口 ls /dev/input/by-id/ | grep -i joystick

测试手柄

evtest /dev/input/eventXX


**推荐手柄支持:**

| 手柄类型 | 安装命令 | 备注 |
|----------|----------|------|
| Xbox 无线适配器 | `yay -S xone` | 官方无线适配器 |
| Xbox 蓝牙 | `yay -S xpadneo-dkms` | Xbox One S/X / Series X 蓝牙 |
| Xbox 有线 | 即插即用 | 无需额外驱动 |
| PS4/PS5 | 即插即用(蓝牙配对) | touchpad 也支持 |
| Nintendo Switch Pro | 蓝牙配对可用 | 需安装 `joycond` |
| 通用 USB 手柄 | 即插即用 | 大多数 HID 兼容 |

**SDL 控制器映射:**

bash

查看已连接的 SDL 控制器

sdl2-jstest --list

SDL 控制器映射数据库

cat /usr/share/sdl32/gamecontrollerdb.txt | grep Linux


---

## 十六、安卓刷机

### 准备工作

bash sudo pacman -S android-tools

包含:adb(Android Debug Bridge)、fastboot


**启用手机的 USB 调试:**
设置 → 关于手机 → 连续点击"版本号"7次 → 返回设置 → 开发者选项 → 开启 USB 调试。

**验证连接:**

bash adb devices

首次连接需在手机上确认 RSA 密钥指纹

输出:XXXXXX device 表示连接成功


**ADB 常用命令:**

bash

安装/卸载应用

adb install app.apk # 安装 APK adb uninstall com.example.app # 卸载应用

文件传输

adb push local_file /sdcard/ # 推送到手机 adb pull /sdcard/file ./ # 从手机拉取

Shell 操作

adb shell # 进入手机 shell adb shell pm list packages # 列出所有应用 adb shell pm disable com.example.app # 禁用应用 adb shell dumpsys battery # 电池信息

截图与录屏

adb shell screencap /sdcard/screen.png adb pull /sdcard/screen.png adb shell screenrecord /sdcard/record.mp4

Ctrl+C 停止录制

无线调试(Android 11+)

adb pair IP:配对端口 配对码 # 配对 adb connect IP:连接端口 # 连接

重启

adb reboot # 正常重启 adb reboot bootloader # 重启到 fastboot adb reboot recovery # 重启到 recovery


### 解锁 Bootloader

**注意:解锁会清除手机所有数据,务必提前备份。**

bash adb reboot bootloader fastboot devices # 确认识别设备

OEM 解锁(不同品牌命令不同)

fastboot flashing unlock # Google Pixel fastboot oem unlock # 一加/小米等

部分品牌需要申请解锁码(小米需绑定账号等待 7 天)


### 刷入 Recovery

bash

刷入 TWRP

fastboot flash recovery twrp.img

或直接启动(不刷入)

fastboot boot twrp.img

刷入 LineageOS Recovery

fastboot flash recovery lineage-recovery.img


### 刷入 Custom ROM

**以 LineageOS 为例:**

bash

1. 进入 Recovery,格式化 data

TWRP: 清除 → 格式化 Data 分区 → 输入 yes

2. Sideload 刷入 ROM

Recovery 中选择 Apply update → Apply from ADB

adb sideload lineage-*.zip

3. 可选:刷入 GApps(Google 服务)

adb sideload MindTheGapps-*.zip

4. 重启系统

Recovery → Reboot system now


### 刷入 Magisk(Root)

1. 从 [Magisk Release](https://github.com/topjohnwu/Magisk/releases) 下载最新 apk
2. 将 `.apk` 重命名为 `.zip`
3. 通过 Recovery 的 Sideload 或直接刷入:

bash adb sideload Magisk-v*.zip

4. 重启后安装 Magisk app(apk),打开确认 root 权限

**Magisk 模块推荐:**
- SafetyNet Fix:绕过 SafetyNet 检测
- Systemless Hosts:广告屏蔽(配合 AdAway)
- LSPosed:Xposed 框架(Android 8+)

### 去除网络受限提示

bash adb shell settings put global captive_portal_server www.google.cn adb shell settings put global captive_portal_https_url https://www.google.cn/generate_204 adb shell settings put global captive_portal_mode 0


### Fastboot 进阶操作

bash

解锁关键分区(部分机型需要)

fastboot flashing unlock_critical

查看当前 slot(A/B 分区设备)

fastboot getvar current-slot

切换 slot

fastboot set_active a

刷入工厂镜像(以 Google Pixel 为例)

解压工厂镜像后执行 flash-all.sh

./flash-all.sh # 保留数据 ./flash-all.sh -w # 清除数据

查看设备信息

fastboot getvar all


---

## 十七、加密货币入门

> 本节仅提供技术参考。加密货币投资有风险,请自行判断。

### 钱包

**浏览器钱包:** [MetaMask](https://metamask.io/)(以太坊生态最常用)、[Rabby](https://rabby.io/)(用户体验更好)。

**桌面钱包:**

bash yay -S exodus # Exodus(多币种,界面友好) sudo pacman -S electrum # Electrum(比特币轻钱包) yay -S monero-gui # Monero 官方钱包


**硬件冷钱包**(更安全,推荐大额资产):Ledger、Trezor、OneKey。

### 行情查看

bash yay -S coingecko # CoinGecko 终端行情

或直接在浏览器访问 CoinMarketCap / CoinGecko


### 挖矿

bash

CUDA(NVIDIA 显卡)

sudo pacman -S cuda

XMR 挖矿

yay -S xmrig

配置:编辑 ~/.config/xmrig/config.json

填入矿池地址和钱包地址

ETH/ETC 挖矿

yay -S ethminer


使用 supervisor 实现自动重启:

bash sudo pacman -S supervisor sudo systemctl enable --now supervisord.service

配置示例:/etc/supervisor.d/miner.ini

[program:miner]

command=/usr/bin/xmrig

autostart=true

autorestart=true


### 防火墙

bash sudo pacman -S ufw sudo ufw default deny sudo ufw allow ssh sudo ufw enable


### 区块链开发工具

bash yay -S foundry-bin # Foundry(以太坊开发框架) sudo pacman -S solc # Solidity 编译器(或 yay -S solidity) sudo pacman -S nodejs npm # Hardhat/Truffle 需要 Node.js


---

## 十八、直播与多媒体制作

### 直播推流

bash sudo pacman -S obs-studio # OBS Studio

如需浏览器插件(直播弹幕/通知等),安装 AUR 版本:

yay -S obs-studio-browser


**OBS 配置要点:**
- **编码器**:NVIDIA 选 NVENC(`nvenc_h264`),AMD 选 AMF(`h264_amf`),Intel 选 QSV(`qsv_h264`),否则用 `x264`
- **录像格式**:推荐 MKV(崩溃不损坏),录制后可在 OBS 中自动转封装为 MP4
- **音频**:配合 PipeWire 创建虚拟输出设备,实现应用音频分流
- **虚拟摄像头**:安装 `sudo pacman -S v4l2loopback-dkms`,OBS → 启动虚拟摄像机

**直播推流插件:**

bash yay -S obs-vkcapture # Vulkan/OpenGL 游戏捕获(比桌面捕获更高效) yay -S obs-pipewire-audio-capture # PipeWire 音频捕获


### 视频剪辑

bash sudo pacman -S kdenlive # KDE 视频编辑器(推荐,功能全面) sudo pacman -S shotcut # Shotcut(跨平台) yay -S davinci-resolve # DaVinci Resolve(专业级,需要 NVIDIA 显卡) sudo pacman -S olive # Olive(开源非线性编辑器) sudo pacman -S mkvtoolnix-gui # MKV 工具(封装/分割/合并)


**DaVinci Resolve 安装注意事项:**

bash

需要安装依赖

sudo pacman -S libxml2 libpng libxcb opencl-nvidia # NVIDIA

AMD 使用 opencl-amd

同时需要配置 GPU 直通


### 图像处理

bash sudo pacman -S gimp # GIMP(图像编辑,类 Photoshop) sudo pacman -S krita # Krita(绘图/数位板,推荐画师) sudo pacman -S inkscape # Inkscape(矢量图,类 Illustrator)


**图像处理补充工具:**

bash sudo pacman -S imagemagick # 命令行图像处理(转换/裁剪/批处理) sudo pacman -S darktable # 专业 RAW 照片处理(类 Lightroom) sudo pacman -S rawtherapee # RAW 照片处理(另一选择) sudo pacman -S gthumb # 图片浏览/简单编辑 sudo pacman -S digikam # KDE 照片管理器


### 3D 建模与渲染

bash sudo pacman -S blender # Blender(全功能 3D 套件) sudo pacman -S freecad # FreeCAD(参数化 CAD) sudo pacman -S openscad # OpenSCAD(脚本建模) sudo pacman -S meshlab # MeshLab(3D 网格处理)


### 音频制作

bash sudo pacman -S lmms # LMMS(作曲/编曲,类 FL Studio) sudo pacman -S ardour # Ardour(专业录音/混音,类 Pro Tools) sudo pacman -S audacity # Audacity(音频编辑) sudo pacman -S musescore # MuseScore(制谱软件)


**专业音频(JACK/PipeWire 路由):**

bash

专业音频路由矩阵

sudo pacman -S qpwgraph # PipeWire 版 Patchbay sudo pacman -S carla # Carla(音频插件宿主) sudo pacman -S guitarix # 吉他效果器 sudo pacman -S hydrogen # 鼓机 sudo pacman -S helm-synth # 合成器


### 动画制作

bash sudo pacman -S synfigstudio # 2D 矢量动画 sudo pacman -S blender # 3D 动画(含 Grease Pencil 2D 动画) sudo pacman -S opentoonz # 2D 动画(吉卜力工作室使用)


---

## 十九、编程软件

### 编辑器

**GUI 编辑器/IDE:**

bash sudo pacman -S code # OSS Code(开源版 VS Code) yay -S vscodium-bin # VSCodium(社区版,去除遥测) yay -S visual-studio-code-bin # 官方 VS Code(含微软扩展市场) sudo pacman -S intellij-idea-community-edition # IntelliJ IDEA sudo pacman -S pycharm-community-edition # PyCharm sudo pacman -S qtcreator # Qt Creator(C++/Qt 开发) sudo pacman -S android-studio # Android Studio sudo pacman -S eclipse-java # Eclipse


**终端编辑器:**

bash sudo pacman -S neovim # Neovim(Vim 增强版,推荐) sudo pacman -S vim # Vim sudo pacman -S helix # Helix(类 Kakoune,内置 LSP) sudo pacman -S emacs # Emacs sudo pacman -S micro # Micro(类 Nano,现代快捷键)


**Neovim 快速上手:**

bash

安装包管理器 lazy.nvim

git clone https://github.com/folke/lazy.nvim.git \ ~/.local/share/nvim/lazy/lazy.nvim

推荐使用社区配置(如 NvChad、LazyVim、kickstart.nvim)

git clone https://github.com/LazyVim/starter ~/.config/nvim


### 终端/Shell 增强

bash

现代化终端模拟器

sudo pacman -S alacritty # GPU 加速终端 sudo pacman -S kitty # GPU 加速,支持图片显示 sudo pacman -S wezterm # GPU 加速,Lua 配置 sudo pacman -S foot # Wayland 原生终端

Shell 增强

sudo pacman -S zsh zsh-completions zsh-syntax-highlighting zsh-autosuggestions sudo pacman -S fzf # 模糊搜索(Ctrl+R 历史搜索) sudo pacman -S ripgrep # 高速文本搜索(grep 替代) sudo pacman -S fd # 高速文件查找(find 替代) sudo pacman -S bat # 语法高亮 cat sudo pacman -S eza # 现代 ls(exa 的继任者) sudo pacman -S zoxide # 智能目录跳转(cd 替代) sudo pacman -S delta # 语法高亮 diff(git diff 美化) sudo pacman -S starship # Shell 提示符美化 sudo pacman -S tmux # 终端复用器


### 版本控制

bash sudo pacman -S git # Git sudo pacman -S lazygit # 终端 Git TUI sudo pacman -S github-cli # GitHub CLI(gh) sudo pacman -S git-lfs # Git LFS(大文件支持) sudo pacman -S meld # 图形化 diff/merge 工具

配置 git

git config --global user.name "Your Name" git config --global user.email "your@email.com" git config --global init.defaultBranch main


### 数据库工具

bash sudo pacman -S dbeaver # 通用数据库管理(推荐) sudo pacman -S mysql-workbench # MySQL Workbench sudo pacman -S pgadmin4 # PostgreSQL 管理 sudo pacman -S sqlitebrowser # SQLite 浏览器

命令行工具

sudo pacman -S mariadb-clients # MySQL/MariaDB CLI sudo pacman -S postgresql-client # PostgreSQL CLI sudo pacman -S redis # Redis 服务器+CLI sudo pacman -S mongodb-bin # MongoDB(AUR)


### 开发环境管理

**Python:**

bash sudo pacman -S python python-pip python-virtualenv python-poetry

或使用 pyenv 管理多版本

yay -S pyenv


**Node.js:**

bash sudo pacman -S nodejs npm

推荐使用 fnm 管理多版本

yay -S fnm fnm install --lts


**Rust:**

bash

推荐使用 rustup(而非 pacman)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

或

sudo pacman -S rustup && rustup default stable


**Go:**

bash sudo pacman -S go


**JDK 版本管理:**

bash sudo pacman -S jdk-openjdk # 最新 OpenJDK sudo pacman -S jdk17-openjdk # JDK 17 LTS sudo pacman -S jdk21-openjdk # JDK 21 LTS

切换版本:archlinux-java status → archlinux-java set java-17-openjdk


**Docker 开发环境:** 参见 [二十、虚拟化](#二十虚拟化)。

### API 调试与测试

bash sudo pacman -S postman-bin # Postman(AUR) sudo pacman -S insomnia # Insomnia(开源替代) sudo pacman -S httpie # HTTPie(命令行 API 客户端)

或使用 VS Code 的 REST Client 扩展


### 浏览器

bash sudo pacman -S firefox chromium brave # 多款浏览器可选 sudo pacman -S firefox-developer-edition # Firefox 开发者版 yay -S google-chrome # Google Chrome


**浏览器开发者工具:**
- React DevTools:`yay -S react-devtools`
- 或通过浏览器扩展商店安装框架专属 DevTools

### 机器学习与数据科学

bash

Python 数据科学栈

sudo pacman -S jupyter-notebook jupyterlab sudo pacman -S python-numpy python-pandas python-scipy python-matplotlib sudo pacman -S python-scikit-learn python-seaborn python-plotly

深度学习

sudo pacman -S tensorflow-cuda # TensorFlow(NVIDIA GPU) sudo pacman -S python-pytorch-cuda # PyTorch(NVIDIA GPU)

CPU 版:去掉 -cuda 后缀

Ollama(本地大模型运行)

curl -fsSL https://ollama.com/install.sh | sh

或 yay -S ollama

ollama pull llama3 ollama run llama3


### 逆向工程

bash sudo pacman -S ghidra # Ghidra(NSA 开源,类 IDA Pro) sudo pacman -S rizin # Rizin(radare2 继任者) sudo pacman -S gdb # GNU Debugger sudo pacman -S strace ltrace # 系统调用/库调用跟踪 sudo pacman -S bless # 十六进制编辑器(GUI) sudo pacman -S hexedit # 十六进制编辑器(终端) sudo pacman -S binwalk # 固件分析 sudo pacman -S checksec # 二进制安全检测


### 科学计算

bash sudo pacman -S sagemath # SageMath(数学软件,MATLAB 替代) sudo pacman -S octave # GNU Octave(MATLAB 兼容) sudo pacman -S julia # Julia 语言(科学计算) sudo pacman -S r # R 语言(统计分析) sudo pacman -S gnuplot # 命令行绘图


### CI/CD 与 DevOps

bash sudo pacman -S docker docker-compose # Docker sudo pacman -S ansible # Ansible sudo pacman -S terraform # Terraform yay -S act # 本地运行 GitHub Actions sudo pacman -S kubectl # Kubernetes CLI yay -S minikube # 本地 Kubernetes


---

## 二十、虚拟化

### 1. Docker

**安装 Docker:**

bash sudo pacman -S docker docker-compose sudo systemctl enable --now docker


**将用户加入 docker 组(免 sudo 执行):**

bash sudo usermod -aG docker $USER

重新登录后生效


**基本使用:**

bash

拉取镜像

docker pull ubuntu:latest docker pull nginx:alpine

运行容器

docker run -it --rm ubuntu bash # 交互式运行 docker run -d --name web -p 8080:80 nginx # 后台运行 web 服务器

管理容器

docker ps # 运行中的容器 docker ps -a # 所有容器 docker stop container_name docker start container_name docker exec -it container_name bash # 进入运行中的容器

管理镜像

docker images docker rmi image_name docker system prune # 清理未使用的资源


**Docker Compose:**

yaml

docker-compose.yml 示例

version: '3.8' services: web:

image: nginx:alpine
ports:
  - "80:80"
volumes:
  - ./html:/usr/share/nginx/html

db:

image: postgres:15
environment:
  POSTGRES_PASSWORD: secret
volumes:
  - pgdata:/var/lib/postgresql/data

volumes: pgdata:


bash docker compose up -d # 启动所有服务 docker compose down # 停止并删除 docker compose logs -f # 查看日志


**Docker 配置优化:**

存储驱动推荐 `overlay2`(默认):

bash sudo docker info | grep "Storage Driver"


配置镜像加速(`/etc/docker/daemon.json`):

json { "registry-mirrors": ["https://docker.m.daocloud.io"], "storage-driver": "overlay2", "log-driver": "json-file", "log-opts": {

"max-size": "10m",
"max-file": "3"

} }


**Rootless 模式(安全推荐,无需 root 权限):**

bash

安装 rootless 支持

sudo pacman -S docker-rootless-extras

设置(无需 root)

dockerd-rootless-setuptool.sh install systemctl --user enable --now docker

说明:需要安装 newuidmap/newgidmap(shadow 包)


**NVIDIA GPU 加速(Docker 内使用 GPU):**

bash

安装 NVIDIA 容器工具包

yay -S nvidia-container-toolkit sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker

运行时添加 --gpus all 参数

docker run --gpus all -it --rm nvidia/cuda:12.0-base nvidia-smi


**常见故障排除:**

bash

查看 Docker 日志

journalctl -u docker

查看容器日志

docker logs container_name

无法拉取镜像(DNS 问题)

sudo vim /etc/docker/daemon.json

添加 "dns": ["8.8.8.8", "1.1.1.1"]

磁盘空间不足

docker system prune -a --volumes # 清理所有未使用的资源


### 2. KVM/QEMU 虚拟机

**检查 CPU 是否支持虚拟化:**

bash LC_ALL=C lscpu | grep Virtualization

Intel 显示 VT-x,AMD 显示 AMD-V

如果没有显示,需在 BIOS 中开启虚拟化支持


**安装 KVM/QEMU 虚拟化栈:**

bash sudo pacman -S virt-manager qemu-desktop libvirt edk2-ovmf dnsmasq iptables-nft


**启用并启动服务:**

bash sudo systemctl enable --now libvirtd

将用户加入 libvirt 组

sudo usermod -aG libvirt $USER

重新登录后生效


**创建虚拟机:**
- 打开 `virt-manager`(虚拟机管理器)
- 文件 → 新建虚拟机
- 选择 ISO 镜像或网络安装
- 分配 CPU、内存、磁盘空间
- 完成安装

**性能优化:**

bash

使用 virtio 驱动(半虚拟化,性能接近原生)

磁盘:virtio

网卡:virtio

显卡:virtio(或 SPICE)

配置 CPU 直通(host-passthrough)

sudo virsh edit vm-name

在 部分修改为:

启用 KSM 内存去重(节省内存)

sudo systemctl enable --now ksmtuned


**共享剪贴板与文件夹:**
- 安装 SPICE 工具:`sudo pacman -S spice-vdagent`
- 在虚拟机中安装 `spice-vdagent` 后重启
- 共享文件夹通过 virt-manager → 详情 → 内存 → 勾选"启用共享内存"

**网络模式:**
| 模式 | 说明 | 使用场景 |
|------|------|----------|
| NAT(默认) | 虚拟机通过主机 NAT 上网 | 普通上网需求 |
| 桥接(Bridge) | 虚拟机与主机同网段 | 需要外部直接访问 |
| 隔离(Isolated) | 虚拟机之间可通信,不能上网 | 测试环境 |

配置桥接网络:

bash

安装桥接工具

sudo pacman -S bridge-utils

在 virt-manager 中:编辑 → 连接详情 → 虚拟网络 → 添加桥接


**UEFI 引导(OVMF):**

bash

在 virt-manager 创建虚拟机时选择:

固件:UEFI x86_64

或者在 XML 配置中添加:

hvm

/usr/share/edk2-ovmf/x64/OVMF_CODE.fd


**QEMU 命令行直接启动(轻量级):**

bash qemu-system-x86_64 -enable-kvm -m 2G -cpu host \ -drive file=/path/to/disk.img,format=raw \ -cdrom /path/to/install.iso \ -vga virtio -display gtk


### 3. Podman(Docker 替代)

bash

安装 Podman(无守护进程的容器引擎)

sudo pacman -S podman podman-compose

Podman 命令与 Docker 兼容

alias docker=podman

无需 docker 组,默认 rootless

podman run -it --rm ubuntu bash

生成 systemd 服务(容器自动启动)

podman generate systemd --name mycontainer > ~/.config/systemd/user/container-mycontainer.service systemctl --user enable --now container-mycontainer


**Podman 与 Docker 差异:**
| 特性 | Docker | Podman |
|------|--------|--------|
| 守护进程 | 需要 dockerd 后台运行 | 无守护进程(fork/exec 模型) |
| Rootless | 需要额外配置 | 默认支持 |
| 兼容性 | Docker Compose v2 | podman-compose(基本兼容) |
| 安全 | 默认 root | 默认 rootless,更安全 |
| systemd 集成 | 手动 | 内置 `podman generate systemd` |

### 4. Distrobox(容器化开发环境)

在容器中运行完整的 Linux 发行版,无缝集成到宿主机:

bash sudo pacman -S distrobox

Distrobox 基于 Podman 或 Docker,会自动检测


**基本使用:**

bash

创建基于 Ubuntu 的容器

distrobox create --name ubuntu-box --image ubuntu:latest

进入容器(首次进入会自动设置集成)

distrobox enter ubuntu-box

在容器内安装软件(完全独立于宿主机)

sudo apt update && sudo apt install neovim

从宿主机直接运行容器内的命令

distrobox enter ubuntu-box -- neovim ~/project/main.py

容器内应用的图标会自动出现在宿主机应用菜单

容器内的 GUI 应用可以直接在宿主机桌面运行

列出所有容器

distrobox list

停止容器

distrobox stop ubuntu-box

删除容器

distrobox rm ubuntu-box


**使用场景:**
- **隔离开发环境**:不同项目使用不同的 Linux 发行版和依赖
- **测试跨发行版兼容性**:同时使用 Fedora/Ubuntu/Arch 容器
- **保留旧版本工具链**:在容器中运行旧版 Python/Node/GCC
- **安全的实验环境**:在容器内测试不受信任的软件
- **无缝集成**:容器内的文件可通过 `~` 直接访问宿主机家目录

### 5. Waydroid(Android 模拟)

基于容器的 Android 系统运行方案,在 Linux 上运行完整 Android:

bash yay -S waydroid


**前提条件:**
- 需要 Wayland 会话管理器(KDE Wayland / GNOME Wayland / Hyprland)
- CPU 支持必要的指令集(检查:`cat /proc/cpuinfo | grep -E 'sse4|aes'`)

**初始化与启动:**

bash

初始化 Android 映像(下载大约 1GB)

sudo waydroid init

启动 Waydroid 服务

sudo systemctl enable --now waydroid-container

启动 Android 界面

waydroid show-full-ui


**基本操作:**

bash

安装 APK

waydroid install app.apk

运行 Android 应用(直接在 Linux 桌面启动)

waydroid app launch com.example.app

打开 Android 设置界面

waydroid shell

调整窗口大小

waydroid prop set persist.waydroid.width 1080 waydroid prop set persist.waydroid.height 1920


**常见问题:**
- NVIDIA 显卡:Waydroid 对 NVIDIA 支持有限,可尝试软件渲染
- X11 用户:通过 `cage` 嵌套 Wayland 运行
- 需要 Google 服务:使用 `waydroid script install libndk` 安装

> **提示**:Distrobox 适合开发环境隔离,Waydroid 适合 Android 应用测试。两者都比传统虚拟机更轻量。

---

## 附录

### A. 制作 Windows 启动盘(Linux 下)

bash

1. 分区 U 盘 GPT + FAT32

sudo parted /dev/sdx mktable gpt sudo cfdisk /dev/sdx # 创建分区,类型 Microsoft basic data sudo mkfs.vfat /dev/sdxn

2. 挂载 ISO 并复制文件

sudo mount -o loop windows.iso /mnt cp -a /mnt/* /path/to/usb_mount

3. 压缩 install.wim(超 4GB 问题)

sudo pacman -S wimlib sudo wimlib-imagex optimize install.wim --solid

4. 复制到 U 盘

sudo cp -r /path/to/files/* /mnt/usb


### B. 制作自定义 Arch Linux Live USB

bash sudo pacman -S archiso sudo cp -r /usr/share/archiso/configs/releng /path/to/my-archlive

编辑 packages.x86_64 添加所需软件

编辑 pacman.conf 添加源

sudo mkarchiso -v -w /mnt/work -o /mnt/out /path/to/my-archlive


### C. 硬件信息检测

bash sudo pacman -S smartmontools # 磁盘健康检测 sudo smartctl -A /dev/sda # 查看硬盘 SMART 信息 yay -S cpu-x # CPU 详细信息 yay -S gpu-viewer # GPU 详细信息 sudo pacman -S dmidecode # 完整硬件信息 sudo dmidecode # 查看 BIOS、内存等


### D. 系统服务管理 cheat sheet

| 命令 | 作用 |
|------|------|
| `systemctl start service` | 启动服务 |
| `systemctl stop service` | 停止服务 |
| `systemctl restart service` | 重启服务 |
| `systemctl status service` | 查看状态 |
| `systemctl enable service` | 开机自启 |
| `systemctl disable service` | 禁用开机自启 |
| `systemctl enable --now service` | 开机自启+立即启动 |
| `journalctl -xe` | 查看错误日志 |
| `journalctl -p5` | 查看优先级为 notice 及以上的日志 |

### E. 重要配置文件路径

| 文件 | 用途 |
|------|------|
| `/etc/pacman.conf` | Pacman 配置 |
| `/etc/pacman.d/mirrorlist` | 镜像源列表 |
| `/etc/fstab` | 磁盘分区挂载配置 |
| `/etc/default/grub` | GRUB 引导配置 |
| `/etc/hostname` | 主机名 |
| `/etc/hosts` | 主机名解析 |
| `/etc/locale.gen` | 本地化配置 |
| `/etc/locale.conf` | 语言环境变量 |
| `/etc/systemd/system.conf` | systemd 配置 |
| `/etc/resolv.conf` | DNS 配置 |
| `/etc/environment` | 全局环境变量 |
| `~/.bashrc` | Bash 配置 |
| `~/.config/plasma-localerc` | KDE 本地化配置 |

### F. ZFS 文件系统参考

ZFS 是一个高级文件系统与卷管理器,提供数据校验、压缩、快照、RAID-Z 等特性。

> **注意**:由于 ZFS 的 CDDL 许可证与 Linux 内核的 GPL 不兼容,ZFS 无法直接包含在 Linux 内核中。Arch Linux 通过 DKMS 或预编译模块提供支持。

**安装 ZFS:**

bash

方法一:DKMS 版本(推荐,随内核更新自动重建)

yay -S zfs-dkms zfs-utils

方法二:预编译版本(需匹配内核版本)

yay -S zfs-linux zfs-utils

加载模块

sudo modprobe zfs


**创建 ZFS 池与数据集:**

bash

创建存储池(镜像模式,2块盘)

sudo zpool create -f tank mirror /dev/sdb /dev/sdc

创建数据集

sudo zfs create tank/data sudo zfs create tank/data/downloads

启用压缩

sudo zfs set compression=lz4 tank/data

设置挂载点

sudo zfs set mountpoint=/mnt/data tank/data

创建快照

sudo zfs snapshot tank/data@20240101

回滚快照

sudo zfs rollback tank/data@20240101

查看状态

sudo zpool status sudo zfs list -t snapshot


**ZFS 常用操作:**

bash

替换故障磁盘

sudo zpool replace tank /dev/sdb /dev/sdd

导出/导入池(迁移到其他机器)

sudo zpool export tank sudo zpool import tank

发送/接收快照(远程备份)

sudo zfs send tank/data@20240101 | ssh backup-server sudo zfs receive backup-tank/data

查看数据校验错误

sudo zpool scrub tank sudo zpool status -v


> **ZFS 内存需求**:建议至少 8GB 内存,使用 dedup(去重)功能时至少 32GB。

### G. systemd-boot 管理命令

bash

查看当前引导条目

bootctl list

查看 systemd-boot 状态

bootctl status

更新 systemd-boot(efi 分区挂载在 /boot 时自动)

bootctl update

设置默认引导条目(修改 /boot/loader/loader.conf)

default arch.conf

timeout 4

设置为下次启动使用特定条目(一次性)

bootctl set-oneshot arch-lts.conf

重启到固件设置界面

systemctl reboot --firmware-setup


### H. 更新系统的最佳实践

bash

日常更新

sudo pacman -Syu

同时更新 AUR

yay -Syu

清理孤儿包

sudo pacman -Rns $(pacman -Qtdq)

清理包缓存(保留最近 3 个版本)

paccache -r

清理 yay 缓存

rm -rf ~/.cache/yay


**更新前务必:**
1. 查看 [Arch Linux News](https://archlinux.org/news/) — 重大变更会提前公告
2. 确保至少有一个备用内核(`linux-lts`)
3. 如果使用 Btrfs,创建更新前快照
4. 对于 NVIDIA 用户,确认 `nvidia` 与 `linux` 内核版本兼容

**更新后:**
1. 检查 `.pacnew` 文件:`sudo pacdiff`
2. 检查是否有失败的服务:`systemctl --failed`
3. 检查内核模块是否正常加载:`lsmod | head`
4. 如果更新了内核或显卡驱动,重启系统

**Pacman 回退(降级包):**

bash

使用 downgrade(推荐)

yay -S downgrade sudo downgrade package_name

从缓存手动安装旧版本

ls -lt /var/cache/pacman/pkg/ | grep package_name sudo pacman -U /var/cache/pacman/pkg/package-old.pkg.tar.zst

锁定包版本(防止再次更新)

编辑 /etc/pacman.conf:

IgnorePkg = linux nvidia

```

Arch 之道:Keep It Simple, Stupid.

Arch Linux 将简洁定义为:避免任何不必要的添加、修改和复杂增加。你可以自己决定使用哪种桌面环境、安装哪些组件和服务。这种精细化的控制能够赋予你一个精简的操作系统,让你自由构建属于自己的系统。


本文档基于 ArchLinuxStudio/ArchLinuxTutorial、nakanomikuorg/arch-guide 及 Arch Wiki CN 整理,遵循 CC BY-SA 4.0 协议。