Arch Linux 安装配置

此记录是完全个人化的配置记录。

1. 预安装

1.1 获取安装镜像

archlinux-iso 开源镜像站-阿里云

1
2
3
4
5
6
7
Index of /archlinux/iso/
File Name File Size Date
Parent directory/ -
2025.01.01/ - 2025-01-01 17:01
2025.02.01/ - 2025-02-01 16:44
2025.03.01/ - 2025-03-02 01:57
latest/ - 2025-03-02 01:57

1.2 准备安装U盘

下载U盘写入工具: balenaEtcher 并且制作好。

1.3 启动live环境

**注意:**Arch Linux 安装镜像不支持安全启动。您需要禁用安全引导才能引导安装媒体。如果需要,可以在完成安装后设置安全启动

**默认:**键盘布局为US,引导模式为UEFI,网线连接的网络。

  1. 将制作好的启动盘插入Thinkpad电脑,开机按回车键,按F12,上下箭头找到U盘,回车等待系统重启引导。
  2. 选择UEFI引导,并且进入Arch iso实时环境中
  3. 设置控制台字体
1
setfont ter-132b
  1. 检查网络
1
ping archlinux.org

1.4 对磁盘进行分区

当Live系统识别到磁盘时,磁盘将分配给块设备,M.2 PCIE设备默认为/dev/nvme0n1

以下是使用 fdisk 对磁盘进行分区的纯文本记录,我的需求是创建 EFI 分区(512M)根分区(459G) 和 swap 分区(16G)

使用 fdisk 对磁盘分区的教程

1. 启动 fdisk

打开终端,运行以下命令启动 fdisk(假设磁盘为 /dev/nvme0n1):

1
fdisk /dev/nvme0n1

2. 创建新的分区表

在 fdisk 中,输入 g 创建一个新的 GPT 分区表

1
2
Command (m for help): g
Created a new GPT disklabel (GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

3. 创建 EFI 分区(512M)

  1. 输入 n 创建一个新分区:
1
Command (m for help): n
  1. 分区号保持默认(按回车):
1
Partition number (1-128, default 1): [回车]
  1. 起始扇区保持默认(按回车):
1
First sector (2048-1000215215, default 2048): [回车]
  1. 设置分区大小为 512M
1
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1000215215, default 1000215215): +512M
  1. 设置分区类型为 EFI System
1
2
3
4
Command (m for help): t
Selected partition 1
Partition type (type L to list all types): 1
Changed type of partition 'Linux filesystem' to 'EFI System'.

4. 创建根分区(459G)

  1. 输入 n 创建第二个分区:
1
Command (m for help): n
  1. 分区号保持默认(按回车):
1
Partition number (2-128, default 2): [回车]
  1. 起始扇区保持默认(按回车):
1
First sector (1050624-1000215215, default 1050624): [回车]
  1. 设置分区大小为 459G
1
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1050624-1000215215, default 1000215215): +459G

5. 创建 swap 分区(16G)

  1. 输入 n 创建第三个分区:
1
Command (m for help): n
  1. 分区号保持默认(按回车):
1
Partition number (3-128, default 3): [回车]
  1. 起始扇区保持默认(按回车):
1
First sector (963379200-1000215215, default 963379200): [回车]
  1. 设置分区大小为 16G
1
Last sector, +/-sectors or +/-size{K,M,G,T,P} (963379200-1000215215, default 1000215215): +16G
  1. 设置分区类型为 Linux swap
1
2
3
4
Command (m for help): t
Partition number (1-3, default 3): 3
Partition type (type L to list all types): 19
Changed type of partition 'Linux filesystem' to 'Linux swap'.

6.保存分区表

  1. 输入 p 查看分区表,确认分区设置正确:

输出示例:

1
2
3
4
Device           Start        End    Sectors   Size Type
/dev/nvme0n1p1 2048 1050623 1048576 512M EFI System
/dev/nvme0n1p2 1050624 963379199 962328576 459G Linux filesystem
/dev/nvme0n1p3 963379200 1000215215 36836016 16G Linux swap
  1. 输入 w 保存分区表并退出:
1
2
Command (m for help): w
The partition table has been altered.

7. 格式化分区

  1. 格式化 EFI 分区为 FAT32:
1
mkfs.fat -F32 /dev/nvme0n1p1
  1. 格式化根分区为 ext4:
1
mkfs.ext4 /dev/nvme0n1p2
  1. 格式化 swap 分区并启用:
1
2
mkswap /dev/nvme0n1p3
swapon /dev/nvme0n1p3

