安装 Arch + Win11 双系统过程记录

Coast23

参考自:

https://blog.linioi.com/posts/18/

https://zhuanlan.zhihu.com/p/9780381446

本篇文章仅为过程记录, 并非详细教程, 仅供参考.

准备工作

环境

原来的硬盘爆满了, 所以我另外买了一块 SSD, 分了一块空间给 Windows 堆杂文件, 剩下的空间想拿来装一个双系统.

软硬件参数如下:

软/硬件配置
OSWindows 11
引导UEFI
CPUi9-14900HX
GPURTX 4070 Laptop
RAM32GB

最终选择了 Arch Linux (如标题所见).

制作 Arch Live USB 并启动

官网找一个国内的镜像站下载 ISO 文件, 我选择的是清华源

使用Rufus烧录 ISO 镜像到 USB 中.

1.png

我已经预留了一个大的空闲空间, 所以不用再去折腾分区了 (记住这句话), 直接重启电脑, 进入 BIOS, 关掉 Fast BootSecure Boot, 选择 U 盘为第一启动项, 启动.

启动之后, Boot Menu 选择第一项 Arch Linux install medium (x86_64, UEFI), 回车之后, 正常应该进入到终端了, 没想到黑屏了.

第一反应是独显惹的祸, 进入 BIOS, 在高级选项里找到 显示模式, 将其从 dGPU Only 改为 动态, 重启.

这次就成功进入到终端界面了.

连接网络并同步时间

输入 iwctl 进入 iwd 的控制台, 然后依次键入如下命令:

device list                   # 列出可用无线网卡, 我这里输出的是 wlan0
station wlan0 scan # 扫描附近的无线网络
station wlan0 get-networks # 列出扫描到的网络
station wlan0 connect {SSID} # 连接指定网络, 这里我连的是手机热点
exit # 退出 iwd 控制台

然后, 输入 ping www.baidu.com 测试是否成功联网.

联网后, 输入如下命令设置时间为 UTC 并完成 NTP 时间同步:

hwclock --systohc --utc
timedatectl set-ntp true

分区

分区的时候, 才发现我的 SSD 是 MBR (DOS) 分区表, 但 UEFI 引导 不支持 MBR 硬盘启动 Linux 内核, 所以, 我还得把分区表转为 GPT (GUID)

于是, 我切换到 Windows, 启动 DiskGenius, 以为转换可以一把梭, 没想到报错了: GPT 分区表需要更多的扇区…

于是 xjb 改扇区位置, 然后把盘改损坏了… 花了好长的时间恢复…

总之, 要 确保安装 Arch 的磁盘是 GPT 分区表.

在 Arch Live 终端输入 lsblk -f, 确定要安装系统的磁盘, 我这里是 /dev/nvme1n1.

使用 fdisk /dev/nvme1n1 进行分区. ( fdisk 的使用方式, 随便一搜就有)

这是我的分区:

分区挂载点大小类型文件系统
ESP/boot512MBEFI SystemFAT32
Root/剩余所有Linux FSbtrfs

这是我的子卷:

子卷名挂载点作用说明
@/系统 (除了 /home /var 等)
@home/home用户目录 (独立于系统)
@root/rootroot目录 (独立于系统)
@log/var/log运行时的缓存和日志无需留存
@cache/var/cache运行时的缓存和日志无需留存
@tmp/var/tmp运行时的缓存和日志无需留存
@swap/swap存放 swap 文件的目录 (用于休眠)
@snapshots/.snapshotsSnapper 或 Timeshift 的快照存储目录

分区后, 键入以下命令, 格式化与挂载分区:

# 格式化
mkfs.fat -F32 /dev/nvme1n1p2 # ESP, 通常 ESP 都是 p1, 但我 p1 已经分了一个存文件的分区了...
mkfs.btrfs archlinux /dev/nvme1n1p3 # Root

# 挂载
mount /dev/nvme1n1p3 /mnt

# 创建子卷
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@root
btrfs subvolume create /mnt/@log
btrfs subvolume create /mnt/@cache
btrfs subvolume create /mnt/@tmp
btrfs subvolume create /mnt/@swap
btrfs subvolume create /mnt/@snapshots

