这部分是一些有用但是被我弃用的东西,以及一些参考。
- pacman 常用命令
- timeshift
- ulauncher
- Steam 子卷
- rEFInd
- 用 archinstall 安装 GNOME 后的一些清理
- TLP 相关
- ananicy-cpp 资源调用优化
- 更换 CachyOS 源
- Zen 浏览器
- 更改 TTY 字体大小
- Wayland compositor 剪贴板
- wf-recorder
- 让 Flatpak 应用 GTK 主题
- 限制 AMD CPU 功耗
- Snapper 命令行快照回滚
- B 站 5000 粉不到开播
- 字体设置
- tuigreet
- ly 显示管理器
- GRUB 在 Btrfs 文件系统的最佳配置方法
- opencode 使用本地 Ollama 或 LM Studio 模型
- 内存大页 1G 和 2MB 切换的问题
- 辨别软件是运行在 Xwayland 还是 Wayland
- Btrfs 扩容和缩小
- Vim/Neovim 切换模式时自动切换中文输入法
- 使用环境变量让 SDL 2/3 应用以 Wayland运行
pacman 常用命令
可以安装 pacman 的 GUI。
sudo pacman -S pamac
常用命令:
下载包但不安装
sudo pacman -Sw删除包,同时删除不再被其他包需要的依赖
sudo pacman -Rns查询包
sudo pacman -Ss列出所有已安装的包
sudo pacman -Qe列出所有已安装的依赖
sudo pacman -Qd清理包缓存
sudo pacman -Sc列出孤立依赖包
sudo pacman -Qdt清理孤立依赖包
sudo pacman -Rns $(pacman -Qdtq)无视依赖关系强制删除某个包
sudo pacman -Rdd
timeshift
sudo pacman -S timeshift
sudo systemctl enable --now cronie.service
自动生成快照启动项
sudo pacman -S grub-btrfs inotify-tools
sudo systemctl enable --now grub-btrfsd.service
修改服务配置
sudo systemctl edit grub-btrfsd.service
[Service]
ExecStart=
ExecStart=/usr/bin/grub-btrfsd --syslog --timeshift-auto
重启服务
sudo systemctl daemon-reload
sudo systemctl restart grub-btrfsd.service
ulauncher
ulauncher 是一个启动器,支持模糊搜索,用 GTK 编写,支持 Python 脚本
yay -S ulauncher
然后设置一个自定义快捷键,命令写 ulauncher-toggle,如果使用 GNOME 的 rounded corner 扩展记得添加 ulauncher 进黑名单。
ulauncher 最好用的是它的扩展功能,安装非常方便。打开设置进 extensions 页面,点击左侧的 discover extensions 就可以找到。
ulauncher 扩展
我安装的扩展:
flathub manager 可以从 ulauncher 管理 Flatpak 软件
emoji 可以快捷复制 emoji
process murderer可以快捷杀死进程
youtube search快捷从 youtube 搜索内容
github search快捷从 github 搜索内容
appimage launcher快捷打开指定目录里的 appimage 文件(记得在设置里指定存放 appimage 的路径,需要使用从/开始的绝对路径)
ulauncher 主题美化
浏览器搜索 ulauncher theme,存放路径在~/.config/ulauncher/user-themes
Steam 子卷
我不想快照复制 Steam 游戏,因为这会占用大量的硬盘空间,可以创建一个和@home 平级的@steamgames 子卷让创建@home 快照的时候排除 Steam 的游戏。
挂载根分区硬盘到/mnt 下任意位置
sudo mount --mkdir -o subvolid=5 /dev/nvme1n1p2 /mnt/btrfs_root #记得替换为自己对应的硬盘名称创建@steamgames 子卷
sudo btrfs subvolume create /mnt/btrfs_root/@steamgames禁用子卷的写时复制
sudo chattr +C /mnt/btrfs_root/@steamgames取消挂载
sudo umount /mnt/btrfs_root移动并备份现有 steamapps 文件夹
mv ~/.local/share/Steam/steamapps ~/.local/share/Steam/steamapps.bak创建新的 steamapps 文件夹作为挂载点
mkdir -p ~/.local/share/Steam/steamapps配置 fstab 文件
sudo vim /etc/fstab复制粘贴 fstab 里面根分区的那一行
# /dev/nvme1n1p2 UUID=92a83c41-105d-4983-9536-2492d024bb52 / btrfs rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvol=/@ 0 0粘贴到底部,把 / 修改为 steamapps 的路径
/home/shorin/.local/share/Steam/steamapps,把 subvol=/@ 改成 subvol=/@steamgames。修改后是这样的:# steamgames subvolume UUID=92a83c41-105d-4983-9536-2492d024bb52 /home/shorin/.local/share/Steam/steamapps btrfs rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvol=/@steamgames 0 0刷新 systemd 缓存
sudo systemctl daemon-reload手动挂载 fstab 新条目
sudo mount -a修改权限(记得替换成自己的用户名)
sudo chown shorin ~/.local/share/Steam/steamapps/把刚刚备份的文件移回原位
mv ~/.local/share/Steam/steamapps.bak/* ~/.local/share/Steam/steamapps/清理残留
rm -r ~/.local/share/Steam/steamapps.bak
现在创建 home 目录的快照就不会记录 Steam 的游戏库了。对 Lutris 也可以进行同样的操作。如果被识别成外部设备出现在文档管理器的挂载列表里面,就在 fstab 的那一连串逗号隔开的参数里添加 x-gvfs-hide。
rEFInd
sudo pacman -S refind
refind-install
启动项记忆
编辑 ESP 里的 refind.conf 文件
sudo vim /efi/EFI/refind/refind.conf写入
default_selection +,意思是记住启动项选择。也可以"+,vmlinuz"设置优先级。手动启动项
设置
menuentry{}。menuentry "Arch Linux" { icon /EFI/refind/icons/os_arch.png volume **************** loader /@/boot/vmlinuz-linux-zen initrd /@/boot/initramfs-linux-zen.img options "root=UUID=54f285eb-8140-48df-81f8-2b03cb976fc0 rw rootflags=subvol=@ zswap.enabled=0 rootfstype=btrfs loglevel=5" enabled }icon设置图标路径,路径从 ESP 的根目录开始而不是从 Linux 的根目录开始。volume设置分区,不能用 UUID,要用 PARTUUID,使用sudo blkid获取。loader指定内核路径。initrd指定 initramfs 和 ucode 的路径。options ""指定启动项参数。enabled表示启用这个 entry,disabled是禁用。美化
在/EFI/EFI/rEFInd/目录下新建一个 themes 文件夹
sudo mkdir -p /efi/EFI/refind/themes然后浏览器搜索自己喜欢的
git clone下来放到到刚刚创建的文件夹里然后编辑配置文件
sudo vim /efi/EFI/refind/refind.confinclude themes/**********/theme.conf隐藏启动项
可以在 rEFInd 的引导界面按
delete键隐藏启动项。或者编辑配置文件用
dont_scan_dirs=指定要排除的目录。dont_scan_dirs=/@/boot,EFI/****
用 archinstall 安装 GNOME 后的一些清理
sudo pacman -R gnome-contacts gnome-maps gnome-music totem gnome-characters gnome-connections evince gnome-logs malcontent gnome-system-monitor gnome-console gnome-tour yelp simple-scan htop sushi gnome-user-docs epiphany
TLP 相关
(power-profiles-daemon 已经足够了,故弃用)
sudo pacman -S tlp tlp-rdw
yay -S tlpui
设置方法参考官方文档Settings — TLP 1.8.0 documentation
这里给一个现代电脑的通用设置:
processor 选项卡中
CPU DRIVER OPMODE
AC active
BAT active
CPU SCALING GOVERNOR
AC schedutil
BAT powersave
CPU ENERGY PERF POLICY
AC balance_performance
BAT power
CPU BOOST
AC on
BAT off
PLATFORM PROFILE
AC balanced
BAT low-power
MEM SLEEP
BAT deep
开启服务
sudo systemctl enable --now tlp
ananicy-cpp 资源调用优化
yay -S ananicy-cpp cachyos-ananicy-rules-git
sudo systemctl enable --now ananicy-cpp.service
更换 CachyOS 源
(因严重软件安装异常问题弃用)
如果你渴望极致的性能优化,可以使用 CachyOS 的源。
ps:谨慎更换 CachyOS 的内核 linux-cachyos,内核恐慌(kernel panic)的概率会很大。
安装
curl https://mirror.cachyos.org/cachyos-repo.tar.xz -o cachyos-repo.tar.xz tar xvf cachyos-repo.tar.xz && cd cachyos-repo sudo ./cachyos-repo.sh重启电脑
移除
curl https://mirror.cachyos.org/cachyos-repo.tar.xz -o cachyos-repo.tar.xz tar xvf cachyos-repo.tar.xz cd cachyos-repo sudo ./cachyos-repo.sh --remove重启电脑
Zen 浏览器
yay -S zen-browser zen-browser-i18n-zh-cn
更改 TTY 字体大小
sudo pacman -S terminus-font
ls /usr/share/kbd/consolefonts
sudo setfont ter-v32n
永久生效
sudoedit /etc/vconsole.confFONT=ter-v32nsudo systemctl restart systemd-vconsole-setup
Wayland compositor 剪贴板
yay -S clipse clipse-gui
wf-recorder
sudo pacman -S wf-recorder
示例:
wf-recorder -c h264_vaapi -d /dev/dri/renderD128 --audio --file=test.mp4 -F scale_vaapi=format=nv12:out_range=full:out_color_primaries=bt709
让 Flatpak 应用 GTK 主题
flatpak override --user --filesystem=~/.themes
flatpak override --user --filesystem=xdg-config/gtk-4.0
flatpak override --user --env=GTK_THEME=adw-gtk3-dark
限制 AMD CPU 功耗
ryzenadj
Snapper 命令行快照回滚
据官方文档说,可能会导致系统异常,但我没遇到过。
使用快照进行恢复
`1..0`这里的`1`是要使用的快照的序号。`0`代表当前状态,快照会比对两者之间的差别然后撤销所有的更改。 ```bash snapper -c root undochange 1..0 ``` ```bash reboot ```
B 站 5000 粉不到开播
安装这个油猴脚本,然后在直播间开播,获取到推流码之后用 OBS 开播
字体设置
字体主要分三类:
非衬线字体(sans-serif)
主要用于界面文字之类的场景。
等宽字体(monospace)
主要用于编程开发、终端之类的场景。
衬线字体(serif)
主要用于文书编辑之类的场景。
以下是一个 fontconfig 的示例,设置了三种字体类型具体使用哪些字体,可以解决大多数字体异常。fontconfig 的位置在~/.config/fontconfig/fonts.conf,编辑配置文件后还需要运行fc-cache -fv刷新字体缓存。
PS:这里示例中的 serif 衬线字体使用的是 sans-serif 非衬线字体的字体。因为真正用到 serif 的时候通常会手动选择(比如使用 WPS 进行文档编辑的时候),serif 使用 sans-serif 的字体可以避免某些网站(例如 bilibili 直播)将本该是非衬线字体的内容显示为衬线字体导致大幅影响阅读体验。
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
<match target="font">
<edit name="antialias" mode="assign"><bool>true</bool></edit>
<edit name="hinting" mode="assign"><bool>true</bool></edit>
<edit name="hintstyle" mode="assign"><const>hintslight</const></edit>
<edit name="rgba" mode="assign"><const>rgb</const></edit>
<edit name="lcdfilter" mode="assign"><const>lcddefault</const></edit>
</match>
<alias>
<family>sans-serif</family>
<prefer>
<family>Noto Sans</family>
<family>Noto Sans CJK SC</family>
<family>Adwaita Sans</family>
</prefer>
</alias>
<alias>
<family>serif</family>
<prefer>
<family>Noto Sans</family>
<family>Noto Sans CJK SC</family>
<family>Adwaita Sans</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>JetBrains Mono</family>
<family>JetBrains Maple Mono</family>
<family>Adwaita Mono</family>
</prefer>
</alias>
</fontconfig>
tuigreet
极速,基于 greetd 的纯 TTY tui 显示管理器(如果进入 tuigreet 之后还有日志输出会导致 tuigreet 的 tui 错位)。
安装
sudo pacman -S --noconfirm --needed greetd greetd-tuigreet简单配置
sudo vim /etc/greetd/config.toml[terminal] # 绑定到 TTY1 vt = 1 [default_session] # 使用 tuigreet 作为前端 # 自动扫描 /usr/share/wayland-sessions/,支持时间显示、密码星号、记住上次选择 command = "tuigreet --time --user-menu --remember --remember-user-session --asterisks" user = "greeter"启用 greetd
systemctl enable greetd
ly 显示管理器
安装
sudo pacman -S ly启用
这里的 TTY1 可以是任意 TTY
systemctl enable ly@tty1简单配置
有一个很酷的代码雨动画背景可以开。
sudo vim /etc/ly/config.ini其他内容... animation = matrix 其他内容...
GRUB 在 Btrfs 文件系统的最佳配置方法
原理:GRUB 装进 ESP,grub.cfg生成在/boot/grub。编辑 ESP 里的grub.cfg让其在启动时读取/boot/grub/grub.cfg。这样/boot/grub/grub.cfg可以被快照回档,esp/grub/grubenv因为在 ESP 的 FAT 文件系统上,在系统初期也可以被写入。
删除链接
如果你的
/boot/grub是指向 ESP 里的 GRUB 的链接,请删除后创建真实的目录。sudo rm -rf /boot/grub sudo mkdir -p /boot/grub查找根分区的 UUID
findmnt / -n -o UUIDfindmnt /列出跟根目录挂载信息-n隐藏标题-o UUID只输出 UUID编辑存根
sudo vim /efi/grub/grub.cfg手动输入 UUID 有点折磨,可以运行
sudo findmnt / -n -o UUID > /efi/grub/grub.cfg把 UUID 直接覆盖写入 ESP 中的grub.cfg此处的
/efi应为你实际的 ESP 位置。删除所有内容,只需要写以下内容:
# 设置 root 环境变量为实际的根分区设备 search --fs-uuid --no-floppy --set=root 你的 Btrfs 分区 UUID # 读取根分区中的 grub.cfg 文件 configfile /@/boot/grub/grub.cfgsearch --fs-uuid <你的Btrfs分区UUID>通过 uuid 搜索分区。--no-floppy跳过软盘设备。--set=root将搜索到的第一个设备设置为root。root是 GRUB 的环境变量之一,默认值是 GRUB 所在的设备。我的 GRUB 安装在了 ESP,那root的值就是 ESP 的设备名。我们为了 Btrfs 回档要把 GRUB.cfg 存在 Btrfs 文件系统里,所以要手动指定 root 的值为 Btrfs 文件系统所在的设备。configfile读取配置文件。/@/boot/grub/grub.cfg是配置文件目录,不指定设备的话默认在root环境变量指定的设备上查找此目录。配置快照启动项 grub-Btrfs
安装了
grub-btrfs快照启动项功能的情况下才需要进行这步的编辑。grub-btrfs.cfg是快照启动项的配置文件。GRUB 寻找此文件时查的目录由prefix变量指定,这个变量代表的是 GRUB 的安装位置。我的 GRUB 安装在 ESP,所以prefix的值是/efi/grub,也就是说 GRUB 查找快照启动项的配置文件时的完整路径是/efi/grub/grub-btrfs.cfg。但是快照启动项的配置文件默认被生成到/boot/grub/grub-btrfs.cfg而不是/efi/grub/grub-btrfs.cfg,所以我们要修改grub-btrfs的配置文件指定 GRUB 在/boot/grub里寻找快照启动项的配置文件。sudo vim /etc/default/grub-btrfs/config找到下面这段内容:
# GRUB_BTRFS_GBTRFS_SEARCH_DIRNAME="\${prefix}"改成:
GRUB_BTRFS_GBTRFS_SEARCH_DIRNAME="/@/boot/grub"注意,
/@必须是你实际的根子卷。生成
grub.cfgsudo grub-mkconfig -o /boot/grub/grub.cfg
大功告成。现在对启动流程来说至关重要的grub.cfg就在快照的范围里啦,回档的时候引导也会跟着一起回档,除非 Btrfs 文件系统本身坏掉,否则系统 99.9%的情况下都不会再挂啦。
opencode 使用本地 Ollama 或 LM Studio 模型
vim ~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama-lan": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama (LAN)",
"options": {
"baseURL": "http://192.168.0.13:11434/v1",
"apiKey": "ollama"
},
"models": {
"qwen3-coder-next:q4_K_M": {
"name": "Qwen3 Coder Next"
}
}
},
"lmstudio-lan": {
"npm": "@ai-sdk/openai-compatible",
"name": "LM Studio (LAN)",
"options": {
"baseURL": "http://192.168.0.13:1234/v1"
},
"models": {
"qwen3-coder-next": {
"name": "Qwen3 Coder Next"
}
}
}
}
}
内存大页 1G 和 2MB 切换的问题
内存大页的默认目录位置是/dev/hugepages,这个挂载点是在系统初始化的时候自动挂载上的,默认单页大小是 2MB,可以通过启动参数调整默认的页大小。
default_hugepagesz=1G hugepagesz=1G hugepages=16
default_hugepagesz=1G设置没有指定内存大页大小时的默认大小
hugepagesz=1G在开机时初始化 1GB 内存大页的管理机制
hugepages=16是需要的内存大页的数量
问题在于/dev/hugepages不可能同时是 2MB 又是 1GB,所以需要自定义内存大页目录,将 2M 和 1G 分别存储在不同的目录,做到同时使用。
编辑/etc/fstab
hugetlbfs_2M /dev/hugepages_2M hugetlbfs pagesize=2M,mode=1777 0 0
hugetlbfs_1G /dev/hugepages_1G hugetlbfs pagesize=1G,mode=1777 0 0
hugetlbfs_2M只是一个名字;/dev/hugepages_2M挂载点;hugetlbfs指定文件系统是内存大页;pagesize=2M指定大页大小;mode=1777权限,
这样就同时存在 1G 和 2M 的内存大页系统,可以同时申请,同时使用。/dev/hugepages由系统管理,我们只动自己自定义的,于是避免了切换时会产生的各种问题。
/sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages是操作 1G 大页数量的接口。把1048576改成2048就是操作 2M 大页数量的接口。和sysfs这个关键词有关,我没学过 Linux,不懂。
辨别软件是运行在 Xwayland 还是 Wayland
可以使用xorg-xeyes或者xorg-xlsclients。
用xeyes的话,打开之后在窗口移动鼠标,如果眼睛在动就是 Xwayland,不动就是 Wayland。
用xlsclients的话,在输出列表里的就是 Xwayland,不在的就是 Wayland。
Btrfs 扩容和缩小
扩容可以在系统运行的时候进行
在进行扩容和缩容操作之前要先明确一个概念:块设备。lsblk -p列出的每一个/dev开头的分区都是一个块设备,文件系统只认块设备,不看这个块设备是在你的硬盘 1 上还是在硬盘 2 上又或者在你的移动 U 盘上。
分两种情况:调整大小(resize)和添加(add)
resize
如果是单个硬盘上的连续空间,使用此方法(单个硬盘但是空间不连续,可以使用 GParted 移动分区)。
原理是先调整物理分区大小,再调整 Btrfs 文件系统大小。
cfdisk 调整物理分区大小
sudo cfdisk /dev/nvme0n1/dev/nvme0n1 替换为你实际的块设备名称
选中
更改尺寸 resize扩容分区(直接回车会自动合并连续的空闲空间);然后选择写入 Write,输入yes,回车保存更改;退出 Quit退出 cfdisk。调整 Btrfs 文件系统大小
btrfs命令由btrfs-progs提供sudo btrfs filesystem resize max /filesystem resize调整文件系统大小max /将根目录所在文件系统扩容至最大物理硬盘空间确认
df -h /通过大小那一列可以看到扩容成功。
减少硬盘空间
缩小的话只需要将过程反过来,先缩小文件系统大小再缩小分区大小。
先用
df -h /确认可用空间;然后用btrfs调整大小:sudo btrfs filesystem resize -10G /resize -10G /将文件系统缩小了 10G。这里还可以指定缩小到多少 G,例如缩小到 50G 就是
resize 50 /。现在用
df -h /就可以看到大小变小了,记住这个数值后用cfdisk的 resize 功能缩小分区大小就行。
add
如果是多个硬盘上的块设备,使用此方法(未分配空间需要先新建为块设备)。
原理是将新的块设备加入当前文件系统,Btrfs 文件系统会智能在多个块设备之间存储数据。
添加块设备
sudo btrfs device add /dev/vda2 //dev/vda2替换为你实际用来扩容的新块设备名称device add /dev/vda2 /添加/dev/vda2到根目录所在文件系统确认
df -h /可以看到空间已经变大。
btrfs filesystem show /可以看到该文件系统下有多个块设备。
减少硬盘空间
把新增的块设备移除即可(要确保移除之后的剩余空间足够存下两个块设备上已有的数据):
sudo btrfs device remove /dev/vda2 /现在再用
btrfs filesystem show /,输出结果里就没有那个设备了。更换 Swap 文件为 Swap 分区
跨多个设备的文件系统不能使用交换文件,如果你配置了交换文件的话必须更换为交换分区,方法如下:
删除 swapfile
swapoff命令关闭现有的交换文件,然后编辑/etc/fstab删除交换文件的自动挂载,再用rm命令删除交换文件。腾出空间
用上面缩容的方法腾出一块空间用作交换分区。
格式化
使用
cfdisk把腾出的空间新建为块设备,type选择Linux Swap。然后用mkswap命令格式化。启用和自动挂载
使用
swapon命令现在启用交换分区。然后使用lsblk -f获取 swap 分区的 UUID;编辑/etc/fstab加上如下内容:UUID=你的 swap 分区的 UUID none swap defaults 0 0
在跨设备的情况下缩容
sudo btrfs filesystem show /示例输出:
Label: none uuid: 7f989f8d-d2ce-4c91-9cf3-db687089ce4e Total devices 2 FS bytes used 629.31GiB devid 1 size 879.00GiB used 514.02GiB path /dev/nvme0n1p2 devid 2 size 931.51GiB used 486.00GiB path /dev/nvme1n1记录自己要缩小的硬盘的
devid,在上面的示例输出中我想要缩容的/dev/nvme0n1的devid是 1。用
devid指定设备,其他的就和单设备缩容差不多了:sudo btrfs filesystem resize 1:-75G / cfdisk /dev/nvme0n1 > resize > 879G > write > yes > exit。 sudo btrfs filesystem resize 1:max / # 我前面预留了一些空间,所以这里再 max 一次补全
Vim/Neovim 切换模式时自动切换中文输入法
Vim
在
.vimrc写入" === fcitx5 状态切换与恢复 === let g:fcitx_state = 1 autocmd InsertLeave * let g:fcitx_state = system("fcitx5-remote")[0] | call job_start("fcitx5-remote -c") autocmd InsertEnter * if g:fcitx_state == '2' | call job_start("fcitx5-remote -o") | endif autocmd VimEnter * call job_start("fcitx5-remote -c")在
~/.config/nvim/init.lua写入-- fcitx5 状态切换与恢复 local fcitx_st = "" vim.api.nvim_create_autocmd("InsertLeave", { callback = function() fcitx_st = vim.fn.system("fcitx5-remote"); vim.fn.jobstart("fcitx5-remote -c") end }) vim.api.nvim_create_autocmd("InsertEnter", { callback = function() if fcitx_st:match("2") then vim.fn.jobstart("fcitx5-remote -o") end end }) vim.api.nvim_create_autocmd("VimEnter", { callback = function() vim.fn.jobstart("fcitx5-remote -c") end })
使用环境变量让 SDL 2/3 应用以 Wayland运行
使用 SDL_VIDEO_DRIVER=wayland 环境变量启动