8. 挂载分区

  1. 挂载根分区:
1
mount /dev/nvme0n1p2 /mnt
  1. 创建 EFI 分区挂载点并挂载:
1
2
mkdir /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot

通过以上步骤,你已经成功使用 fdisk 对磁盘进行了分区,并创建了:

  • EFI 分区(512M)
  • 根分区(459G)
  • swap 分区(16G)

2. 安装

2.1 设置镜像源

这里选择阿里云的镜像地址:

1
echo "https://mirrors.aliyun.com/archlinux/\$repo/os/\$arch" > /etc/pacman.d/mirrorlist

2.2 安装基本软件包

使用pacstrap脚本来安装基本软件包、Linux内核和常见固件:

1
pacstrap -K /mnt base linux linux-firmware sof-firmware

3. 配置系统

3.1 配置基本系统设置

生成fstab文件:

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

3.2 Chroot

将root切换到新系统:/mnt

1
arch-chroot /mnt

4. 安装必要软件包,开始配置

1
pacman -S --noconfirm vim tmux dnust libnotify tar unzip  dhcpcd iproute2 git base-devel fd bat htop wget aria2 elinks xorg-server pulseaudio alsa-utils fcitx5-im fcitx5-chnese-addons terminus-font i3-wm usbutils android-tools bluez bluez-utils openssl openssh intel-ucode xorg-xinit aha sudo network-manager-applet

4.1 配置系统引导

  1. 安装systemd-boot引导
1
bootctl install
  1. 编辑系统引导配置条目:/boot/loader/loader.conf
1
2
3
4
default arch.conf
timeout 0
console-mode max
editor no
  1. 编辑系统引导条目:/boot/loader/entries/arch.conf

提取/dev/nvme0n1p2的UUID:

1
blkid -o value -s UUID /dev/nvme0n1p2

提取swap交换分区的UUID

1
blkid -o value -s UUID /dev/nvme0n1p3

arch.conf:

1
2
3
4
5
6
title   Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw

休眠支持说明:

休眠(Hibernate)是一种电源管理功能,允许你将系统的当前状态保存到磁盘(通常是交换分区或交换文件),然后完全关闭计算机。当你重新启动系统时,系统会从磁盘恢复之前的状态,恢复到休眠前的桌面、应用程序和文件。以下是休眠支持的主要好处


1. 节省电力

  • 休眠会将系统的状态保存到磁盘并完全关闭电源,因此不需要消耗任何电力。与挂起(Suspend)相比,休眠更适合长时间不使用电脑的情况。

2. 恢复工作状态

  • 休眠后,系统会完全恢复到休眠前的状态,包括所有打开的应用程序、文件和未保存的工作。这对于需要长时间中断工作但又不想丢失进度的用户非常有用。

3. 避免数据丢失

  • 如果电脑在挂起状态下电量耗尽(例如笔记本电脑电池没电),可能会导致数据丢失。而休眠将状态保存到磁盘,即使断电也不会丢失数据。

4. 适合多系统用户

  • 如果你在同一台电脑上安装了多个操作系统,休眠可以避免系统状态冲突。因为休眠会将当前系统的状态完全保存到磁盘,切换系统时不会受到影响。

5. 延长硬件寿命

  • 完全关闭电脑可以减少硬件的运行时间,从而延长硬件的使用寿命。

休眠的缺点
尽管休眠有很多优点,但也有一些潜在的缺点:

恢复时间较长

与挂起相比,休眠的恢复时间较长,因为需要从磁盘读取保存的状态。

需要足够的磁盘空间

休眠需要将内存中的数据保存到磁盘,因此需要足够的交换分区或交换文件空间(通常至少等于内存大小)。

可能遇到兼容性问题

某些硬件或驱动程序可能不完全支持休眠功能,导致休眠或恢复失败。

如何在 Arch Linux 中启用休眠

要在 Arch Linux 中启用休眠,通常需要以下步骤:

  1. 确保有足够的交换空间

    • 交换分区或交换文件的大小至少等于系统内存大小。
  2. 配置内核参数

    • 在引导加载程序(如 systemd-boot 或 GRUB)的配置文件中添加 resume=UUID=... 参数,指向你的交换分区或交换文件。例如:
    1
    options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw resume=UUID=your-swap-partition-uuid

配置 initramfs

确保 initramfs 包含 resume 钩子。可以通过编辑 /etc/mkinitcpio.conf 并添加 resume 到 HOOKS 数组:

1
2

HOOKS=(base udev autodetect modconf block filesystems keyboard fsck resume)

然后重新生成 initramfs

