# Arch Linux 手册
> **基于 ArchLinuxStudio/ArchLinuxTutorial、nakanomikuorg/arch-guide 及 Arch Wiki CN 综合整理**
>
> 本文档旨在提供从零开始安装、配置和使用 Arch Linux 的完整指南,涵盖新手入门到进阶使用全流程。
---
## 目录
- [一、安装前的准备](#一安装前的准备)
- [二、基础安装](#二基础安装)
- [三、桌面环境与常用应用](#三桌面环境与常用应用)
- [四、显卡驱动](#四显卡驱动)
- [五、音频系统](#五音频系统)
- [六、魔法上网](#六魔法上网)
- [七、透明代理(全局代理)](#七透明代理全局代理)
- [八、Linux 日常操作与基础知识](#八linux-日常操作与基础知识)
- [九、系统维护与安全](#九系统维护与安全)
- [十、系统美化](#十系统美化)
- [十一、性能优化与功耗控制](#十一性能优化与功耗控制)
- [十二、常见问题排除与解决](#十二常见问题排除与解决)
- [十三、办公日常](#十三办公日常)
- [十四、视频影音](#十四视频影音)
- [十五、娱乐软件](#十五娱乐软件)
- [十六、安卓刷机](#十六安卓刷机)
- [十七、加密货币入门](#十七加密货币入门)
- [十八、直播与多媒体制作](#十八直播与多媒体制作)
- [十九、编程软件](#十九编程软件)
- [二十、虚拟化](#二十虚拟化)
- [附录](#附录)
---
## 一、安装前的准备
### 0. 终端编辑器 vim 的使用
在安装 Arch Linux 的过程中,需要使用到 vim 编辑器,基本操作如下:
```bash
vim 1.txt # 创建并编辑名为 1.txt 的文件
```
进入 vim 后,处于`命令模式`,输入 `a` 进入`编辑模式`,编辑完成后按 `Esc` 回到`命令模式`。
```bash
: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](https://archlinux.org/download/) 下载最新 ISO,推荐使用磁力链接下载。
**国内镜像站:**
- [中科大镜像站](http://mirrors.ustc.edu.cn/)
- [清华镜像站](https://mirrors.tuna.tsinghua.edu.cn/)
- [华为镜像站](https://repo.huaweicloud.com/archlinux/)
- [兰大镜像站](https://mirror.lzu.edu.cn/archlinux/)
#### 验证 ISO 完整性(重要)
下载后务必验证文件完整性,防止下载损坏或被篡改:
**方法一:PGP 签名验证(推荐)**
```bash
# 下载 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 时备用)**
```bash
# 下载对应的 SHA256 文件
# 计算本地文件的哈希值
sha256sum archlinux-YYYY.MM.DD-x86_64.iso
# 与官网提供的 SHA-256 值逐字符对比
```
> PGP 验证比 SHA-256 更安全——SHA-256 仅防传输损坏,PGP 还能防镜像站被篡改后提供伪造的校验值。
### 4. 刻录启动 U 盘
准备一个 2G 以上的 U 盘。
**Linux 下使用 dd 命令:**
```bash
sudo dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress oflag=sync
```
**推荐使用 Ventoy(跨平台):**
Ventoy 无需反复格式化 U 盘,拷贝 ISO 即可启动。支持多系统镜像。
```bash
# 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 会自动选择镜像源,但结果可能不准确:
```bash
systemctl stop reflector.service
```
> 2025 年后的镜像已默认禁用 reflector,无需手动操作。
### 1. 确认引导模式
**检查是否为 UEFI 模式:**
```bash
ls /sys/firmware/efi/efivars
```
若输出一堆 efi 变量,则说明已在 UEFI 模式。若提示目录不存在,则可能为 Legacy BIOS 模式。
**确认 UEFI 位宽(64 位 vs 32 位):**
```bash
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):**
```bash
iwctl
device list # 列出设备名
station wlan0 scan # 扫描网络
station wlan0 get-networks # 列出网络
station wlan0 connect YOUR-WIFI-NAME # 连接
exit
```
**有线网络:** 插入网线即可(DHCP)。
**故障排查:**
```bash
ip link # 列出网络接口
ip link set wlan0 up # 激活网卡
rfkill unblock wifi # 解锁无线网卡
```
### 3. 测试网络连通性
```bash
ping www.gnu.org
```
### 4. 更新系统时钟
```bash
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(交互式,推荐新手)**
```bash
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(命令行)**
```bash
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 扇区硬盘性能):**
```bash
fdisk -l /dev/sdx # 检查 Start 列值是否能被 4096 整除
```
> **双系统特别说明**:若与 Windows 共存,请勿格式化原有的 EFI 分区。Arch 会共用该分区中的文件夹。请确保 EFI 分区 ≥ 512 MiB(Windows 默认只有 100 MiB,可能不够用,可考虑在 Windows 中用 DiskGenius 扩容)。
### 6. 格式化
```bash
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 支持子卷快照、透明压缩、校验和等高级功能,以下为安装时的创建步骤:
```bash
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 方式:**
```bash
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 方式:**
```bash
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` | 临时文件 |
完整创建示例:
```bash
# 创建子卷
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. 选择镜像源
```bash
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. 安装系统
**基础系统包(必须):**
```bash
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 模块需要)
**核心工具包(推荐):**
```bash
pacstrap /mnt vim sudo bash-completion networkmanager
```
- 不安装 `dhcpcd` 和 `iwd`,改用 `NetworkManager`(桌面环境更方便)
- `iwd` 可后续按需安装
**Btrfs 用户额外安装:**
```bash
pacstrap /mnt btrfs-progs
```
**可选内核替代方案:**
| 内核 | 适用场景 |
|------|----------|
| `linux` | 通用,功能最全 |
| `linux-lts` | 稳定优先,兼容性好,推荐服务器 |
| `linux-zen` | 桌面优化,响应性更好 |
| `linux-hardened` | 安全加固,有额外性能开销 |
> 多内核可同时安装,GRUB 启动时选择。建议至少安装 `linux` + `linux-lts` 作为备用。
### 10. 生成 fstab
```bash
genfstab -U /mnt >> /mnt/etc/fstab
cat /mnt/etc/fstab # 复查
```
### 11. Chroot 进入新系统
```bash
arch-chroot /mnt
```
### 12. 时区设置
```bash
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
```
### 13. 本地化(Locale)
```bash
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. 主机名
```bash
echo 'myarch' > /etc/hostname # 替换为你的主机名
vim /etc/hosts
```
添加内容:
```
127.0.0.1 localhost
::1 localhost
127.0.1.1 myarch
```
### 15. 设置 root 密码
```bash
passwd root
```
### 16. 安装微码
```bash
pacman -S intel-ucode # Intel CPU
pacman -S amd-ucode # AMD CPU
```
### 17. 安装引导程序
#### 选项 A:GRUB(通用,推荐新手)
GRUB 功能最全面,支持 UEFI + Legacy BIOS、双系统检测、主题美化:
```bash
pacman -S grub efibootmgr os-prober # os-prober 用于检测双系统
```
**安装到 EFI:**
```bash
# 先确认 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`:**
```bash
vim /etc/default/grub
```
常用配置调整:
```conf
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 nowatchdog" # 去掉 quiet 可以看到详细启动日志
# loglevel=3(仅警告以上),nowatchdog(禁用看门狗,加速开关机)
# 或 loglevel=5(信息级别),方便排查启动问题
# 双系统用户添加:
GRUB_DISABLE_OS_PROBER=false
```
**生成 GRUB 配置:**
```bash
grub-mkconfig -o /boot/grub/grub.cfg
```
#### 选项 B:systemd-boot(简单轻量,仅 UEFI)
如果只用 Arch Linux 单系统,systemd-boot 是更简洁的选择:
```bash
# 确认 EFI 分区挂载在 /boot
bootctl install
```
创建引导条目 `/boot/loader/entries/arch.conf`:
```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`:
```conf
default arch.conf
timeout 4
console-mode max
editor yes
```
#### 选项 C:EFISTUB(最直接,无引导菜单)
直接将内核作为 EFI 可执行文件启动(需要 UEFI 支持),通过 `efibootmgr` 注册:
```bash
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:
```bash
HOOKS=(base systemd autodetect microcode modconf kms block filesystems keyboard fsck)
```
创建 UKI 输出目录并编辑 `/etc/mkinitcpio.d/linux.preset`:
```bash
sudo mkdir -p /efi/EFI/Linux
```
在 preset 文件末尾添加:
```bash
# /etc/mkinitcpio.d/linux.preset
default_uki="/efi/EFI/Linux/arch-linux.efi"
fallback_uki="/efi/EFI/Linux/arch-linux-fallback.efi"
```
生成 UKI:
```bash
sudo mkinitcpio -P
```
**注册到 UEFI 启动菜单:**
```bash
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):**
```bash
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 配置:**
标准桌面用户(无加密):
```bash
HOOKS=(base udev autodetect microcode kms modconf block filesystems keyboard fsck)
```
LUKS 加密用户:
```bash
HOOKS=(base udev autodetect microcode modconf block encrypt filesystems keyboard fsck)
```
UKI + LUKS 加密用户:
```bash
HOOKS=(systemd autodetect microcode modconf block sd-encrypt filesystems keyboard fsck)
```
查看当前配置:
```bash
cat /etc/mkinitcpio.conf | grep HOOKS
```
修改配置后重新生成:
```bash
mkinitcpio -P # 重新生成所有内核的 initramfs
mkinitcpio -p linux # 仅重新生成 linux 内核的 initramfs
```
> **注意**:自定义 `HOOKS` 后忘记运行 `mkinitcpio -P` 是导致重启后无法解密/挂载根分区的最常见原因之一。
### 17.6 Secure Boot 配置(可选)
如果未在 BIOS 中关闭 Secure Boot,可以通过 `sbctl` 自行签名引导文件。
**安装与设置 sbctl:**
```bash
# 重启进入新系统后
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 双系统
```
**签名引导文件:**
```bash
# 签名所有需要签名的文件
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`:
```ini
[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. 完成安装
```bash
exit # 退出 chroot 环境
umount -R /mnt # 卸载所有挂载
reboot # 重启
```
重启前**拔掉 U 盘**。
> 重启后,用 `root` 账户登录。首次启动可能提示 `timed out waiting for device`——这是正常的,稍等即可。
启动网络服务:
```bash
systemctl enable --now NetworkManager
```
验证网络:
```bash
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 管理命令(安装后)
```bash
# 查看子卷列表
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:**
```bash
# 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 日常管理:**
```bash
# 扩展逻辑卷(在线扩容)
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 加密根分区(最常用)**
```bash
# 分区阶段创建加密分区
# 使用 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 后配置:
```bash
# 编辑 /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(加密+灵活分区)**
```bash
# 创建加密的 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 方案
```
**密钥文件自动解锁(二阶段解锁):**
```bash
# 创建密钥文件
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(内存压缩,推荐桌面/笔记本):**
```bash
# 安装 zram-generator(自动创建压缩 swap,无需独立分区)
pacman -S zram-generator
# 配置文件 /etc/systemd/zram-generator.conf(默认即可)
# [zram0]
# zram-size = ram / 2 # 默认为内存的 50%
```
启用后重启或:
```bash
systemctl start systemd-zram-setup@zram0
swapon --show # 验证 zram 已启用
```
> Zram 将一部分内存压缩后作为 swap 使用,压缩率通常 2-3:1。8G 内存设置 4G zram 实际约占用 1.3-2G 物理内存。
**Zswap(内核级压缩缓存):**
```bash
# 通过内核参数启用(配合传统 swap 文件/分区使用)
# 编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX 中添加:
zswap.enabled=1 zswap.compressor=zstd zswap.max_pool_percent=20
```
**Swap 文件(Btrfs:需额外步骤):**
```bash
# 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. 更新系统
```bash
pacman -Syyu
```
### 2. 创建普通用户
```bash
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]` 节的注释
- 添加:
```conf
[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
```
更新并安装 keyring:
```bash
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 桌面(推荐)
```bash
# 安装 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)"。如需强制启用:
```bash
sudo pacman -S plasma-wayland-session
```
### 6. 安装其他桌面环境
**GNOME**(简洁现代风格):
```bash
sudo pacman -S gnome gnome-tweaks
sudo systemctl enable gdm
# 登录管理器选择 GDM,会话选 "GNOME"
# 注意:GNOME 默认使用 Xorg,可在 GDM 登录界面选择 "GNOME on Wayland"
```
**XFCE**(轻量传统风格):
```bash
sudo pacman -S xfce4 xfce4-goodies lightdm lightdm-gtk-greeter
sudo systemctl enable lightdm
```
**Cinnamon**(Windows 风格):
```bash
sudo pacman -S cinnamon lightdm lightdm-gtk-greeter
sudo systemctl enable lightdm
```
**i3 WM**(平铺窗口管理器):
```bash
sudo pacman -S i3-wm i3status i3lock dmenu
# 搭配显示管理器或使用 ~/.xinitrc
```
**Hyprland**(现代化 Wayland 平铺合成器):
```bash
sudo pacman -S hyprland waybar wofi dunst
# 参见 Hyprland Wiki 配置
```
### 7. 配置网络(桌面环境)
```bash
sudo systemctl disable iwd
sudo systemctl stop iwd
sudo systemctl enable --now NetworkManager
```
### 8. 安装基础功能包
```bash
# 声音固件
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
```bash
sudo vim /etc/resolv.conf
```
添加:
```
nameserver 8.8.8.8
nameserver 2001:4860:4860::8888
```
防止被覆盖:
```bash
sudo chattr +i /etc/resolv.conf
```
### 10. 设置系统为中文
系统设置 → 区域设置 → 语言,添加中文,注销重登即可。
### 11. 安装输入法
Arch Linux 下推荐使用 **Fcitx5** 输入法框架(尤其是 KDE Plasma 用户),GTK 环境(GNOME)也可使用 **IBus**。
**安装 Fcitx5:**
```bash
sudo pacman -S fcitx5-im fcitx5-chinese-addons fcitx5-pinyin-zhwiki fcitx5-material-color
```
**安装 IBus(GNOME 用户可选):**
```bash
sudo pacman -S ibus ibus-libpinyin
```
**设置环境变量**(新建 `~/.config/environment.d/im.conf`):
```bash
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. 蓝牙(若有)
```bash
sudo pacman -S bluez bluez-utils bluez-obex
sudo systemctl enable --now bluetooth
```
### 13. 打印支持(CUPS)
```bash
# 安装 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 |
如需切换显示管理器:
```bash
sudo systemctl disable sddm
sudo systemctl enable gdm # 切换到 GDM
```
> 注意:**同一时间只能启用一个**显示管理器。切换前先 disable 当前的。
### 15. 配置 Timeshift 快照
```bash
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` 之后:
```bash
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 用户特别注意:**
```bash
# /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:
```bash
sudo mkinitcpio -P
```
### 英特尔核芯显卡
```bash
sudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel
```
> Intel HD 4000 及以上才支持 Vulkan。不建议安装 `xf86-video-intel`。
### AMD 核芯显卡
先查架构(techpowerup.com),GCN3+ 架构使用 AMDGPU 驱动:
```bash
sudo pacman -S mesa lib32-mesa xf86-video-amdgpu vulkan-radeon lib32-vulkan-radeon
```
老显卡(GCN2.0 及以下)使用 ATI 开源驱动。
### NVIDIA 独立显卡
**较新型号:**
```bash
sudo pacman -S nvidia nvidia-settings lib32-nvidia-utils
```
**老卡(GeForce 630-920):**
```bash
yay -S nvidia-470xx-dkms nvidia-settings lib32-nvidia-470xx-utils linux-headers
```
**更老(GeForce 400-630):**
```bash
yay -S nvidia-390xx-dkms nvidia-settings lib32-nvidia-390xx-utils linux-headers
```
### 双显卡笔记本(NVIDIA Optimus)
```bash
yay -S optimus-manager optimus-manager-qt
sudo systemctl enable optimus-manager
```
提供三种模式:仅独显、仅核显、hybrid 动态切换。
```bash
# 使用独显运行特定程序
sudo pacman -S nvidia-prime
prime-run some_program
```
### AMD 独显
安装与 AMD 核显相同。使用 `DRI_PRIME=1` 切换独显:
```bash
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 应用问题:
```bash
# ~/.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 工具:**
```bash
# 查看当前显示协议
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
```bash
# 安装 PipeWire 核心组件
sudo pacman -S pipewire pipewire-alsa pipewire-pulse pipewire-jack
# 安装会话管理(必需)
sudo pacman -S wireplumber
# 安装图形化音量控制
sudo pacman -S pavucontrol qt6-pipewire
```
### 3. 启用 PipeWire
```bash
# 如果之前使用了 PulseAudio,先停用
systemctl --user disable --now pulseaudio.service pulseaudio.socket
# 启用 WirePlumber(PipeWire 会话管理器)
systemctl --user enable --now wireplumber
# 重启或重新登录后生效
```
> PipeWire 默认会自动启动,无需手动 enable pipewire.service。
> 验证是否正常运行:
> ```bash
> 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 新闻 | (重大更新前务必查看) |
| 每周 | 检查 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
true
true
hintslight
rgb
lcddefault
sans-serif
Noto Sans CJK SC
Source Han Sans SC
```
```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 协议。*