* 通用安装教程是本文编写目标

本文主要涉及 ASUS 和 ThinkPad 笔记本的安装, 其余设备仅具备一些参考性
本文内容过于简略, 如果有任何疑问请参考 ArchWiki

安装步骤

务必在 UEFI 页面关闭安全启动功能, 建议关闭快速启动功能

启动到 archiso 实时环境

关于下载 ISO 和如何启动到 archiso 的相关内容请参考 ArchWiki

连接到互联网

最简单的方式就是使用有线网连接网络

若使用无线网络, 则使用 iwctl 连接, 步骤如下:

查看无线网卡设备并确保已开启

1
iwctl device list

扫描并查看可用网络

1
2
iwctl station <device> scan
iwctl station <device> get-networks

连接网络

1
iwctl station <device> connect <SSID>

网络连接默认尝试 DHCP 分配 IP, 若有其他需求如静态分配 IP 请参考 ArchWiki

检查互联网连接

1
ping ping.archlinux.org

确保系统时钟同步

1
timedatectl

准备磁盘

查看要安装系统的磁盘设备

重要! 确保系统安装在正确的位置, 避免抹除掉重要数据

1
fdisk -l | less

对于不同类型的设备, 设备路径和分区路径有所不同, 这里举一个简单的例子, 实际设备名会有细微的不同:

  • m.2 接口的 nvme 协议设备: /dev/nvme0n1
    • boot partition: /dev/nvme0n1p1
    • swap partition: /dev/nvme0n1p2
    • root partition: /dev/nvme0n1p3
  • sata 接口或 usb 接口设备: /dev/sda
    • boot partition: /dev/sda1
    • swap partition: /dev/sda2
    • root partition: /dev/sda3

抹除磁盘

重要! 确保系统安装在正确的位置, 避免抹除掉重要数据

1
wipefs --all <disk>

硬盘分区

1
2
3
4
5
6
7
8
9
10
11
parted <disk> --script \
mklabel gpt \
mkpart "\"EFI System\"" fat32 1MiB 1025MiB \
set 1 esp on \
mkpart "\"Linux swap\"" linux-swap 1025MiB <swap-size> \
mkpart "\"Linux root (x86-64)\"" ext4 <swap-size> 100% \
type 3 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
# 让内核识别到硬盘分区更改
partprobe <disk>
# 若写在脚本里建议等待一段时间
sleep 2

此处 swap-size 实际值应为 1025 加上真正的 swap 分区大小 (以 MiB 为单位). 比如 swap 分区大小为 32GB, 则此处值为 1025MiB + 32 * 1024 MiB = 33793MiB

交互模式进行硬盘分区

1
cfdisk <disk>

分区类型选 GPT

分区方案:

Mount Point Partition type GUID Size
/boot C12A7328-F81F-11D2-BA4B-00A0C93EC93B: EFI System 建议 1GB
[SWAP] 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F: Linux swap 如果空间大小允许, 建议与内存容量相同
/ 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709: Linux root (x86-64) Remainder

格式化分区

1
2
3
mkfs.fat -F 32 <boot-partition>
mkswap <swap-partition>
mkfs.ext4 <root-partition>

建议检查磁盘更改

查看分区更改

1
fdisk -l <disk>

检查格式化分区

1
lsblk -f <disk>

挂载文件系统

1
2
3
mount <root-partition> /mnt
mount --mkdir <boot-partition> /mnt/boot
swapon <swap-partition>

镜像源相关

这里只有 mirrorlist 文件会复制到目标磁盘中, 其余任何修改都不会应用到目标磁盘, 因此在目标磁盘仍然需要进行相应的修改

修改镜像源为 CN

1
2
3
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
curl -L 'https://archlinux.org/mirrorlist/?country=CN&protocol=https' -o /etc/pacman.d/mirrorlist
sed -i 's/^#Server/Server/' /etc/pacman.d/mirrorlist

添加 32 位包安装支持

1
2
cp /etc/pacman.conf /etc/pacman.conf.bak
sed -i '/\[multilib\]/,/Include = \/etc\/pacman.d\/mirrorlist/ s/^#//' /etc/pacman.conf

