前言

screenfetch
一定要运行一下 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.confvm.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:

  1. browser.cache.disk.enable 设为 false
  2. browser.cache.memory.enable 设置成 true (默认)
  3. 添加 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 而言有很多毁誉参半的地方,但它的出现也确实是需求与妥协的产物,更加适合现在的我。