umount /mnt

# 挂载子卷
mount /dev/nvme1n1p3 /mnt -o subvol=@,noatime,compress=zstd:1
mount /dev/nvme1n1p3 /mnt/home -o subvol=@home,noatime,compress=zstd:1 --mkdir
mount /dev/nvme1n1p3 /mnt/root -o subvol=@root,noatime,compress=zstd:1 --mkdir
mount /dev/nvme1n1p3 /mnt/var/log -o subvol=@log,noatime,compress=zstd:1 --mkdir
mount /dev/nvme1n1p3 /mnt/var/cache -o subvol=@cache,noatime,compress=zstd:1 --mkdir
mount /dev/nvme1n1p3 /mnt/var/tmp -o subvol=@tmp,noatime,compress=zstd:1 --mkdir
mount /dev/nvme1n1p3 /mnt/swap -o subvol=@swap --mkdir

# 取消缓存和日志的 CoW 和压缩
chattr +C /mnt/var/log
chattr +C /mnt/var/cache
chattr +C /mnt/var/tmp

# 挂载 EFI 分区
mount /dev/nvme1n1p2 /mnt/boot --mkdir

安装

在安装各个包之前, 需要先换源.

这里我本来想使用 reflector 来换源:

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

参数解释 (可使用 reflector --help 查看):

参数作用
--country China指定国家和区域
--age 24指定最后更新/同步时间, 过滤掉某些已经停止维护的镜像地址 (单位: 小时)
--sort rate指定排序方式, 可选 {age,rate,score,delay}
--protocol https指定协议, 可选 {http,https}
--latest 10指定要使用的镜像数量
--save /etc/pacman.d/mirrorlist覆盖默认源

但是, 执行的时候报错了: error: failed to retrieve mirrorstatus data: TimeoutError: The read operation timed out

那就手搓 mirrorlist.

编辑 /etc/pacman.d/mirrorlist, 在最顶部添加:

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

然后, 输入以下命令更新软件源.

pacman -Syy

然后添加 archlinuxcn 源, 具体操作参考这里.

换源之后, 就可以开始安装系统了.

pacstrap -K /mnt base base-devel linux linux-firmware btrfs-progs nano sudo intel-ucode

然后生成 fstab:

genfstab -U /mnt >> /mnt/etc/fstab

配置系统 (1)

设置基本系统信息

arch-chroot /mnt  # 进入本地系统环境

# 时间
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 设置时区
hwclock --systohc # 将硬件时间同步为系统时间

# 语言
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf

# 主机名
echo "archlinux" > /etc/hostname

# 设置 root 的密码
passwd

必备应用

pacman -S networkmanager dhcpcd neovim git
# neovim 似乎不算必备应用...

网络

systemctl enable dhcpcd
systemctl enable NetworkManager

Pacman

启用颜色和多进程下载.

编辑 /etc/pacman.conf, 取消 ColorParallelDownloads 的注释.

...
#UseSyslog
Color
#NoProgressBar
CheckSpace
#VerbosePkgLists
ParallelDownloads = 5
...

Initramfs

编辑 /etc/mkinitcpio.conf, 在 HOOKS 中加入 btrfs.

保存后, 输入:

mkinitcpio -P

添加用户

# 添加用户
useradd -m -G wheel <用户名>
passwd <用户名>

# 为 wheel 组的用户设置 sudo 权限
nano /etc/sudoers # 找到 `# %wheel ALL=(ALL) ALL` 这一行, 去掉注释

# 设置默认终端
su <用户名> # 切换用户

安装并配置引导加载器 (systemd-boot)

我没有使用 grub, 而是用 systemd-boot, 因为觉得它更简单稳定.

使用 bootctl 安装 systemd-boot:

bootctl install

然后, 创建 /boot/loader/loader.conf:

default arch
timeout 5
editor no

Arch Linux 引导

获取 root 分区的 UUID:

blkid /dev/nvme1n1p3  # 改成你的 root 分区

创建 /boot/loader/entries/arch.conf:

title   Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=PARTUUID=<你的root分区PARTUUID> rw rootflags=subvol=@,compress=zstd,nvidia_drm.modeset=1

