# 首先 flex 一下成品图
_PS: 上面的成品图已经是远古时期的了,最新效果请看我的项目 [1llusion](https://git
hub.com/CuB3y0nd/1llusion)._
# 分区方案规划
首先确定你要给 `Arch Linux` 划分多少内存。因为我电脑里是一块 1TB 的硬盘,所以我
分了 512GB 给它,剩下的都留着给 Windows 用。
一个比较通用的方案是分以下三个区:
- EFI 分区:/efi 800MB
- 根分区:/ 100GB
- 用户主目录:/home 剩余全部
我设想的 Linux 分区方案如下:
- 4GB EFI
- 200GB root
- 300GB home
- 8GB swap
`swap` 分区虽然不一定用得上,但是个人建议分一下。一般设置为 `RAM` 的一半。不想给
那么多的也可以直接给 2GB。
因为某些原因,我给 `EFI 分区` 4GB,实际上这个分区使用 800MB 即可。
# 确认 EFI 分区 大小
首先要确认 Windows 的 `EFI 分区` 大小是多少。如果你是 Win 10/Win 11 用户,按 `Wi
n + X` 打开 **磁盘管理器**,在 **磁盘 0** 那块找到括号里写 **EFI 系统分区** 的那
部分分区大小,记录下来,后面要用到。我这里是 100MB。
# 确认分区表类型
本篇文章仅针对使用 **GPT 分区表** 的用户,如果你是 MBR 的话部分安装指令需要修改
,不能照抄。这里提供两种确认方式:
## 方法一
在 **磁盘管理器** 中,右键 **磁盘 0** 选择 **属性** 点击 **卷**,查看 **磁盘分区
形式** 是否为 `GPT 分区表`。
## 方法二
部分用户右键 **磁盘 0** 可能会发现属性按钮是灰色的,无法点击,这里提供一种命令行
的解决方案:「`Win + R` 输入 `diskpart` 回车,在打开的命令行窗口中输入 `list dis
k` 指令」,输出结果如下:
如果看到 **磁盘 0** 的 **GPT 列表** 标注了一个 *****,说明你符合我们的安装要求,
可以进行下一步操作了。
# 划分空间
打开 **磁盘管理器**,右键 `C盘` 的主空间选择 **压缩卷** 在 **输入压缩空间量** 中
输入你想给 Linux 划分的内存大小,单位 _MB(1GB = 1024MB)_ 比如我这里分出去 _512
GB_,也就是 _524,288 MB_ 压缩完会看到一个黑色的未分配空间,这时候我们进入下一步
操作,**不要右键新建简单卷!**
# 关闭快速启动并关闭休眠
为了双系统的安全性着想,需要关闭 Windows 的 `快速启动` 并关闭 `休眠` 选项至于为
什么要关闭这两个选项见 [Dual boot with Windows](https://wiki.archlinux.org/title
/Dual_boot_with_Windows)。
通过 [Dism++](https://dism.cf/) 软件可以轻易的关闭这两个选项:
在 `Dism++` -> `控制面板:系统优化` -> `其它` 即可找到这两个选项并关闭。
**Windows 更新可能会自动开启这两个选项,因此每次重大更新后都应该检查一下这两个选
项的状态。**
# 准备安装盘
准备一个至少 `8GB` 大小的 U 盘,里面重要数据可以先备份一下,后面要格式化。
首先下载 [Rufus 烧录工具](https://rufus.ie/) 和 [Arch Linux 镜像文件](https://ar
chlinux.org/download/),镜像下载完后可以使用以下指令验证文件的完整性:
```bash
certutil -hashfile <filename> SHA256
```
然后复制输出的哈希值,去 Arch Linux 官网给出的 `sha256sum` 中核对有没有问题。如
果匹配则说明文件没有问题。
打开下载好的 `Rufus` 工具,选择你的安装介质和刚才下载的镜像,其它参数默认,然后
烧录。
烧录完成后不用拔出安装介质,直接重启电脑,进入 `BIOS 模式`,选择从你的 U 盘 启动
,启动项一般包含 `UEFI` 字眼。
如果你不知道如何进入 `BIOS`,请自行百度。例:华硕进入 BIOS 按键。
如果发现无法从 U 盘 启动,提示需要关闭 `Secure Boot` 的,请参考下文的方式关闭它
。
# 关闭 Secure Boot
因为从外部介质启动系统会被 `Secure Boot` ban,所以这里需要先去 `BIOS` 中禁用 `Se
cure Boot` 选项。
这个选项一般在 `BIOS` 的 `Advanced Settings` 的 `Security Settings` 选项中。将 `
Enable` 改为 `Disable`。
关闭后请按照上面的说明再次进入 U 盘 启动,在打开的选择界面中选择第一项进行系统的
安装。
# Arch Linux 系统安装
## 调大显示字体
```bash
setfont ter-132b
```
## 确认是否为 UEFI
```bash
ls /sys/firmware/efi/efivars
```
如果用上面这条指令后输出了一堆东西则说明处于 `UEFI`,如果没有,那你可能只能用 `L
egacy` 启动了。
## 禁用并停止自动匹配最快源服务
`reflector` 会为你选择速度合适的镜像源,但其结果并不准确,同时会清空配置文件中的
内容,对于新人来讲并不适用,我们首先对其进行禁用。
```bash
systemctl disable reflector.service
systemctl stop reflector.service
```
## 设置时区
```bash
timedatectl set-timezone Asia/Shanghai
timedatectl status
```
## 分区
先用 `lsblk` 指令查看你的硬盘是哪块,然后通过 `cfdisk` 指令进行分区。
这是我的分区方案:
- 4G - EFI
- 200G - root
- 300G - home
- 8G - swap
`cfdisk` 分好区之后记得要 **设置类型**。
**`nvme0n1` 是我的硬盘 ID,记得替换为你自己的。**
```bash
lsblk
cfdisk /dev/nvme0n1
```
## 格式化分区
- EFI 分区 格式化为 fat
- root 分区 格式化为 ext4
- home 分区 格式化为 ext4
- 创建并启用 swap 分区
```bash
lsblk
mkfs.fat -F 32 /dev/nvme0n1p5
mkfs.ext4 /dev/nvme0n1p6
mkfs.ext4 /dev/nvme0n1p7
fallocate -l 8192M /mnt/swapfile
chmod 600 /mnt/swapfile
mkswap -L swap /mnt/swapfile
swapon /mnt/swapfile
lsblk
```
## 挂载分区
**挂载顺序:一定要先挂载 根分区,再挂载 EFI 分区,最后其它分区。**
```bash
mount /dev/nvme0n1p6 /mnt
mkdir /mnt/efi
mount /dev/nvme0n1p5 /mnt/efi
mkdir /mnt/home
mount /dev/nvme0n1p7 /mnt/home
lsblk
```
## 换源
```bash
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
cat /dev/null > /etc/pacman.d/mirrorlist
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
保存并退出
pacman -Sy
```
## 安装基础软件包
所有 Arch Linux 必装:
- `base`
- `base-devel`
- `linux-zen`
- `linux-zen-headers`
- `linux-firmware`
> [!TIP]
> 上面根据个人喜好选择内核,我使用了 `zen`。
根据自己的 CPU 决定用哪个微码:`amd-ucode` / `intel-ucode`
使用 X11 服务显示桌面:`xorg-xinit` `xorg-server`
fcitx5 输入法(不需要中文输入的可以不装):
- `fcitx5`
- `fcitx5-chinese-addons`
- `fcitx5-configtool`
- `fcitx5-gtk`
- `fcitx5-material-color`
- `fcitx5-pinyin-zhwiki`
这几个常用工具应该没人不需要吧:
- `sudo`
- `neofetch`
- `vim`
- `neovim`
- `git`
- `wget`
- `proxychains`
- `btop`
- `bash-completion`
网络方面(没这些就别想用 `wlan` 了):
- `iwd`
- `networkmanager`
音频输出:
- `pipewire`
- `pipewire-pulse`
- `pipewire-alsa`
- `pipewire-jack`
杂项(必装):`e2fsprogs` `ntfs-3g`
字体(不装的话所有中文都是乱码):
- `adobe-source-han-serif-cn-fonts`
- `wqy-zenhei`
- `noto-fonts-cjk`
- `noto-fonts-emoji`
- `noto-fonts-extra`
蓝牙(可选):`bluez`
下面是一些我个人常用的软件:
```
bat dust duf procs btop exa ripgrep fd fzf httpie hyperfine
bleachbit gimp gcolor3 simplescreenrecorder
thunar thunar-archive-plugin tumbler xarchiver
ueberzug viewnior zathura zathura-pdf-poppler
pacman-contrib copyq yt-dlp transmission-gtk
papirus-icon-theme ttf-joypixels terminus-font grsync
ffmpeg ffmpegthumbnailer aom libde265 x265 x264 libmpeg2 xvidcore libtheora libv
px sdl
jasper openjpeg2 libwebp webp-pixbuf-loader
unarchiver lha lrzip lzip p7zip lbzip2 arj lzop cpio unrar unzip zip unarj xdg-u
tils
xorg-server xorg-xinput xorg-xsetroot zramswap qogir-icon-theme
```
```bash
pacstrap -i /mnt base base-devel linux-zen linux-zen-headers linux-firmware amd-
ucode xorg-xinit xorg-server fcitx5 fcitx5-chinese-addons fcitx5-configtool fcit
x5-gtk fcitx5-material-color fcitx5-pinyin-zhwiki sudo neofetch neovim git wget
proxychains btop iwd networkmanager alsa-utils e2fsprogs ntfs-3g bash-completion
pipewire pipewire-pulse pipewire-alsa pipewire-jack adobe-source-han-serif-cn-f
onts wqy-zenhei noto-fonts-cjk noto-fonts-emoji noto-fonts-extra bluez
```
## 生成 fstab
```bash
genfstab -U /mnt >>/mnt/etc/fstab
cat /mnt/etc/fstab
```
## 挂载 /mnt 分区
```bash
arch-chroot /mnt
```
## 设置用户和密码
```bash
# 此处分别设置:root 用户密码、添加自己日常使用的用户、设置用户权限组(注意逗号
后面没空格)、为自己的账户设置密码、设置 wheel 组可以执行 sudo
passwd
useradd -m cub3y0nd
passwd cub3y0nd
usermod -aG wheel,storage,power -s /usr/bin/zsh cub3y0nd
sudo nvim /etc/sudoers
取消注释第 89 行:%wheel ALL=(ALL:ALL) ALL
```
_如果你不会使用 vim,最好自己查询一下基础操作。_
## 设置系统语言
```bash
nvim /etc/locale.gen
取消注释第 171 行:en_US.UTF-8 UTF-8
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
export LANG=en_US.UTF-8
```
## 设置主机名和 hosts(我的主机名是 ASHES)
```bash
echo ASHES > /etc/hostname
nvim /etc/hosts
添加以下内容:
127.0.0.1 localhost
::1 localhost
127.0.0.1 ASHES.localdomain localhost
```
## 设置时区并同步
```bash
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
```
## 双系统引导设置
```bash
pacman -S grub efibootmgr os-prober ntfs-3g dosfstools mtools
nvim /etc/default/grub
将 `GRUB_CMDLINE_LINUX_DEFAULT` 的所有内容改为 GRUB_CMDLINE_LINUX_DEFAULT="logle
vel=5 nowatchdog"
loglevel 改为 5 是为了后续如果出现系统错误,方便排错加入 nowatchdog 参数,可以显
著提高开关机速度
取消注释第 63 行:`GRUB_DISABLE_OS_PROBER=false`
```
## 安装 UEFI
**这一步使用 `MBR/Legacy Boot` 的同学需要修改该指令,具体怎么改可以自己上网查询
。**
```bash
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=Arch --rec
heck
```
## 生成 grub 配置
```bash
grub-mkconfig -o /boot/grub/grub.cfg
```
## 设置网络服务开机自启
```bash
systemctl enable NetworkManager.service
```
## 结束安装,取消所有挂载点并重启
```bash
exit
umount -lR /mnt
reboot
```
**重启指令执行后就可以拔掉安装介质了。其实在 `archiso` 启动完毕之后就可以拔掉安
装介质了(copy2ram)。**
重启后的选项卡列表里面可以看到有关 `Arch Linux` 的启动选项。确认一下是否存在 `Wi
ndows` 的启动选项,如果不存在的话,先进入 `Arch Linux`,然后使用以下命令添加 `Wi
ndows 启动项`。
**`mount` 中的 `/dev/nvme0n1p1` 是我的 `Windows EFI` 扇区名称,记得替换为你自己
的 `EFI 扇区`。**
使用 `MBR/Legacy Boot` 的同学,下面的 `mkdir` 指令也需要修改,不能照抄。
```bash
mkdir -p /boot/EFI/Windows
lsblk
mount /dev/nvme0n1p1 /boot/EFI/Windows
```
# Bspwm
接下来就可以使用我编写的自动化脚本配置一些常用环境了。
我的 `dotfiles` 仓库地址:[1llusion](https://github.com/CuB3y0nd/1llusion)
**确保 fcitx 在 wm(windows manager)环境中启动,并启动 bspwm。**
```bash
nvim /etc/environment
添加以下行:
export GTK_IM_MODULE=fcitx
export QI_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus
cp /etc/X11/xinit/xinitrc ~/.xinitrc
nvim ~/.xinitrc
注释以下行:
twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
exec xterm -geometry 80x66+8+0 -name login
添加以下行:
fcitx5 &
exec bspwm
```
## 下载脚本
```bash
cd
curl https://raw.githubusercontent.com/CuB3y0nd/1llusion/master/install -o $HOME
/install
```
## 授予执行权限
```bash
chmod +x install
```
## 运行脚本
```bash
./install
```
**_请不要使用 root 权限运行该脚本!_**
脚本执行结束后重启,使用 `startx` 指令即可进入 `bspwm`。
# AMD + NVIDIA 双显卡驱动安装
## 基础包安装
```bash
sudo pacman -S xf86-video-amdgpu
sudo pacman -S nvidia-dkms nvidia-settings nvidia-prime
# glmark2 是开源性能测试工具,可选
sudo pacman -S glmark2
yay -S optimus-manager optimus-manager-qt --noconfirm
```
## 配置 optimus-manager
```bash
cp /usr/share/optimus-manager.conf /etc/optimus-manager/optimus-manager.conf
sudo -E nvim /etc/optimus-manager/optimus-manager.conf
将 `pci_power_control` 改为 `yes`
在 `[amd]` 下,将 `driver` 改为 `amdgpu`
```
## 防止内核冲突
```bash
sudo -E nvim /etc/mkinitcpio.conf
把 `kms` 从 `HOOKS` 里面移除
sudo mkinitcpio -p linux-zen
```
## 切换教程
```bash
sudo -E nvim ~/.xinitrc
添加 `/usr/bin/prime-offload`
```
使用 `optimus-manager --print-mode` 可以查看当前使用的显卡。
使用 `optimus-manager --switch nvidia` 可以切换到 `nvidia` 显卡。
切换显卡前需要先执行 `prime-offload`,切换显卡重新登陆后需要执行 `sudo prime-swi
tch`。
可以允许 `wheel` 身份组以管理员权限执行 `prime-switch` 不用输入密码:
```bash
sudo -E nvim /etc/sudoers
%wheel ALL=(ALL:ALL) NOPASSWD:/usr/bin/prime-switch
```