Arch Linux

安装双系统

准备一个u盘,用于装载arch安装程序

下载一个arch的镜像(最新版即可,滚动更新)

烧录进u盘中

安装arch

修改bios进入u盘搭载的安装辅助镜像

联网

使用iwctl进行连接WiFi, 或者直接连接有线网(推荐)

 station <name> scan
 station <name> get-networks
 station <name> connect <essid>

修改时区

timedatectl set-utp true
timedatectl status

分盘

使用fdisk -l查看分区,找到想要挂在的盘,记录分区编号(一般都是/dev/nvme0n1px,其中x表示数字)

使用cfdisk /dev/nvme0n1进入tui界面, 进行分盘.

一般分盘swap需要16G, 主目录自由分盘. 不需要手动创建/home的分盘(后续可以使用Btrfs的subvolume进行区分)

找到对应的free space, 然后new(按下Enter键选择下方的菜单, 左右键切换下方的菜单, 上下键切换上方的partition)

然后对于new的partition可以选择type, swap分区需要选择Linux swap类型, 普通的目录保持Linux filesystem即可

格式化

对于swap分区(以上图为例, 注意硬盘和partition的序号):

# create swap partition
mkswap /dev/nvme0n1p<*>
# mount swap
swapon /dev/nvme0n1p<*>

对于Linux filesystem分区, 这里使用Btrfs作为文件系统:

mkfs.btrfs -f /dev/nvme0n1p<*>

Warning

这个操作会强制抹掉所有内容, 谨慎操作

挂载

使用Mount指令

# mount main filesystem
mount /dev/nvme0n1p<*> /mnt
# mount efi partition
mount /dev/nvme0n1p1 /mnt/efi --mkdir

注意efi分区的挂载路径/mnt/efi是可以改的, 只要在/mnt里即可, 但是后面需要注意路径

安装基础软件

arch linux的安装是基于Pacman的, 包括pacstrap也是使用pacman进行安装. 因此所有对pacman的配置都会起作用.

换源(加速):

使用nano(因为启动盘中没有自带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.conf配置:

编辑/etc/pacman.conf文件:

  1. 解除Color一行的注释: 允许pacman安装指示界面有颜色
  2. 解除ParallelDownloads = 5一行的注释: 允许并行下载. 在下载小文件的时候能够利用大宽带
  3. Optional: 添加一行ILoveCandy: 变成进度条吃豆人的样式
  4. 取消掉[multilib]和下一行Include = /etc/pacman.d/mirrorlost的注释: 允许multilib这个库的软件安装
# Misc options
#UseSyslog
Color
#NoProgressBar
CheckSpace
#VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
ILoveCandy
...
[multilib]
Include = /etc/pacman.d/mirrorlist

开始安装对应软件:

pacstrap -K /mnt base base-devel linux linux-headers linux-firmware nano vim sudo intel-ucode bluez bluez-utils grub efibootmgr os-prober networkmanager resolvconf iwd dhcpcd ntfs-3g btrfs-progs
  • base, base-devel: 基础安装包, 包含一些编译命令, 如makepkg, make
  • linux, linux-headers, linux-firmware: System本体和硬件管理. 还有别的版本如linux-zen+linux-zen-headers性能优化内核 / linux-lts+linux-lts-headers 长期支持的内核 等等
  • nano, vim: editor
  • sudo: permission control
  • intel-ucode/amd-ucode: 对于不同CPU的架构, 安装对应的ucode. microcode为CPU提供安全性和bug的补丁
  • bluez, bluez-utils: 蓝牙
  • grub, efibootmgr, os-prober: grub相关, 配置开机BIOS相关内容
  • networkmanager, resolvconf, iwd, dhcpcd: 网络配置
  • ntfs-3g, btrfs-progs: 文件系统驱动

配置自动挂载

在启动的时候, 所有linux的文件(以及内核等)都存在与/dev/nvme0n1p<*>中. 想要运行linux, 需要进入这个盘, 所以在启动的时候需要挂载这个盘才能正常进入linux. 包括一些swap分区和efi分区, 都需要在启动的时候自动挂载. 因此使用genfstab命令配置自动挂载:

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

注意此时还是在U盘的启动配置中, 没有进入Arch Linux本体

配置Arch Linux

安装完基础软件之后, 需要配置linux系统, 使其能够正常运行.

使用arch-chroot以root身份进入linux系统(/mnt是之前挂载系统的位置):

arch-chroot /mnt

时区

由于是双系统, 因此windows和linux的时区设置可能有所不同, 详细问题解决方案参考时区问题

设置对应地区的时间(中国时区设置为Shanghai):

# setup time zone
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localetime
# sync hardware clock
hwclock --systohc

上述命令需要root权限, 但是由于是arch-chroot进入的系统, 本是是root身份, 因此无需sudo

更改语言

编辑/etc/locale.gen文件, 取消需要生成文字的类型前的注释:

...
#zh_CN.GBK GBK
zh_CN.UTF-8 UTF-8
#zh_CN GB2312
...

(推荐使用en_US.UTF-8 UTF-8zh_CN.UTF-8 UTF-8)

然后生成对应的locale信息:

locale-gen

然后编辑/etc/locale.conf, 写入需要的语言, 如:

LANG=en_US.UTF-8

修改用户信息

首先修改hostname: 在文件/etc/hostname写入的内容就是hostname, 是这台计算机的名称

修改root用户的password:

# run this command with root user
passwd

创建新用户:

useradd -m -G wheel -s /bin/fish <username>

表示创建一个wheel group的用户<username>, 默认的shell是/bin/fish. 如果没有设个shell, 可能会报一个警告, 但是无需理会

修改新用户的密码(这个新用户是日常使用的用户):

passwd <username>

修改用户权限: 使用visudo, 是使用vim对/etc/sudoers文件的编辑, 但是配备了语法检查:

visudo
# or
vim /etc/sudoers

%wheel ALL=(ALL:ALL) ALL这一行的注释删除:

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL:ALL) ALL

