安装与配置(Arch 篇)
安装与配置(Arch 篇)
安装
20230819 收到购买的硬盘,正式安装 archlinux(双系统)。安装过程还挺坎坷的,在问题区可见一斑。
- 中文教程,讲的比较好,有不少针对中文用户的细节。
- 本人也参与了一些微小的错误修正和内容追加。
- 不过还是建议 archwiki - installation guide 也一起看看,取长补短。
提示
archwiki 是最官方、最权威、最详细的指南,可以多看看,发生分歧时,以 wiki 为准。
分两块盘的优点:不用担心 windows 更新崩了 grub 引导不过我已经关了自动更新;出现失误不用担心丢另一块盘的数据安装时我确实失手格掉了全盘数据和分区。
分区
如果想使用多个内核,boot 分区 分 512M 可能不够。不缺的话建议直接 1G。
swap 无所谓,不分都行,反正我有大 RAM。(即使我分了,我也调低了 swappiness。)
由于我用 btrfs,因此只要把其他空间全部给主分区就行了。
添加 windows 引导
由于双系统,安装后我肯定是都使用 grub 作为引导(开 bios 挺麻烦的),但是我双系统分别在两块不同硬盘上,无法使用 os-prober 自动共存。因此我使用如下方法进行自动检测并添加:
mkdir /mnt/windows
mount /dev/<windows efi> /mnt/windows
grub-mkconfig -o /boot/grub/grub.cfg
umount /mnt/windows
ArchWSL
- 安装:
- 设置中搜索 启用或关闭 Windows 功能,打开 HyperV 选项。
- 安装 wsl 与 archwsl。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux # 重启 wsl --update wsl --install --no-distribution scoop install archwsl
- 拉一个
.wslconfig
,例如我的。否则网络啥的可能会出问题。 - 参照官方文档使用 pacman。
- 激活 WSL 后,WSL 的 bash.exe 优先级可能会高于 git bash。但是很多时候 git bash 比 WSL bash 更好用(比如 wsl2 的 filesystem 非常慢,但是 git bash 不走 wsl 所以很快),于是我会将 WSL bash 换成 git bash:删掉
C:\Windows\System32\bash.exe
。也是改拥有者 + 改权限那一套。
- 更新 ArchWSL:从wsldl下载
wsldl.exe
,改名为arch.exe
并替换。
20230920 下午安装 TermuxArch,也踩了不少坑。
- termux 本身的 pkg 需要配置好镜像源(
termux-change-repo
)。 - 安装时如果有报错要注意看,可能需要:
- 手动在移动端环境创建目录
- 手动安装一些包,例如 bsdtar
- 安装完成后为 pacman 添加镜像需要选择 arm 的而不是默认的 x86_64。
Server = http://mirrors.tuna.tsinghua.edu.cn/archlinuxarm/$arch/$repo Server = http://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo Server = http://mirrors.stuhome.net/archlinuxarm/$arch/$repo
配置
这里是 文章 - 设置电脑 的 linux 板块内容。设置项均为 archlinux,且排名不分先后。
系统设置
- 基础 alias
e
:default$EDITOR
l
:ezagp
:git pull
gfixup
: git 奇技淫巧 # 自动化 squashdocker
:podman
-> containermakepkg
:抄来的 bwrap。alias makepkg='bwrap --unshare-all --share-net --die-with-parent \ --ro-bind /usr /usr --ro-bind /etc /etc --proc /proc --dev /dev \ --symlink usr/bin /bin --symlink usr/bin /sbin --symlink usr/lib /lib --symlink usr/lib /lib64 \ --bind $PWD /build/$PWD --ro-bind /var/lib/pacman /var/lib/pacman --ro-bind ~/.ccache ~/.ccache \ --bind ~/.cache/ccache ~/.cache/ccache --chdir /build/$PWD /usr/bin/makepkg'
pack
: 偷来的一键打包更新gpt
: 简单跑一个本地模型(src)ollama serve >/dev/null & ollama run llama2
- 设置 zram swap。
- 我使用
zram-generator
AUR。
- 我使用
- 设置
/etc/fstab
挂载 tmpfs后来使用 zram 2. 了。- Archlinux 实际上有 tmpfs 挂载的默认值,然而我还是手动搞了,可以调整容量。
- 添加
noatime
标识,即不带访问时间 (ref) - 删除
subvolid
,详见 timeshift 引发的血案 - 可以用
sudo sed -i -E 's/(subvolid=[0-9]+,)|(,subvolid=[0-9]+)//g' /etc/fstab
命令行删除。
- 挂载 zram:只需在
zram-generator.conf
中新建一个 zram device,然后写mount-point = /tmp
即可。
wayland 的 electron 支持(据说 wayland 对 electron 不太友好)无所谓,现在是 X11 人
- 激活启动时 numlock
- 设置 pacman:
- 更改 AUR Helper 缓存(参考wiki 注意事项):
- yay 更改缓存至 tmpfs:
yay --builddir /tmp/yay --save
- 很遗憾,我仍未找到 paru 永久设置 clonedir 的方法。 使用 alias 会带来另外的问题 但是!我们可以将 paru 的
clonedir
也 bind mount 同一个 tmpfs,这样就能够解决问题了。- 然而这里还会出现权限问题,无法 (?) 解决,因此我 mount 到了另一个新的 tmpfs。(不 bind 了)
- 更改 makepkg 编译位置至 tmpfs
- yay 更改缓存至 tmpfs:
- 设置 grub(内核参数)
sudo -e /etc/default/grub # after edit sudo grub-mkconfig -o /boot/grub/grub.cfg
- 改等待时间
- 多内核的设置
- 修改 faillock attempt times
# sudo -e /etc/security/faillock.conf deny = 10
- 安装
xsettingsd
并简单配置 - sysctl 相关。
- system.conf
- 调整 DefaultTimeoutStopSec,使关机时不会被某些应用阻断长达 90s
- sysrq 相关。
输入法
我使用 fcitx5,输入要求为 英语,双拼,日语。可以在遇到的问题里找到一些输入法的设置。
- 双拼关闭快速输入,默认为
;
。 - 中文 自定义词组。
w
->我
l
->了
- 添加自定义词库
代理
目前我使用 daed / dae 作为 linux 下的代理软件。
使用 windows 代理
archwsl 可以直接使用 windows 的代理。抄这里的 .wslconfig
即可。
旧版解法,已废弃
your_port=****
host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
export ALL_PROXY="http://$host_ip:$your_port"
set host_ip $(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
set -gx ALL_PROXY="http://$host_ip:<your_port>" # fill your port
后来写了 fish 脚本,自用方便。
代理软件需要开启局域网连接。测试时不要使用 ping
指令(其不走代理),用 curl
。
文件系统设置
创建子卷至现有目录
如果按照上文推荐教程安装,那么默认只会创建两个 btrfs 子卷(@
, @home
)。但是 btrfs 的最佳实践其实是将易变化文件(日志,缓存,数据库,容器)全部放到单独子卷里(排出根子卷),以避免打快照时将其全部加入,增大空间消耗。
例如,/var/cache
, /var/tmp
, /var/log
, ~/.cache
等位置都应该建立单独子卷。
如果在某位置新建子卷,该位置存在的文件将被覆盖。那么在需要保存文件前提下,如何新建子卷呢?答案是手动处理。(src)
可能要注意一下,路径不能带空格。
function make_new_subvolume
set dir $argv
sudo mv $dir{,.bak}
sudo btrfs subvolume create $dir
sudo cp --archive --one-file-system --reflink=always $dir{.bak/*,}
sudo rm -r --one-file-system $dir'.bak'
end
# Usage
make_new_subvolume /var/log
参考 src。
kde 及其配套设施
我使用 kde 作为我的桌面(kde 爆杀 gnome!)。
我安装的 kde 系列软件详见包管理与使用推荐。
- enable flameshot:flameshot 默认无法使用 print 快捷键截图。需要在 系统设置 - 添加快捷键 - 火焰截图,然后手动设置快捷键。
- 输入设备,将键盘的按键延迟改短。
- 外观,黑色主题
- 开关机 - 桌面会话,选择启动为空会话
- 快捷键,添加应用程序 konsole,设置唤醒快捷键
- 关闭通知声音
- 输入法,语言设置,缩放率等基础的就不要我讲了。kde(wayland?) 对分数缩放做的不算太差,只是有的图标有点糊而已。
- 自定义状态栏。我真的爱死状态栏显示内存,磁盘 IO,CPU 占用的小组件了!CPU 占用其实不需要看,
因为可以通过风扇声判断还有时间格式,无用图标的自定义。 - 工作区行为 - 锁屏,改锁屏时间。
- 设置 numlock 行为
- 窗口管理 - 窗口行为 设置 焦点跟随鼠标
- 配置窗口管理器,在窗口装饰中选择主题,调出
置顶
按钮。 - 配置蓝牙,安装
bluedevil
- 关闭文件索引(臭名昭著的 baloo):
balooctl disable
。其不仅可能导致崩溃(ref),还可能造成性能损失。 - 更改动画速度,改得更快一点。
- 设置 krunner 让其启动更快。ref
快照
快照本质上就是一个 cp 而已,只不过在 btrfs 上吃了 CoW 的福利,空间占用很小罢了。
因为被 timeshift 坑过,因此换用 snapper + btrfs-assistant。
当然还有 btrbk 可以选择,不过其主业 (backup tool) 并非快照,因此没有尝试。
快照一般不备份 /boot
,因此若回滚了旧的内核,而 boot 仍启动新的内核,则无法正常启动。wiki 里有解法,可以在更新内核时备份 /boot
以便回滚时能够手动替换 /boot
。
snapper
btrfs-assistant
为 snapper 提供了 GUI 界面,建议安装。
snap-pac
会在每次 pacman 安装 & 删除时打一次快照(before and after pacman transactions),这样可能会比较占空间。我对快照没有那么高要求,因此我不用。
timeshift
timeshift 要求子卷名字必须以 @
开头。
timeshift 的 cron 定时备份默认是残废的。
甚至连卸载 timeshift 都是一个大坑。
驱动
显卡驱动
GPU:NVIDIA RTX 3050 Laptop + Intel 核显,装驱动抄教程即可(但是不要抄后面的 双显卡)。检测驱动是否成功安装,可以执行 nvidia-smi
。
以下设置可能并没有什么卵用,但是写在这里记录以下我的摸索过程。
- 不要安装
xf86-video-intel
,DRI 3 直接炸,DRI 2 在 election 下会花屏。 - DRM 内核级显示模式设置
双显卡
关于双显卡,混合方案用 prime,不要用 optimus-manager(具体去落絮搜)。想要用 N 卡运行的软件需要 prime-run
,实测是需要的。至于怎么测,打开 nvtop
然后开游戏,看占用。
目前我还没找到能够硬件加速 firefox 的方法。prime-run
测的结果是不行。
音频驱动
默认是 pulseaudio
,我尝试更换为 pipewire
。
sudo pacman -S lib32-libpipewire libpipewire pipewire-alsa pipewire-pulse pipewire-audio pipewire-jack wireplumber
更换内核
更换内核的目的一般是需要一些特性,例如 linux-lily 的 tty 中文字符支持。我目前使用 linux-lily
,因为其中文支持、waydroid 支持和较低的更新频率。我曾今用过 linux
, lts, zen 和 lily,只有 lily 的更新频率低。那么为什么要更新频率低的呢,因为天天下载还要编译模块烦死了!
linux 下内核基本无需手动编译,毕竟有 PKGBUILD 脚本,甚至好多内核有已编译版本,下载就可用。
linux-lily
需要确保添加了 archlinuxcn 源。否则可能要从 aur 编译。
sudo pacman -S linux-lily linux-lily-headers
sudo pacman -S linux-zen linux-zen-headers
下载完内核后记得 sudo grub-mkconfig -o /boot/grub/grub.cfg
生成启动选项。
至于 initramfs 和 dkms 模块都会通过 pacman hook 自动搞定,不需要人为介入。
更换为 linux
以外的内核还请注意:
- 参考系统设置
8.
的 grub 设置。 - 需要更换 NVIDIA 驱动至 dkms(如果有的话):
sudo pacman -S nvidia-dkms
混成器
我目前正在使用 X11。具体原因请移步 basic。