对于 ASUS Laptop, 建议添加 asus linux 源

1
2
3
4
5
6
7
8
9
10
curl -L "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x8b15a6b0e9a3fa35" -o g14.sec
pacman-key -a g14.sec
pacman-key --finger 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35
pacman-key --lsign-key 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35
pacman-key --finger 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35
rm g14.sec
echo "" | tee -a /etc/pacman.conf
echo "[g14]" | tee -a /etc/pacman.conf
echo "# Server = https://arch.asus-linux.org" | tee -a /etc/pacman.conf
echo "Server = https://naru.jhyub.dev/\$repo" | tee -a /etc/pacman.conf

刷新缓存

1
pacman -Sy

安装必要软件包

1
pacstrap -K /mnt <packages...>

根据具体需求安装软件包:

  • 基础包
    • base: 基础系统工具
    • base-devel: 编译工具, Arch AUR 依赖
    • linux: 系统内核
    • linux-firmware: 常见固件
  • CPU 微码
    • intel-ucode: Intel CPU 微码
    • amd-ucode: AMD CPU 微码
  • 网络
    • networkmanager: 目前为止功能最全的网络管理工具, 与 KDE 协同工作良好, 需要启动 NetworkManager.service, systemd-resolved.service 守护进程
    • modemmanager: 移动宽带支持, 需要启动 ModemManager.service 守护进程
    • usb_modeswitch: 移动宽带支持
    • ppp: PPPoE / DSL 支持
  • 蓝牙
    • bluez: 提供蓝牙协议栈, 需要启动 bluetooth.service 守护进程
    • bluez-utils: 蓝牙命令行工具
  • 性能调度
    • power-profiles-daemon
      • power-profiles-daemon: 调度工具, ASUS Laptop 用户可选, 需要启动 power-profiles-daemon.service 守护进程
      • python-gobject: 修复 power-profiles-daemon 报错
      • asusctl: ASUS Laptop 管理配置工具, 需要添加 ASUS Linux 源, ASUS Laptop 用户可选
      • rog-control-center: asusctl 的 GUI 工具, 需要添加 ASUS Linux 源
    • tlp
      • tlp: 新一代调度工具, ThinkPad 用户可选, 需要启动 tlp.service 守护进程
      • tlp-pd: tlp 与 KDE 集成依赖
      • tlp-rdw: tlp 与 无线设备集成依赖, 需要启动 NetworkManager-dispatcher.service 守护进程
  • 显卡与视频
    • Intel
      • mesa: 显卡驱动
      • lib32-mesa: 显卡驱动 32 位支持
      • vulkan-intel: 显卡驱动 Vulkan 支持
      • lib32-vulkan-intel: 显卡驱动 Vulkan 32 位支持
      • intel-media-driver: Intel VA-API 支持
    • AMD
      • mesa: 显卡驱动
      • lib32-mesa: 显卡驱动 32 位支持
      • vulkan-radeon: 显卡驱动 Vulkan 支持
      • lib32-vulkan-radeon: 显卡驱动 Vulkan 32 位支持
    • NVIDIA
      • nvidia-open: 显卡驱动
      • nvidia-utils: VDPAU, NVENC, NVDEC, Vulkan 支持
      • lib32-nvidia-utilsVDPAU, NVENC, NVDEC, Vulkan 32 位支持
      • libva-nvidia-driver: 基于 CUDA NVDEC 的 VA-API 后端
    • Vulkan
      • vulkan-icd-loader: Vulkan 应用依赖
      • lib32-vulkan-icd-loader Vulkan 应用 32 位依赖
      • vulkan-tools: Vulkan 工具
    • 视频编解码
      • libvdpau-va-gl: 带 OpenGL/VAAPI 后端的 VDPAU 驱动
      • libva-utils: VA-API 工具
      • vdpauinfo: VDPAU 工具
  • 音频
    • sof-firmware: 某些板载声卡的固件
    • alsa-firmware: ALSA 固件
    • alsa-utils: ALSA 工具
    • pipewire: 全新多媒体框架, 需要以非 root 身份启动 pipewire.service 守护进程. 若安装 KDE, 则会自动启用该进程, 无需手动设置
    • lib32-pipewire pipewire 的 32 位支持
    • wireplumber: pipewire 会话管理器, 需要以非 root 身份启动 wireplumber.service 守护进程. 若安装 KDE, 则会自动启用该进程, 无需手动设置
    • pipewire-audio: pipewire 音频服务器基础
    • pipewire-alsa: pipewire ALSA 支持
    • pipewire-pulse: pipewire PluseAudio 支持, 需要以非 root 身份启动 pipewire-pulse.service 守护进程. 若安装 KDE, 则会自动启用该进程, 无需手动设置
    • pipewire-jack: pipewire JACK 支持
    • lib32-pipewire-jack pipewire JACK 32 位支持
  • 工具
    • sudo: 以非 root 用户身份执行特权命令
    • nano, vi, vim: 文本编辑器, vi 是全局默认编辑器, 若不选择安装则需要额外手动配置
    • man-db, man-pages, texinfo: 命令帮助手册
    • wget
    • git
    • openssh: 需要启动 sshd.service 守护进程
    • btop
    • fuse2
    • unzip
    • 7zip
    • tmux
    • tree
    • firewalld: 需要启动 firewalld.service 守护程序
    • libayatana-appindicator
  • 字体
    • noto-fonts
    • noto-fonts-cjk
    • noto-fonts-emoji
    • ttf-cascadia-code-nerd
  • 桌面环境
    • plasma-meta: 需要启动 plasmalogin.service 守护程序
    • konsole
    • dolphin
    • qt6-multimedia-ffmpeg
    • kwalletmanager
    • krdc
    • firefox
  • 输入法
    • fcitx5-im
    • fcitx5-chinese-addons
    • fcitx5-pinyin-zhwiki

