春天,又到了程序员和ArchLinux交尾的时间。

原因是这样的,因为傻逼Win11各种奇奇怪怪的Bug、卡顿并且在移动办公过程中耗电量惊人,所以不得不把原本装在移动硬盘里的学习版Arch给迁移到内置硬盘内。还有就是,一些开发程序在Linux下的兼容性要远好于Windows,所以干脆装双系统当生产力了,然后让Win11成为 “SteamOS”。

此文章主要面向Y9000X安装Archlinux, 涉及到Y9000X的一些特殊适配问题,但是基本上通用。
主要还是方便我下次炸了,重装系统,看看怎么适配的。

引导U盘用的是Ventory,不再赘述。

基本系统安装

首先,进入我们亲爱的archiso内,进行系统的初始化配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
步骤1 - 当我们启动电源时,BIOS(基本输入/输出系统)或UEFI(统一可扩展固件接口)固件从非易失性存储器加载,并执行POST(上电自检)。

步骤2 - BIOS/UEFI检测连接到系统的设备,包括CPU、RAM和存储。

步骤3 - 选择一个启动设备以从中引导操作系统。这可以是硬盘、网络服务器或光盘驱动器。

步骤4 - BIOS/UEFI运行引导加载程序(GRUB),该加载程序提供一个菜单,用于选择操作系统或内核功能。

步骤5 - 内核准备好后,我们现在切换到用户空间。内核启动systemd作为第一个用户空间进程,它管理进程和服务,探测所有剩余的硬件,挂载文件系统,并运行桌面环境。

步骤6 - systemd默认在系统引导时激活默认的.target单元。其他分析单元也会被执行。

步骤7 - 系统运行一系列启动脚本并配置环境。

步骤8 - 用户被呈现出登录窗口。系统现在已经准备就绪。

内容转自知乎,找不到原文链接了,十分抱歉。

Linux-boot-animation

从上述说明我们可以得出,由于BIOS/UEFI等是已经完备的,我们只需要提供bootloader、OS系统内核入口即可。

综上所述,我们安装系统所做的任务实际上只是制作一个bootloader及OS系统内核入口。

磁盘分区

一切的一切追究还是存储在磁盘上,我们需要先从磁盘的分区开始操作。没有磁盘操作,我们无法存储重要的bootloader和内核文件。

这里我比较喜欢的工具是 cfdisk。

  1. 通过 lsblk 查看磁盘情况
1
2
3
4
5
6
7
8
9
10
11
12
13
❯ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 476.9G 0 disk
├─nvme0n1p1 259:1 0 260M 0 part
├─nvme0n1p2 259:2 0 16M 0 part
├─nvme0n1p3 259:3 0 200G 0 part
├─nvme0n1p4 259:4 0 274.7G 0 part
└─nvme0n1p5 259:5 0 2G 0 part
nvme1n1 259:6 0 953.9G 0 disk
├─nvme1n1p1 259:7 0 16M 0 part
├─nvme1n1p2 259:8 0 390.7G 0 part
├─nvme1n1p3 259:9 0 4G 0 part
└─nvme1n1p4 259:10 0 559G 0 part
  1. 选择某一个待安装磁盘进行安装
1
cfdisk /dev/nvme1n1

分区不需要关注在哪个盘,只需要关注能够挂载哪些分区即可。

分区需求:

  • boot分区 (1-2GB,无特殊需求则留一些就行,type为UFEI System)
  • 其他分区(除了根目录其他都可选)
    • 根分区
    • swap

上述的boot分区即是bootloader的存放位置,且其中也会放入内核文件,作为os的内核加载入口;根分区则为你要存放系统文件还有用户文件的地方(可以再单独创建一个home分区)。具体不再赘述,每个人有自己的分配喜好。

  1. 分区格式化

boot分区需要格式化为 exFAT 格式,其他的可以自行选择,我选择的是Btrfs支持快照,性能强大。

分区挂载

想要持久性地存储肯定是需要储存在硬盘上的,我们需要挂载上我们刚刚分配的分区,并将系统写入硬盘内。

挂载不再赘述,需要注意分区的类型的影响,尤其是btrfs需要挂载子卷的情况。

根分区挂载在 /mnt,boot分区挂载在 /mnt/boot。

GRUB2的安装–安装bootloader

  1. 还是先 pacman -Syu 下(可以提前还源);
    可以选择先测速以下:
1
reflactor --sort rate -c China -l 200 --verbose --save /etc/pacman.d/mirrorlist
  1. 安装grub2到boot分区:
1
grub-install --efi-directory=/mnt/boot --target=x86_64-efi --bootloader-id=想叫啥叫啥

系统内核及相关配置

此时生成同等重要的操作系统核心文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 下次联网用
pacstrap /mnt networkmanager
# 系统重要库
pacstrap /mnt base linux linux-firmware base-devel grub
# intel微码(可选)
pacstrap /mnt intel-ucode

