前言
一定要运行一下 screenfecth 才算真正装完了新系统
最近重装了一遍系统,为了适配自己金鱼一般的记忆,决定顺便记录一下安装完系统后的优化与设置,当然实际上文中的许多内容其实并不限于 Manjaro,另外也并不包括需要安装哪些软件(毕竟比较一下 pacman -Qe
就知道了)。
zsh
我习惯使用的 shell 是 zsh,很多人会选择现成的方案例如 Oh My Zsh,不过由于我的需求很简单所以直接在 .zshrc
加上几行完事:
# 用 l 代替 ls -la
alias l='ls -la'
# 使用 vscode 来作为默认的 sudo editor
export SUDO_EDITOR="code -w -n"
# 用 open 代替 xdg-open 同时隐藏报错信息
open() {
bash -c "xdg-open $1" 2> /dev/null
}
# 按两下 Esc 键往上条命令或者当前正在输入的命令前加上 "sudo"
sudo-command-line() {
[[ -z $BUFFER ]] && zle up-history
if [[ $BUFFER == sudo\ * ]]; then
LBUFFER="${LBUFFER#sudo }"
elif [[ $BUFFER == $EDITOR\ * ]]; then
LBUFFER="${LBUFFER#$EDITOR }"
LBUFFER="sudoedit $LBUFFER"
elif [[ $BUFFER == sudoedit\ * ]]; then
LBUFFER="${LBUFFER#sudoedit }"
LBUFFER="$EDITOR $LBUFFER"
else
LBUFFER="sudo $LBUFFER"
fi
}
zle -N sudo-command-line
bindkey "\e\e" sudo-command-line
开启 TRIM
确认是否支持
首先确认是否支持 TRIM
lsblk --discard
结果示例
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
nvme2n1 0 512B 2T 0
├─nvme2n1p1 0 512B 2T 0
├─nvme2n1p2 0 512B 2T 0
└─nvme2n1p3 0 512B 2T 0
nvme1n1 0 512B 2T 0
└─nvme1n1p1 0 512B 2T 0
└─crypthome 0 0 0 0
nvme0n1 0 512B 2T 0
└─nvme0n1p1 0 512B 2T 0
nvme3n1 0 512B 2T 0
└─nvme3n1p1 0 512B 2T 0
└─cryptroot 0 0 0 0
其中 cryptroot 和 crypthome 这两个分区的 DISC-GRAN 和 DISC-MAX 为 0,原因是 LUKS 加密分区默认没有开启 TRIM 支持。具体原因可以看这里,不过简单而言开启 TRIM 会导致文件系统的类型可以被猜测出来,另外对于 LUKS header 直接存储在设备上的时候,实际上更应该开启 TRIM,否则有更改 header 后旧的 header 在被新内容覆盖前仍旧可读的隐患。
Root 加密分区开启 TRIM 支持
对加密的 root 分区开启 TRIM 支持,以 Grub 为例,编辑 /etc/default/grub
:
找到类似下面这条 Kernel Parameter:
cryptdevice=UUID=XXXXXX cryptroot
然后在后面添加
:allow-discards
:cryptdevice=UUID=XXXXXX cryptroot:allow-discards
如果使用的 systemd boot,就在这条 Kernel Parameter:
rd.luks.options=...
后面添加
,discard
:rd.luks.options=...,discard
没有相应的 Kernel Parameter 的话直接添加即可:
rd.luks.options=discard
其它加密分区开启 TRIM 支持
对加密的其它分区开启 TRIM 支持,修改 /etc/crypttab
,在相应的挂载选项里加上 discard
即可:
# <name> <device> <password> <options>
crypthome UUID=XXXXXX /etc/mypassword discard
最后修改 /etc/fstab
,在相应的挂载选项里加上 discard
:
# /dev/mapper/cryptroot
UUID=XXXXXX / btrfs ...,discard 0 0
# /dev/nvme2n1p1
UUID=XXXXXX /boot vfat ...,discard 0 0
# /dev/mapper/crypthome
UUID=XXXXXX /home btrfs ...,discard 0 0
如果同时挂载了同一 btrfs 分区下的多个子卷,只需要对其中一个子卷添加 discard 选项即可。
使用 TRIM
开启 TRIM 支持后,可以选择周期性 TRIM 或者持续 TRIM,这两种方式应当只选择一种,建议选择周期性 TRIM:
systemctl enable --now fstrim.timer
如果想要使用持续 TRIM,那么请在 /etc/fstab 里相应的条目后面加上 discard
,同时检查一下自己的系统有没有已经开启周期性 TRIM。
有关于 Grub 的修改
删除多余的 Microcode
Manjaro 安装时默认会同时安装 intel-ucode 和 amd-ucode,强迫症如我选择把用不到的那个 Microcode 删除,这样下次更新 Boot Loader 的时候就不会加载相应的 Image 了:sudo pacman -Rns intel-ucode
关闭 watchdog 和 nmi_watchdog
往 Kernel Parameters 里添加nmi_watchdog=0 nowatchdog module_blacklist=iTCO_wdt
以 Grub 为例,编辑
/etc/default/grub
,添加到GRUB_CMDLINE_LINUX_DEFAULT=...
里即可,**iTCO_wdt=**后面的内容需要根据实际型号填写,可以通过sudo wdctl
查看型号,然后把空格替换成下划线。让 Grub 同时添加 Windows 的 Boot Entry
我的电脑是 Linux 和 Windows 双系统,同时共享 EFI 分区,让 Grub 在生成 Boot Entry 的时候把 Windows 也带上:sudo os-prober
另外为了防止 Windows 私自改动 EFI 分区,需要在 Windows 里把快速启动(Fast Startup) 和休眠 (hibernation) 关掉。
最后别忘了更新 Bootloader (Grub)
sudo update-grub
关闭 swap
如果你的内存够大,建议关闭 swap:
sudo systemctl mask swap
同时编辑 /etc/sysctl.d/99-sysctl.conf
将 vm.swappiness = ...
后面的数字改成 0。
让 make 使用内存文件系统进行编译
编辑 /etc/makepkg.conf
去掉 #BUILDDIR=/tmp/makepkg
这行中的 #
。
对内存容量足够自信时开启,否则编译比较大的项目时有可能会因为内存不足而失败。
Chromium 优化
扔进内存
把配置和缓存都扔到内存里,并且定期与硬盘同步。
由于 Chromium 的缓存目录和配置目录是分开的,我们首先要把他们放到一起,编辑 ~/.config/chromium-flags.conf
添加下面两行:
--disk-cache-dir=.config/chromium/Cache
--disk-cache-size=2000000000
第一行要使用绝对路径。
第二行可以设置缓存大小,我这里设置的约等于 2GB,因为据说超过 2GB 会被忽视从而使用默认值,另外由于登录时会把这些东西都读取到内存里,设置的太大也会导致要处理数据也变多。
安装 profile-sync-daemon。
sudo pacman -S profile-sync-daemon
运行一下 psd
生成 ~/.config/psd/psd.conf
,然后编辑这个文件并添加:
# 这里我只同步了 chromium
BROWSERS="chromium"
# 因为我有别的途径进行定时备份,所以关闭了默认的备份
USE_BACKUPS="no"
最后开启 psd
服务:
systemctl --user enable --now psd.service
强制开启硬件加速
算了,开什么硬件加速,这年头的 CPU 播放个视频还能有压力不成。
关闭 canvas fingerprint
这玩意是泄露隐私的途径之一,编辑 ~/.config/chromium-flags.conf
添加:
--disable-reading-from-canvas
不过关闭的话可能导致B站没法登录。
Firefox 优化
与 Chromium 不同,firefox 我只选择把缓存扔到放到了内存里,并且没有进行同步到硬盘的操作。
进入 about:config
:
- browser.cache.disk.enable 设为 false
- browser.cache.memory.enable 设置成 true (默认)
- 添加 browser.cache.memory.capacity 并设置成 -1,意思为自动决定缓存大小,也可以自己设置相应的数值,单位是 kb。
开启 BBR
查看 BBR Module 是否存在
modinfo tcp_bbr
查看目前使用的 congestion control
sysctl net.ipv4.tcp_congestion_control
临时开启 BBR
sudo sysctl net.ipv4.tcp_congestion_control=bbr
永久开启 BBR
cat <<-EOF | sudo tee -a /etc/sysctl.d/80-bbr.conf
net.core.default_qdisc=cake
net.ipv4.tcp_congestion_control=bbr
EOF
pacman 镜像测速
sudo pacman-mirrors --api --protocol https
这里我只检测了支持 https 的镜像,其实 http 协议也没啥问题,就算有人中途篡改了软件包的内容也没法通过签名验证,只是会让别人知道你都安装了哪些软件包而已。
关掉 LED 灯
作为反 LED 协会资深会员,一定要关掉所有的 LED 灯,首先看一下有哪些 LED 灯:
ls /sys/class/leds/
以关掉 nvidia 显卡上的 LED 灯为例,运行 sudo crontab -e
并添加下面一行:
@reboot /bin/echo 0 > /sys/class/leds/nvidia-logo/brightness
字体配置
字体宜精不宜多,不然容易发生日文字体、韩文字体优先于中文字体显示的尴尬情况。
KDE 的一些优化与设置
- 禁止 Balloo 索引文件内容
System Settings
=>Search
=> 关掉Also index file content
- 治疗画面撕裂
System Settings
=>Display and Monitor
=>Compositor
=> 把 vsync 设置成 "Full screen repaints",不要在意可能导致性能问题的提示,平常使用的情况性能肯定足够了,真对图形性能有需求的时候还是别用 Linux 折磨自己了。
[可选] 用一下 Wayland,看看是否已经足够舒适。 - 给常用软件设置全局快捷键(略)
By The Way
虽然从 Arch 换到 Manjaro 已经很久了,但是按照时间来算 Arch 依旧是我使用时间最多的发行版。最开始让我放弃 Arch 的主要原因是精力的不足,Arch 享受着最新的 Feature 的同时也被最新的 Bug 所困扰,很多地方也需要投入大量的精力进行 DIY,所以逐渐跟不上 Arch 前进步伐的我后来迁移到了 Manjaro。Manjaro 相较于 Arch 而言有很多毁誉参半的地方,但它的出现也确实是需求与妥协的产物,更加适合现在的我。