准备 arch-chroot

安装启动时所需的文件系统

1
genfstab -U /mnt | tee -a /mnt/etc/fstab

将原始 mirrorlist 复制到目标磁盘中

1
cp /etc/pacman.d/mirrorlist.bak /mnt/etc/pacman.d/

将 root 转换到新系统中

1
arch-chroot /mnt

进入 arch-chroot 环境

时间

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

地区

1
2
3
4
5
cp /etc/locale.gen /etc/locale.gen.bak
sed -i '/en_US.UTF-8/s/^#//' /etc/locale.gen
sed -i '/zh_CN.UTF-8/s/^#//' /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" | tee -a /etc/locale.conf

网络配置

1
echo <hostname> | tee -a /etc/hostname

Boot loader

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bootctl install
bootctl --variables=no --graceful update

echo "title Arch Linux" | tee -a /boot/loader/entries/arch.conf
echo "linux /vmlinuz-linux" | tee -a /boot/loader/entries/arch.conf
echo "initrd /<intel|amd>-ucode.img" | tee -a /boot/loader/entries/arch.conf
echo "initrd /initramfs-linux.img" | tee -a /boot/loader/entries/arch.conf

# 无 NVIDIA 显卡
echo "options root=PARTUUID=$(blkid -s PARTUUID -o value <root-partition>) rw" | tee -a /boot/loader/entries/arch.conf
# 有 NVIDIA 显卡建议添加 nvidia_drm.fbdev=1 参数
echo "options root=PARTUUID=$(blkid -s PARTUUID -o value <root-partition>) rw nvidia_drm.fbdev=1" | tee -a /boot/loader/entries/arch.conf

echo "default arch.conf" | tee -a /boot/loader/loader.conf
echo "timeout 3" | tee -a /boot/loader/loader.conf
bootctl update

将必要服务设置为开机自启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
systemctl enable NetworkManager.service
systemctl enable systemd-resolved.service
systemctl enable ModemManager.service
systemctl enable bluetooth.service

# ASUS Laptop
systemctl enable power-profiles-daemon.service
# ThinkPad
systemctl enable tlp.service
systemctl enable NetworkManager-dispatcher.service

