Hello, Arch Linux
安装 Arch Linux
安装 Arch Linux 可以分为两个阶段:
- CLI:系统可以从 console 登录
- GUI:安装图形桌面环境,可以从 login greeter 登录
- 这里就体现出 Arch Linux 的特点,你可以自由安装喜欢的桌面环境: KDE Plasma, GNOME
- 桌面环境安装后,还有就是各种图形应用,包括 google-chrome, fcitx5-configtool, vscode 等等,有些没有在 pacman 的源里,需要使用 yay (Yet Another Yogurt, Yogurt 是早期的 AUR 助手) 安装
- pacman 的源可以自己配成国内源,但 yay 的好多下载地址都XX了,所以这个阶段可能需要梯子,否则很难进行下去
CLI boot
iwctl
pacman
arch-chroot
GUI boot
DE
1 | pacman -S gnome gnome-extra |
yay
1 | git clone https://aur.archlinux.org/yay-git.git |
中文字体
1 | pacman -S noto-fonts noto-fonts-cjk |
中文输入法
1 | pacman -S fcitx5 fcitx5-gtk fcitx5-chinese-addons fcitx5-configtool |
安装后启动 fcitx5-configtool,添加搜狗输入法即可
编译内核
要制作一个可启动的内核,涉及到 3 个步骤
- 编译内核,生成内核 ELF 可执行文件 vmlinuz (压缩格式),安装内核模块
- 生成初始内存文件系统 initramfs
- 更新引导加载程序 bootloader 的配置,即
/boot/grub/grub.cfg
总的来说,在 Arch Linux 上制作一个可启动的新内核,让系统能够用新内核正常工作,是相对比较简单的,这也是我放弃 openKylin,转向 Arch Linux 的主要原因,在 openKylin 上,光是找到目前正在运行的内核源码都费半天劲儿,包括内核源码库,整个发行版的软件包源码仓库,软件版本管理都有点混乱。
内核可执行文件
1 | make |
- 内核配置 .config 可以通过
zcat /proc/config.gz > .config
得到一个基础配置,然后make menuconfig
在此基础上修改保存。 - vmlinuz 的安装脚本有一个搜索顺序
scripts/install.sh -> (1) ~/bin/installkernel; (2) /sbin/installkernel; (3) arch/x86/boot/install.sh
, 而且默认的安装名总是vmlinuz
, 为了更好地区分多个vmlinuz
, 最好将kernel version
加到vmlinuz
后面。如果使用第一搜索顺序,在sudo make install
时,需要
1 | sudo --preserve-env=HOME make install |
制作初始内存文件系统
1 | sudo mkinitcpio --generate /boot/initramfs-6.16.1-arch1.img --kernel 6.16.1-arch1 |
更新 bootloader 配置
1 | sudo grub-mkconfig -o /boot/grub/grub.cfg |
这一步在两种情况下需要执行:
- 修改了 bootloader 程序的配置,如修改了
/etc/default/grub
- 当
/boot
目录新增了vmlinuz
和initramfs.img
, 如果只是重新编译了内核,而安装的 vmlinuz 和 initramfs.img 还是原来的名字, 就无需执行这一步
截屏 Greeter
截屏系统登录界面(Login Greeter) 并不那么容易,因为它和用户登录之后的 Display Manager 会话通常是两个独立的 Session, 它们各自由一个独立的 Xorg 进程渲染(如果当前会话类型 XDG_SESSION_TYPE
是 wayland, 这两个 X 服务则变成 Xwayland
), 而且通过在 GDM 环境下的观察,负责渲染 Greeter 的进程(Xorg 或 Xwayland)是反复创建和销毁的,当你切换到登录界面时,它们才被 gdm-x-session
(或 gdm-wayland-session
) 拉起(创建),一旦登录后进入桌面,这个进程又会被很快销毁。
如果不了解这一点,在你尝试截屏 GDM login screen 时,就会很不顺利。不过下面的截屏方法只在 x11 会话下有效
1 |
|
GNOME Display Manager
"阅后即焚"式生成 Greeter
选 GPU
当 Linux 系统中同时存在多个 GPU 时,有多种方法可以指定使用哪一个。
kernel boot parameter
通过内核启动参数,如 modprobe.blacklist=i915
,将相应 GPU 的内核驱动屏蔽,但有时可能有副作用,例如我的 Dell Vostro 5390,如果将 i915
驱动屏蔽掉,Audio Subsystem 会出问题
1 | 00:1c.0 PCI bridge [0604]: Intel Corporation Cannon Point-LP PCI Express Root Port #5 [8086:9dbc] (rev f0) |
由于Vostro 使用的 Audio interface 就是 Intel HDA, 所以当 i915
被屏蔽后,由于某种原因,Intel HDA 设备没有初始化成功,而它又没有连接其它独显的音频接口(如 Nvidia HDA),导致系统的声音不能正常工作
1 | pci 0000:00:1f.3: deferred probe pending: snd_hda_intel: couldn't bind with audio component |
基本上只有内核启动日志里有下面一行,intel audio 才能正常工作
1 | snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops intel_audio_component_bind_ops [i915]) |
更保险的启动参数是 i915.modeset=0
,即不禁用整个 i915 驱动,只禁用 graphics 功能。但 snd_hda_intel 和 i915 好像有些耦合问题,必须再使用 snd_hda_core.gpu_bind=0
才能只禁用 Intel graphics, 不影响 Intel audio