首先的首先,最重要的参考来自于archlinux简明指南。
写在前面
这篇文章的目的是整齐,简明地归纳笔者自己日常linux所接触到的一些经验,免得在搜索引擎屎里淘金。但是作者本人的记性很不好,所以可能有所缺疏。特别地,本文尤其针对的是ArchLinux
这一发行版。
你是否需要从0开始安装一个基本系统?
直接参考archlinux简明指南,正如指南中强调的,不要试图更改一些指南中提供的设置,除非你真的真的完全知道自己在做什么。这部分的经验对于所有操作系统应当都是类似的。
简单来说就是:
-
同步时间,联网,换源
-
分区和格式化,efi,交换分区和主分区(btrfs)
-
挂载并安装系统,设置基本信息如时区,用户名密码
-
安装引导程序和其他必须组件
由于pacman的强大,过程并不困难
btrfs
同样,可以阅读archlinux简明指南上的介绍不要安装传统的ext4 linux文件系统,使用更好的btrfs。我们不关心具体怎么实现的,只知道这是一个提供了很多很好特性的文件系统即可。
尤其是对于:
-
SSD的大幅优化,包括写时复制和透明压缩特性
-
子卷和克隆特性让其支持非常方便的快照(甚至是快照的快照)
其中,后者特性对于archlinux是非常重要的,因为arch不停地在滚动更新,我们折腾的时候会非常有帮助。采用神奇的btrfs后,我们的系统就能用极其小的空间进行增量快照备份。(而相对的,使用ext4符合我们的直觉——快照需要拷贝整个磁盘)
这一部分的快速命令指南:
LiveCD使用windows下的rufus制作。下面我会列出archlinux简明指南上所有相关的命令和作用。这一部分假设不会遇到任何的问题和报错。
LiveCD环境下:
同步时间,联网,换源
1 | #-- 禁用镜像内的自动更新源服务,人在国外的就无所谓了 |
分区和格式化
遇到的问题或想使用ext4分区请参考ArchLinux简明指南
1 | lsblk # 查看设备 |
注意⚠️,cfdisk对于大小的设置是M和G而不是Mb和Gb,输入Mb和Gb也能识别但大小会有误,务必检查
cfdisk的界面完全是可读的。参考简明指南即可。
1 | # 检查 |
格式化操作如下,如果和windows共存则不要格式化efi分区,以下操作都是对新空间操作的。
1 | #efi |
设置btrfs
1 | mount -t btrfs -o compress=zstd /dev/sdxn /mnt #挂载 |
安装系统
1 | pacstrap /mnt base base-devel linux linux-firmware btrfs-progs |
💡Tips: 注意,在我们的系统无法启动什么也做不了的时候,同样可以用livecd的这个命令检查修复
从这一步后,我们就进入了真正的系统
1 | vim /etc/hostname # 输入主机名即可 |
1 | 127.0.0.1 localhost |
1 | ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 时区 |
1 | vim /etc/locale.gen # 去掉enUS和zhCN 两个utf8的注释 |
1 | pacman -S intel-ucode # Intel 微码 |
grub引导
建议配置,grub引导比没有强,作者之前不用,u盘直插启动,内核参数相关的配置稍微繁琐一点。
1 | pacman -S grub efibootmgr os-prober |
配置grub参数需要:
-
GRUB_CMDLINE_LINUX_DEFAULT内核参数去掉quiet,loglevel=5方便观察
-
加入nowatchdog(参考这里)
-
如果要配置n卡驱动怕等下遇到问题,可以提前加入ibt=off等
-
取消最后一行的GRUB_DISABLE_OS_PROBER=false注释,如果要引导win的话
1 | grub-mkconfig -o /boot/grub/grub.cfg |
重启后
1 | systemctl enable --now NetworkManager |
1 | vim ~/.bash_profile #添加 export EDITOR='vim' |
开启pacman32位和archlinuxcn:
1 | vim /etc/pacman.conf |
1 | pacman -Syyu |
更细节的设置命令
安装桌面和必备其他组件
1 | pacman -S plasma-meta konsole dolphin # plasma-meta 元软件包、konsole 终端模拟器和 dolphin 文件管理器 |
1 | sudo pacman -S sof-firmware alsa-firmware alsa-ucm-conf # 声音固件 |
输入法
1 | sudo pacman -S fcitx5-im # 输入法基础包组 |
编辑~/.config/environment.d/im.conf
1 | # fix fcitx problem |
更进一步的配置/更好用的输入法参见可选配置
timeshift
pacman就行,参考应用安装
blackArch
1 | # Run https://blackarch.org/strap.sh as root and follow the instructions. |
显卡驱动
这里的所有内容只适用于iu+n卡,其他请参考archwiki或archlinux简明教程对应的部分。如果你也是同样配置并且需要笔记本双显卡,下面的内容可能会很管用。个人笔记本是y9000x 2022版本。
这不一定适用于你的笔记本和显卡!
1 | -` zjw1nd@MATRIX-02-B |
首先,安装核显和n卡的驱动
1 | sudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel |
⚠️再次强调,英伟达的闭源驱动是和内核版本强绑定的,请一定在安装n卡驱动前执行pacman Syu操作!否则会出现很多意想不到的问题
如果你不确定,则先不要执行下面的命令,先向后看
1 | sudo pacman -S nvidia-open nvidia-settings lib32-nvidia-utils # 必须安装 |
安装后,先将kms从/etc/mkinitcpio.conf
里的HOOKS移除并重新生成initramfs,即mkinitcpio -P
。这样可以避免initramfs包含nouveau。我个人的环境重装后执行到这里就可以了。
3060 mobile是一个很尬的版本。我个人在更新内核后直接安装了nvidia-open包就没问题了,但是过程中踩了一万个坑,现在,下面是一些备选的解决方法,我不确定哪些有用但提供在这里。同时建议n卡使用xorg显示服务器,n卡对wayland的支持并不算好,wayland主要是流畅动画和hdr,如果需要wayland则继续向后看。
-
无论怎么装nvidia-smi都显示连接不到驱动——很可能是上面说的内核版本的问题
-
添加内核参数
ibt=off
,如果你使用了grub,则编辑/etc/default/grub
中的内核参数CMDLINE_DEFAULT
.如果没有,则参考archlinux wiki上的内核参数页面进行配置,有很多办法。这是intel的一个间接跳转控制流保护机制,简单来说就是只允许jmp rax
这样的指令在核态跳到标记过的位置。 -
安装后发现n卡驱动还是开源驱动nouveau——arch自带了开源驱动nouveau,才能点亮桌面的。n卡应该默认会屏蔽nouveau,如果没有可以卸载nouveau,并在内核参数中添加黑名单禁止nouveau的加载。内核启动参数添加
module_blacklist=nouveau
然后更新grub。或在/etc/modprobe.d
中创建一个blacklist.conf
,添加
1 | blacklist nouveau |
同理,类似的思想可以用于很多地方,也可以反向让nouveau开启。
-
如果你不是用的“linux”内核,而是linux-zen或者linux-lts,则安装对应驱动,将nvidia-open替换为
nvidia-open-lts,nvida-open-zen或nvidia-open-dkms
。需要注意的是,dkms包是一个不和内核绑定的驱动,在其他驱动遇到问题之后也可以再来尝试这个驱动。dkms需要内核对应的linuxheader,一般会作为依赖一起安装。 -
如果你需要Wayland,还需要启用两个nvidia_drm的两个内核参数:modeset和fbdev,二者在新的nvidia驱动包中被默认启用,但还是建议自己在内核参数添加一下。
1 | cat /sys/module/nvidia_drm/parameters/fbdev # 检查,失败返回缺少文件 |
以上都没能解决的话,更多的内容,可以参考archlinuxwiki上的NVIDIA和NVIDIA/故障排错
双显卡配置
我个人使用了optimus-manager,所以推荐这个。envycontrol把我电脑整崩溃了所以个人不推荐,当然你也可以试试。
1 | yay -S optimus-manager optimus-manager-qt |
这时重启应该就能使用optimus-manager了。
⚠️注意,如果你对你的环境没有自信(比如我),一定要在每次切换显卡完后手动注销一次观察是否正常再关机,不要切换后直接关机,否则可能会莫名其妙的黑屏更多的与游戏运行,双显卡动态工作切换相关的可以参考简明指南
然后是电源策略,对于双显卡,如果不做手动电源策略配置,一般来说就算切换到集显模式,没有bios禁用独显的话,它也会一直工作耗电,很sb。因此需要我们配置optimus的电源策略。我个人尝试过的有两种,bbswitch策略在切换集显关机后再开tty2就黑屏了,我也不知道怎么修,tty3能用,反正刚装好没多久就重装了。
重装是解决arch很多问题最快的方案()
对于电源策略,请参考optimus-manager的官方文档,并且一定要看完。我采用的策略就是第一条,首先将optimus-manager的电源策略设置为custom,然后找到它的配置文件/etc/optimus-manager/optimus-manager.conf
,将nvidia下的参数设置这一条dynamic_power_management=fine
即可。这时,n卡自带的电源策略会根据其参数设置(fine: 短时间没有进程向gpu提交作业后进入低功耗;coarse: 没有应用使用n卡驱动后进入低功耗,参考默认配置的注释)降低自己的功耗,这时可以一直开hybrid模式。注意,这一功能需要n卡支持,请通过:
1 | cat /proc/driver/nvidia/gpus/0000:01:00.0/power |
来查看是否支持。
这一方案自己的实测,nvidia-smi会显示显卡off,功率大概会降低到20w左右,没有完全关闭。不过配合TLP,基本上上课一个半小时跑linux基本不掉电,很无敌,薄纱windows。
⚠️注意,电源策略是非常“个性化”的,需要尝试,请确保更改前做备份,或是保留了重装的livecd,我就是在bbswitch黑屏了重装的
安全启动
可以结合这篇一起看
如果由于某些原因(指瓦洛兰特国际服反作弊vanguard)你需要平常开启安全启动,则可以参考这里。上面的blog中提供了自己手动签名内核并写入uefi的办法,
对于arch,有一个很好用的软件:
1 | sudo pacman -S sbctl |
⚠️注意,这一软件未必对所有的硬件环境都有效,可能仍然需要手动签名
1 | sbctl create-keys |
使用sbctl的好处是,其自带一个能够在内核更新后签署的pacmanhook,省事。
更多内容以及自己手动签名的细节操作,请参考ArchWiki的安全启动部分。
一些关键的配置:
grub
/etc/default/grub
更改后使用grub-mkconfig重新生成引导
sddm
默认在/etc/sddm.conf.d目录下
pacman
镜像 /etc/pacman.d/mirrorlist
配置 /etc/pacman.conf
zsh/bash
~/.bashrc或.zshrc
其他
第三方应用:/opt
自定义相关:/usr/share
systemctl 命令
mount命令用-o指定挂载参数,-t指定分区,用df -h查看挂载情况,fdisk -l查看磁盘情况
通用排错
journalctl
journalctl命令可以输出systemd的日志,参考帮助参数,其可以输出很多东西,包括启动过程中的日志。
Arch LiveCD
用你的安装盘,其自带一个mini的arch系统,和我们安装时候做的一样,将主系统挂载到/mnt之后,可以在你的主系统翻车之后用其修复。我在尝试替换运行库的时候将一个低版本的libm.so.6放入了系统lib库(改名)结果全烂了,命令用不了加系统关机无法启动,直接插上liveCD改名后挂载改回来就行了。