systemctl enable sshd.service
systemctl enable firewalld.service
systemctl enable plasmalogin.service

镜像源相关

添加 32 位包安装支持

1
2
cp /etc/pacman.conf /etc/pacman.conf.bak
sed -i '/\[multilib\]/,/Include = \/etc\/pacman.d\/mirrorlist/ s/^#//' /etc/pacman.conf

对于 ASUS Laptop, 建议添加 asus linux 源

1
2
3
4
5
6
7
8
9
10
curl -L "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x8b15a6b0e9a3fa35" -o g14.sec
pacman-key -a g14.sec
pacman-key --finger 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35
pacman-key --lsign-key 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35
pacman-key --finger 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35
rm g14.sec
echo "" | tee -a /etc/pacman.conf
echo "[g14]" | tee -a /etc/pacman.conf
echo "# Server = https://arch.asus-linux.org" | tee -a /etc/pacman.conf
echo "Server = https://naru.jhyub.dev/\$repo" | tee -a /etc/pacman.conf

刷新缓存

1
pacman -Syu

用户管理

1
2
3
4
5
6
7
echo "%wheel ALL=(ALL:ALL) ALL" | tee /etc/sudoers.d/user-access
chmod 0440 /etc/sudoers.d/user-access
visudo -c
useradd -m -G wheel user

passwd
passwd user

退出 arch-chroot

1
exit

结束安装

1
2
umount -R /mnt
poweroff

进入系统

安装 nvidia-laptop-power-cfg (针对 ASUS Laptop)

1
2
3
4
5
6
7
8
9
10
11
12
13
git clone https://gitlab.com/asus-linux/nvidia-laptop-power-cfg.git /home/user/nvidia-laptop-power-cfg
cd /home/user/nvidia-laptop-power-cfg
makepkg -sfi
sudo systemctl enable nvidia-suspend.service nvidia-hibernate.service nvidia-resume.service
sudo systemctl enable --now nvidia-powerd
cd /home/user
rm -rf /home/user/nvidia-laptop-power-cfg
# 检查命令
# cat /proc/driver/nvidia/gpus/<bus_address>/power
# 检查结果应该如下所示
# S0ix Power Management:
# Platform Support: Supported
# Status: Enabled

一些错误修复

1
2
3
4
sudo ln -sf /usr/lib/qt6/bin/qtpaths /usr/bin/qtpaths

# ASUS Laptop 执行
asusctl aura effect static -c ffffff