1
mkinitcpio -P

测试休眠

使用以下命令测试休眠功能:

1
systemctl hibernate

4.2 用户配置

  1. 修改root密码:
1
passwd root

输入密码,回车确定,再一次输入密码,回车确定。

  1. 创建管理员用户:这里是liang(当然可以任意ID)
1
useradd -m -g wheel t14
  1. 设置用户密码:
1
passwd t14

输入密码,回车确定,再一次输入密码,回车确定。

  1. 编辑 /etc/sudoers文件,使用直接输入斜杠搜索 /wheel 关键词注释wheel前面的#,以使配置生效。
1
# %wheel ALL=(ALL:ALL) ALL

4.3 主机名配置

1
vim /etc/hostname
1
thinkpad

4.4 hosts配置

1
vim /etc/hosts
1
2
127.0.0.1       localhost
::1 localhost

如果您的系统有主机名(例如 archlinux),可以添加一行:

1
127.0.1.1       thinkpad.localdomain    thinkpad

4.5 时区配置

  1. 查看当前时区:
1
timedatectl
1
2
3
4
5
6
7
Local time: Wed 2023-10-25 12:34:56 UTC
Universal time: Wed 2023-10-25 12:34:56 UTC
RTC time: Wed 2023-10-25 12:34:56
Time zone: UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
  1. 列出可用时区:
1
timedatectl list-timezones

例如,查找亚洲时区:

1
timedatectl list-timezones | grep Asia
  1. 设置时区:
1
sudo timedatectl set-timezone Asia/Shanghai
  1. 验证时区:
1
timedatectl

输出示例:

1
2
3
4
5
6
7
Local time: Wed 2023-10-25 20:34:56 CST
Universal time: Wed 2023-10-25 12:34:56 UTC
RTC time: Wed 2023-10-25 12:34:56
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

手动创建时区链接(可选)

如果你更喜欢手动设置时区,可以通过创建符号链接来实现:

  1. 删除现有的时区链接:
1
rm /etc/localtime
  1. 创建新的时区链接。例如,设置为 Asia/Shanghai:
1
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

同步硬件时钟(可选)

如果你的硬件时钟(RTC)使用的是 UTC 时间,可以通过以下命令确保系统时间与硬件时钟同步:

1
sudo hwclock --systohc

如果你的硬件时钟使用的是本地时间,可以运行:

1
sudo timedatectl set-local-rtc 1

4.6 fcitx5配置

1
vim /etc/environment
1
2
3
4
5
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus
XMODIFIERS=@im=fcitx

4.7 terminus-font配置

编辑 /etc/vconsole.conf

1
FONT=ter-g32n

重新生成initramfs:

1
mkinitcpio -P

主要作用是系统启动时,字体输出优雅一点点。

4.8 locale.gen配置