配置内核initramfs

initramfs: initial RAM filesystem

在启动过程中, 会将内核和initramfs的内容加载. 使用initramfs的原因是: 对于不同的文件系统和磁盘布局, 需要不同的内核模块, 因此使用initramfs进行内核模块的加载

编辑/etc/mkinitcpio.conf, 找到HOOKS部分, 添加brtfs:

后期配置nvidia的时候会再次修改这个文件

在每次修改配置之后, 需要手动生成一边initramfs:

mkinitcpio -P

配置grub启动项

在启动的时候, 需要给内核传递参数. 比如说, nvidia显卡的modeset, 等等.

包括启动grub界面的美化, 也需要配置.

配置启动项:

编辑/etc/default/grub文件, 然后去掉最后一行的GRUB_DISABLE_OS_PROBER=false的注释(让disable os-prober=false, 即允许os-prober):

安装grub:

grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=grub

Tip

  1. target对应的是电脑型号, 如果是32bit的电脑, 使用x86-efi
  2. efi-directory对应的是之前/dev/nvme0n1p1 mount的位置, 即windows system盘挂载的位置.
  3. bootloader-id可以任意取, 但是不能是EFI等, 推荐使用grub, GRUB, Grub等等

应用grub配置:

在修改/etc/default/grub文件之后, 必须应用这个配置, 写入到bios中, 才能真正使用这个配置:

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

Tip

  1. 如果你是第一次运行这个命令, 那么grub.cfg文件是不存在的, 但是/boot/grub文件夹一定存在, 可能和bootloader-id有关
  2. 第一次可能找不到windows的boot manager, reboot之后重新运行上述命令即可找到(可能需要sudo权限)

现在可以重新启动, 即可进入user用户使用linux

添加桌面环境

部分必要软件:

# update index database and upgrade softwares
sudo pacman -Syyu
# install softwares
sudo pacman -S git zsh fish openssh
# chinese font
sudo pacman -S adobe-source-han-sans-cn-fonts

Nvidia

“F**k you, Nvidia!”

对于N卡用户, linux的支持非常不友好, 需要巨多配置:

检查显卡

lspci -k | grep -A 2 -E "(VGA|3D)"

如果这里出现了问题(点名amd显卡), 那么可能是没有安装对应驱动

安装nvidia驱动

sudo pacman -S nvidia-dkms nvidia-utils nvidia-settings

配置nvidia驱动

修改/etc/default/grub: 在GRUB_CMDLINE_LINUX中写入nvidia_drm.modeset=1, 然后运行sudo grub-mkconfig -o /boot/grub/grub.cfg:

GRUB_CMDLINE_LINUX="nvidia_drm.modeset=1"

修改/etc/mkinitcpio.conf, 在MODULES中写入nvidia nvidia_modeset nvidia_uvm nvidia_drm, 然后在HOOKS中删除kms:

MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
...
HOOKS=(base udev autodetect microcode modconf keyboard keymap consolefont block filesystem btrfs fsck)

然后重新生成initramfs:

sudo mkinitcpio -P

现在linux的配置基本完成, 可以在tty中使用. 但是没有gui桌面环境. 下面开始配置window manager:

Hyprland

sudo pacman -S hyprland kitty sddm

然后开启sddm:

sudo systemctl enable sddm

Tip

注意这里sddm默认WM(左上角)的是Hyprland(...), 需要点击下拉框换成Hyprland才能正常进入

I3wm

使用lightdm作为启动界面:

# xorg server, using x11 environment
sudo pacman -S xorg xorg-server
# install startup page and i3
sudo pacman -S lightdm i3status i3
# install necessary softwares
sudo pacman -S alacritty rofi feh picom polybar

然后开启lightdm:

sudo systemctl enable lightdm

Swaywm

Warning

未经验证

使用sddm:

# using wayland, auto install dependencies
sudo pacman -S sway sddm

Bug

这里使用sddm会有问题(似乎是对于nvidia显卡), 需要使用—unsupported-gpu才能进入