修改 KDE 设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
kwriteconfig6 --file powerdevilrc --group AC --group Display --key DimDisplayIdleTimeoutSec -- -1
kwriteconfig6 --file powerdevilrc --group AC --group Display --key DimDisplayWhenIdle false
kwriteconfig6 --file powerdevilrc --group AC --group Display --key TurnOffDisplayIdleTimeoutSec -- -1
kwriteconfig6 --file powerdevilrc --group AC --group Display --key TurnOffDisplayWhenIdle false
kwriteconfig6 --file powerdevilrc --group AC --group SuspendAndShutdown --key AutoSuspendAction 0
kwriteconfig6 --file powerdevilrc --group AC --group SuspendAndShutdown --key LidAction 0
kwriteconfig6 --file powerdevilrc --group AC --group SuspendAndShutdown --key PowerButtonAction 0
kwriteconfig6 --file powerdevilrc --group Battery --group Display --key DimDisplayIdleTimeoutSec -- -1
kwriteconfig6 --file powerdevilrc --group Battery --group Display --key DimDisplayWhenIdle false
kwriteconfig6 --file powerdevilrc --group Battery --group Display --key TurnOffDisplayIdleTimeoutSec -- -1
kwriteconfig6 --file powerdevilrc --group Battery --group Display --key TurnOffDisplayWhenIdle false
kwriteconfig6 --file powerdevilrc --group Battery --group SuspendAndShutdown --key AutoSuspendAction 0
kwriteconfig6 --file powerdevilrc --group Battery --group SuspendAndShutdown --key LidAction 0
kwriteconfig6 --file powerdevilrc --group Battery --group SuspendAndShutdown --key PowerButtonAction 0
kwriteconfig6 --file powerdevilrc --group BatteryManagement --key BatteryCriticalAction 0
kwriteconfig6 --file powerdevilrc --group LowBattery --group Display --key DimDisplayIdleTimeoutSec -- -1
kwriteconfig6 --file powerdevilrc --group LowBattery --group Display --key DimDisplayWhenIdle false
kwriteconfig6 --file powerdevilrc --group LowBattery --group Display --key TurnOffDisplayIdleTimeoutSec -- -1
kwriteconfig6 --file powerdevilrc --group LowBattery --group Display --key TurnOffDisplayWhenIdle false
kwriteconfig6 --file powerdevilrc --group LowBattery --group Display --key UseProfileSpecificDisplayBrightness false
kwriteconfig6 --file powerdevilrc --group LowBattery --group SuspendAndShutdown --key AutoSuspendAction 0
kwriteconfig6 --file powerdevilrc --group LowBattery --group SuspendAndShutdown --key LidAction 0
kwriteconfig6 --file powerdevilrc --group LowBattery --group SuspendAndShutdown --key PowerButtonAction 0
kwriteconfig6 --file kscreenlockerrc --group Daemon --key Autolock false
kwriteconfig6 --file kscreenlockerrc --group Daemon --key LockGrace 0
kwriteconfig6 --file kscreenlockerrc --group Daemon --key Timeout 0
kwriteconfig6 --file systemsettingsrc --group systemsettings_sidebar_mode --key HighlightNonDefaultSettings true
plasma-apply-lookandfeel --apply org.kde.breezedark.desktop

kwriteconfig6 --file powerdevilrc --group AC --group Performance --key PowerProfile power-saver
kwriteconfig6 --file powerdevilrc --group Battery --group Performance --key PowerProfile power-saver
kwriteconfig6 --file powerdevilrc --group LowBattery --group Performance --key PowerProfile power-saver

建议重启系统

1
reboot

TODO

需要手动修改的选项 (暂时未找到较好的命令修改方法):

  • 系统设置

    • 鼠标和触摸板
      • 触摸板
        • 反向滚动
    • 键盘
      • 虚拟键盘
        • 选择 Fcitx 5 Wayland 启动器
    • 登录屏幕
      • 点击 应用 Plasma 设置 (在修改完其他设置之后点击)
    • KDE 密码库
      • 启用 KDE 密码库子系统
    • 区域和语言
      • 语言 修改
        • 添加 简体中文 并置顶
    • 日期和时间
      • 自动设置日期和时间
    • 输入法
      • 添加输入法 拼音
      • 拼音
        • 启用云拼音
      • 配置附加组件
        • 经典用户界面
          • 主题 KDE Plasma (实验性)
          • 深色主题 KDE Plasma (实验性)
          • 跟随系统浅色 / 深色设置
    • 电源管理
      • 交流供电
        • 切换到此电源方案 省电 kwriteconfig6 --file powerdevilrc --group AC --group Performance --key PowerProfile power-saver
      • 电池供电
        • 切换到此电源方案 省电 kwriteconfig6 --file powerdevilrc --group Battery --group Performance --key PowerProfile power-saver
      • 电池电量低
        • 切换到此电源方案 省电 kwriteconfig6 --file powerdevilrc --group LowBattery --group Performance --key PowerProfile power-saver
  • 显示面板 (类似 Windows 的任务栏) 设置

    • 面板设置
      • 显示 / 隐藏 避开窗口
    • 副屏设置为主屏面板的副本
  • ROG Control Center

    • App Settings
      • Run in background after closing close
  • Dolphin 文件管理器

    • 显示隐藏文件
    • 显示菜单栏
    • 配置 Dolphin
      • 启动时显示 /home/user
  • 自动解压并写入应用程序启动器 (类似 Windows 的开始菜单) 的一些 portable app (目前包括 localsend, v2rayn, vscode, 等等)