编辑locale.gen(将#号删掉启用)

1
en_US.UTF-8 UTF-8 
1
zh_CN.UTF-8 UTF-8

重新

1
locale-gen

编辑/etc/locale.conf

1
LANG=en_US.UTF-8

重启前,创建3项系统服务:

sshd 服务

1
systemctl enable sshd

iwd 无线连接工具

1
systemctl enable iwd

dhcpcd 服务

1
systemctl enable dhcpcd

5. 用户桌面环境配置

5.1 i3窗口管理器配置

5.1.1 通过xinit启动i3

1
cp /etc/X11/xinit/xinitrc .xinitrc

编辑.xinitrc文件,在$twm &行后面新增一行添加 exec i3

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/sh

xrdb=xrdb
xinitdir=/etc/X11/xinit
xclock=xclock
xterm=xterm
twm=twm
xmodmap=xmodmap

userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=$xinitdir/.Xresources
sysmodmap=$xinitdir/.Xmodmap

# merge in defaults and keymaps

if [ -f $sysresources ]; then
if [ -x /usr/bin/cpp ] ; then
$xrdb -merge $sysresources
else
$xrdb -nocpp -merge $sysresources
fi
fi

if [ -f $sysmodmap ]; then
$xmodmap $sysmodmap
fi

if [ -f "$userresources" ]; then
if [ -x /usr/bin/cpp ] ; then
$xrdb -merge "$userresources"
else
$xrdb -nocpp -merge "$userresources"
fi
fi

if [ -f "$usermodmap" ]; then
$xmodmap "$usermodmap"
fi

# start some nice programs

if [ -d $xinitdir/xinitrc.d ] ; then
for f in "$xinitdir/xinitrc.d"/?*.sh ; do
[ -x "$f" ] && . "$f"
done
unset f
fi

$twm &
exec i3

5.1.2 i3开机自动启动

编辑.bash_profile文件

1
2
3
if [[ -z $DISPLAY ]] && [[ $(tty) == /dev/tty1 ]]; then
exec startx
fi

5.1.3 i3配置文件设置

编辑 ~/.config/i3/config文件

● fcitx5输入法自动启动

1
exec --no-startup-id fcitx5

● flameshot截图工具(使用PrtSc键绑定)

1
bindsym Print exec flameshot full

● 终端快捷键设置(使用kitty终端)

1
2
bindsym $mod+Return exec kitty

● 多显示器设置

1
2
3
exec --no-startup-id xrandr --output HDMI-1 --right-of eDP-1
exec --no-startup-id xrandr --output HDMI-1 --right-of DP-3
exec --no-startup-id xrandr --output HDMI-1 --right-of DP-4

查看当前连接的显示器

1
xrandr

这条命令会列出所有连接的显示器及其名称,例如 eDP-1(内置显示器)和 HDMI-1(外接显示器)。

还有一些例外情况,只有使用到输出接口才能清楚,比如type-c 到显示屏,这个没有测试,现使用的是type-c 转HDMI的HUB设备,xrandr显示的是DP外接屏幕。

配置外接屏幕

将外接屏幕设置在内置屏幕的右侧:

1
xrandr --output HDMI-1 --right-of eDP-1

将外接屏幕设置在内置屏幕的左侧:

1
xrandr --output HDMI-1 --left-of eDP-1

将外接屏幕设置为主屏幕:

● nm-applet 网络管理自启动

1
exec --no-startup-id nm-applet

● dunst自启动

1
exec --no-startup-id dunst

● i3status配置

在.config目录创建 i3status目录

编辑config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
general {
output_format = "i3bar"
colors = true
interval = 1
}

# 显示顺序
order += "tztime local"
order += "battery 0"

}

# 电池配置
battery 0 {
format = "%status %percentage %remaining"
format_down = "🔌 无电池"
status_bat = "🔋"
status_unk = "❓"
status_chr = "⚡"
status_full = "✅"
path = "/sys/class/power_supply/BAT%d/uevent"
low_threshold = 10
}

5.2 添加字体

  1. 添加MiSans
1
2
3
wget [https://hyperos.mi.com/font-download/MiSans.zip](https://hyperos.mi.com/font-download/MiSans.zip)
unzip MiSans.zip

  1. 将字体文件移动到/usr/share/fonts
1
sudo mv MiSans/ /usr/share/fonts/

5.3 fxitx5配置

注意:kwindowsystem 依赖项缺失!fcitx5-configtool启动失败!

1
sudo pacman -S kwindowsystem
1
fcitx5-config-qt: error while loading shared libraries: libKF6WindowSystem.so.6: cannot open shared object file: No such file or directory

要添加拼音输入法,请按照以下步骤操作:

  1. 在屏幕右下角找到fcitx5图标(通常在系统托盘区域)
  2. 右键点击fcitx5图标,在弹出菜单中选择”Configure”(配置)
  3. 在打开的配置工具中,点击左下角的”+”按钮
  4. 在搜索框中输入”pinyin”(拼音)
  5. 从右侧列表中找到”Pinyin”并选中它
  6. 点击”Add”(添加)按钮,将其移动到左侧已启用的输入法列表中
  7. 点击”Apply”(应用)或”OK”(确定)保存设置

完成后,你就可以使用Ctrl+Space或其他配置的快捷键切换到拼音输入法了。

5.4 kitty 背景设置

配置kitty白底黑字,编辑.confing/i3/kitty.conf

1
2
foreground #000000
background #ffffff

保存,然后按F5,就可以使更改生效。

5.5 virtualbox虚拟机配置

  1. 添加用户到 vboxusers 组
1
sudo usermod -aG vboxusers $USER
  • a:将用户追加到组,而不从其他组中移除。
  • G:指定组名(这里是 vboxusers)。
  • $USER:当前用户名。

1.

配置 USB 设备权限

为了让 vboxusers 组能够访问 USB 设备,需要调整 USB 设备的权限。

创建 udev 规则文件:

1
sudo vim /etc/udev/rules.d/99-vboxusb.rules

添加以下内容:

1
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="vboxusers", MODE="0664"
  1. virtualbox-ext-oracle 7.1.6-1扩展包安装
1
2
3
git clone https://aur.archlinux.org/virtualbox-ext-oracle.git
cd virtualbox-ext-oracle
makepkg -Si