注意, 上面的 PARTUUID 一定要抄对, 不然无法进入系统.

Windows 引导

arch-chroot /mnt    # 进入安装的系统环境

通过 lsblk -f 确定 Windows 系统的 EFI 分区, 我这里是 nvme0n1p1.

mkdir -p /mnt/win-efi
mount /dev/nvme0n1p1 /mnt/win-efi
ls /mnt/win-efi/EFI/Microsoft/Boot # 如果输出一堆东西, 说明 EFI 分区挂载成功

mkdir -p /boot/EFI/Microsoft/Boot
cp -r /mnt/win-efi/EFI/Microsoft/Boot/* /boot/EFI/Microsoft/Boot/
umount /mnt/win-efi

然后, create /boot/loader/entries/windows.conf:

title   Windows 11
efi /EFI/Microsoft/Boot/bootmgfw.efi

我执行到这里, 发现了 bug, UEFI 菜单有两个 Windows 11 选项… 暂未解决.

配置系统 (2)

重启, 进入安装的 Arch Linux 系统 (把装有 Arch Linux 的硬盘设为第一启动项), 继续配置.

如果前面一切顺利, 这里应该会进入 tty 终端.

通过以下命令连接 WiFi:

nmcli device wifi list
nmcli device wifi connect <SSID> password <密码>

显卡

参考自 wiki.

lspci -k | grep -A 2 -E "(VGA|3D)"                  # 查看显卡
sudo pacman -S nvidia nvidia-utils nvidia-settings # 安装显卡驱动

sudo nano /etc/mkinitcpio.conf
# 在 MODULES 中加入 nvidia nvidia_modeset nvidia_uvm nvidia_drm
# 将 kms 从 HOOKS 中去掉
sudo mkinitcpio -P
reboot # 重启
nvidia-smi # 验证是否安装成功

为了避免在 NVIDIA 驱动程序升级后忘记更新 initramfs 的可能性, 可能需要使用 pacman HOOK.

编辑 /etc/pacman.d/hooks/nvidia.hook, 写入如下内容:

[Trigger]
Operation=Install
Operation=Upgrade
Operation=Remove
Type=Package
Target=nvidia
Target=linux
# Change the linux part above and in the Exec line if a different kernel is used
# 如果使用不同的内核,请更改上面的 linux 部分和 Exec 行中的内容,例如更改为Target=nvidia-open

[Action]
Description=Updating Nvidia module in initcpio
Depends=mkinitcpio
When=PostTransaction
NeedsTargets
Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -P'

hyprland

本部分参考了官方wiki以及这篇文章.

sudo pacman -S hyprland

(注: 我原来安装了 sddm, 但后面发现这玩意又丑又难用, 遂放弃, 选择在 tty 上启动 hypa land)

创建 ~/.config/hypr 文件夹, 然后把 /usr/share/hypr 复制到 ~/.config/hypr 下.

编辑 ~/.config/hypr/hyprland.conf, 添加如下变量:

env = LIBVA_DRIVER_NAME,nvidia
env = XDG_SESSION_TYPE,wayland
env = GBM_BACKEND,nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
env = WLR_NO_HARDWARE_CURSORS,1

然后 reboot 重启.

重启后, 在 tty 中输入 hyprland 即可进入桌面. 不过先别急, 等安装 kitty 后再进入 hyprland. 在 hyprland 中, 打开终端的默认快捷键是 [Super] + Q (SuperWin 键).

kitty

sudo pacman -S kitty

编辑 ~/.config/kitty/kitty.conf (如果路径不存在, 就创建):

font_family      CaskaydiaMono Nerd Font Mono
font_size 15
bold_font auto
italic_font auto

zsh

我不喜欢 oh-my-zsh, zsh 加几个插件就能满足我的需求.

sudo pacman -S zsh zsh-autosuggestions zsh-completions zsh-history-substring-search zsh-syntax-highlighting

下载 powerlevel10k 主题:

mkdir -p /usr/share/zsh/themes/powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git /usr/share/zsh/themes/powerlevel10k/

编辑 ~/.zshrc, 添加以下内容:

source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh
source /usr/share/zsh/themes/powerlevel10k/powerlevel10k.zsh-theme

然后输入:

chsh -s /usr/bin/zsh

重启或重新登录, 然后配置 zshpowerlevel10k 即可.

rofi

我使用 rofi 作为我的应用启动器.

安装配置过程参考了这篇文章.

安装:

sudo pacman -S rofi-wayland

配置主题:

# 创建配置目录
mkdir -p ~/.local/share/rofi/themes/

# 下载主题
git clone https://github.com/lr-tech/rofi-themes-collection.git
cp rofi-themes-collection/themes /usr/share/rofi/themes/

# 选择主题
rofi-theme-selector # 我选择的是 rounded-nord-dark

启用应用图标, 在 ~/.config/rofi/config.rasi 中添加:

configuration {
show-icons: true;
}

~/.config/hypr/hyprland.conf 中添加:

$menu = rofi --show drun

就可以通过 [Super] + R 打开 rofi 了.

字体

sudo pacman -S ttf-cascadia-mono-nerd       
sudo pacman -S adobe-source-han-sans-cn-fonts adobe-source-code-pro-fonts

中文输入法

我使用 fcitx5, 使用最广泛的中文输入法.

本部分参考了这篇文章.

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

/etc/environment 中添加:

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

然后在 ~/.config/hypr/hyprland.conf 中设置自启动:

exec-once = fcitx5 --replace -d

这个时候还用不了, 需要进一步配置.

rofi 启动 或 在终端输入 fcitx5-configtool, 进入配置界面.

右半部分窗口, 取消 Only Show Current Language, 然后搜索 pin, 启用这个 Pinyin 选项.

2.png

之后, 就可以按 [Ctrl] + [Space] 切换中文输入法了.

不过, 默认的 UI 实在太丑了, 我另外安装了 fcitx5-material-color 主题.

sudo pacman -S fcitx5-material-color

然后, 在 fcitx5-configtool 的界面中, AddonsClassic User Interface (Configure) -> Theme 中选择主题, 我选择的是 Material-Color-Blue.

waybar

sudo pacman -S waybar

在 Hyprland 的配置文件 ~/.config/hypr/hyprland.conf 中添加:

exec-once = waybar

美化等以后再说.

mako

通知守护程序.

sudo pacman -S mako

然后在 hyprland 配置文件中添加 exec-once = mako.

截图与录屏

截图使用 grim + slurp, 录屏直接用 obs-studio.

sudo pacman -S grim slurp obs-studio

然后配置一下截图快捷键 ([Super] + [PrtSc]).

~/.config/hypr/hyprland.conf 中添加:

$screenshot = grim -g "$(slurp)"
bind = $mainMod , Print, exec, $screenshot

Chrome

浏览器.

sudo pacman -S google-chrome-stable

分辨率设置

本部分参考了这篇文章

缩放比例不为 1 时, 如 ChromeVSCodexwayland 上的软件会出现模糊的情况, 解决方法如下.

需要先安装 xorg-xrdb.

sudo pacman -S xorg-xrdb

编辑 ~/.config/hypr/hyprland.conf 文件, 添加:

xwayland {
force_zero_scaling = true
}

上述配置用于禁止 xwayland 缩放.

添加:

exec-once = echo 'Xft.dpi:144' | xrdb -merge

dpi96, 1441.5 倍缩放, 具体 dpi 请根据实际情况调整.

启用 swap

本部分参考了这篇文章.

cd /swap
sudo truncate -s 0 swapfile
sudo chattr +C swapfile
sudo chmod 600 swapfile
sudo dd if=/dev/zero of=/swap/swapfile bs=1M count=20480 # 20G
sudo mkswap swapfile
sudo swapon swapfile
sudo echo "/swap/swapfile none swap defaults,nofail,x-systemd.device-timeout=10s 0 0" | sudo tee -a /etc/fstab

暂时先写这么多吧.

  • 标题: 安装 Arch + Win11 双系统过程记录
  • 作者: Coast23
  • 创建于 : 2025-04-29 21:52:26
  • 更新于 : 2025-05-03 01:49:23
  • 链接: https://coast23.github.io/2025/04/29/安装-Arch-Win11-双系统过程记录/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论