# 切换到 /mnt 下
arch-chroot /mnt
# 添加你的用户到sudo(wheel)组
useradd -m -G whell xxx
# 别忘了设置密码
passwd
# 本地化配置,这里我按照英文来,不然可能会出现中文路径等,我懒得管
vim /etc/locale.gen #取消en_US.UTF-8的注释
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
#修改主机名
nano /etc/hostname
#生成引导配置文件,让grub可以找到你的内核入口
grub-mkconfig -o /boot/grub/grub.cfg
exit

# 生成自动挂载文件
genfstab -U /mnt > /mnt/etc/fstab

桌面环境配置

操作完上述步骤后,就可以重启进入系统了。但是伟大的arch用户是需要自己安装桌面环境的。

此文章使用的是kde+wayland,环境为mux方案下的intel+nvidia混显笔记本。

首先,安装intel的核显驱动,我们暂且搁置傻逼nvidia驱动,把他放在兼容性问题部分介绍;

1
sudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel

然后,安装plasma环境;

1
2
3
4
5
6
7
pacman -Syu
pacman -S plasma-meta #安装完整的plasma
pacman -S plasma-workspace xdg-desktop-portal
# N卡用户需要额外安装egl-wayland,xdg-desktop-portal包是为了如obs此类工具录制屏幕使用
# xdg-desktop-portal包组提供了不同环境下使用的软件包
# 例如kde用户可选择xdg-desktop-portal-kde包
systemctl enable sddm

然后就可以进入桌面了,其他配置不再赘述。

需要注意的是fcitx5输入法安装后,可以从系统设置里添加激活,然后在特定文件内写入传统的输入法配置信息,这样子才能在控制台等地方调出输入法。

Y9000X兼容性问题

声音问题

先安装一些声音固件相关的模块。

1
sudo pacman -S sof-firmware alsa-firmware alsa-ucm-conf  

然后即使你通过alsa手动开启了扬声器,仍然会发现有声音输出但是扬声器没有声音。

去Arch Forum可以看到有人发表了相关的问题,是因为Y9000X在声音输出与扬声器间有一个功放模块,这个功放模块应该是与杜比音效相关的,如果没有相关的驱动,功放模块无法运作,导致没有实际的声音输出。

得益于有位老哥手动从这个功放模块的开源库做了一个dkms版的补丁,现在可以爽用了。

可以使用yay一键安装这个aur包,其他方式自行搜索这个包。

1
yay -S legion-y9000x-2022-iah7-sound-fix-dkms

MUX方案支持问题(混显/独显)

1
2
# 驱动不再赘述,自行选择开源还是闭源的,需要注意zen等自定内核,需要使用dkms版本(一定要安装对应的headers)
yay -S optimus-manager

具体的情况可以看我之前的Blog,目前的问题是独显模式下,无法进入桌面吗,但是仍然可以启动其他应用程序。主要还是Optimus-Manger识别不到核显,就直接崩了。

等完美解决了再续写。linux-wechat-qt

睡眠后,GPU进入深度睡眠状态无法唤醒

设置一定时间后进入睡眠状态,可能会导致NVIDIA GPU进入深度睡眠状态,从而无法唤醒,进入SDDM的登陆界面后,会直接卡住,也无法进入TTY,只能进行长按电源强制关机。

调出系统日志后,可以看到类似这种语句:

1
drm error failed to read dpcd register 0x60

这个问题在2022年已经有人讨论过了,他们给出的解决方案是去更新以下bios,最新的bios可能修复了这个问题,但是我的bios已经是最新的了。

我发现,我没有在内核参数中增加 ibt=off 可能是这个问题。

1
2
3
摘自Arch Wiki-Nvidia页

Note: 470xx and older drivers may not function correctly on Linux 5.18 (or later) on systems with Intel CPUs 11th Gen and newer[dead link 2024-07-30 ⓘ] due an incompatibility with Indirect Branch Tracking. You can disable it by setting the ibt=off kernel parameter from the boot loader. Be aware, this security feature is responsible for mitigating a class of exploit techniques.

工具配置

Office可以用LibreOffice或者去官网下载OnlyOffice的app image。OnlyOffice是只负责兼容Ubuntu的,其他系统不进行兼容配置,在arch下是无法过编译的,因为各种配置问题,所以还是老老实实app image吧。

1
2
3
4
# clash
yay -S clash-verge-rev
# 备份软件
yay -S timeshift

其他软件不再赘述,qq用linuxqq,wechat用wechat-uos-qt。

后记

在这场Arch安装+完全配置竞速中,我取得了一天的好成绩。

一次grub install后忘记grub-mkconfig了,一次忘记mount boot了,一次忘记下载联网工具了,一次忘记设置用户密码了。

我是Arch低手😭😭😭。