Arch Linux、HyDE 与 Proton 游戏环境手册
这份文档写给第一次认真装 Arch 的人。目标不是把命令堆满屏幕,而是让你知道每一步在改什么、怎么检查、错了从哪里退。文档默认你愿意折腾,也默认你会在敲格式化命令前停下来确认磁盘名。
1概览与适用范围
这份手册覆盖一条很具体的路线:UEFI 机器,GPT 分区,Arch Linux 主系统,Btrfs 子卷,HyDE/Hyprland 桌面,NVIDIA 或混合显卡环境,Steam 作为主要游戏入口。它也会提到 Windows 双系统、EFI 分区、Secure Boot、BitLocker、Proton 兼容层和反作弊。它不负责替你决定是否删除 Windows,也不承诺每个游戏都能跑。
如果你是第一次装 Arch,先把这篇当成施工记录,而不是一条必须照抄的命令流水线。Arch 的特点是简单、透明、滚动更新。简单不等于省心,它的意思是系统把决定权交给你。你需要知道自己有没有进 UEFI 模式,根分区挂在哪里,EFI 分区是不是被误格式化,驱动包和内核是不是同一套来源。
本文的命令里会出现 `/dev/nvme0n1`、`/dev/sda`、`/mnt`、`USERNAME`、`HOSTNAME` 这类占位符。占位符必须替换。尤其是磁盘名,不能凭印象。你在安装环境里看到的盘符,可能和 Windows、PE、另一个 Linux 里的叫法不同。每次写分区表、格式化、挂载前,都要先看 `lsblk -f` 和 `fdisk -l`。
建议你准备一个普通文本文件,安装当天记下这些信息:电脑型号,CPU,GPU,内存,磁盘布局,是否双系统,BIOS 里 Secure Boot 状态,Windows 是否开启 BitLocker,使用的 ISO 日期,安装时网络方式,安装后选择的内核和显卡驱动。以后游戏突然不能启动、更新后黑屏、Steam 前缀坏掉,这些记录会比回忆靠谱。
uname -m
lsblk -f
fdisk -l
efibootmgr
ip link
输出怎么看:`uname -m` 正常应是 `x86_64`。`lsblk -f` 会列出磁盘、分区、文件系统和挂载点。`efibootmgr` 能读出 UEFI 启动项,说明你在 UEFI 环境;如果报错,先检查是不是以 Legacy/CSM 启动了 ISO。`ip link` 能看到网卡名,后面联网会用到。
这份文档的另一条线是游戏。米哈游类启动器、鸣潮、异环、最后生还者 2、带 Easy Anti-Cheat 或 BattlEye 的游戏,问题经常不在一个层面。启动器可能被自己拉起的登录窗口挡住,Proton 前缀可能坏,显卡驱动可能缺 32 位库,反作弊可能压根没让 Linux 客户端进服务器。排障时先把问题分层,不要一上来就重装系统。
2安装前准备
准备阶段最无聊,也最能救命。你需要一个 Arch ISO,一个能写镜像的 U 盘,一个可靠网络,一份备份。双系统用户还需要 Windows 恢复密钥。很多人装完 Linux 后 Windows 要求 BitLocker 恢复,不是 Arch 破坏了数据,而是启动链和 TPM 状态变了。恢复密钥找不到,麻烦会比重装 Arch 大得多。
ISO 下载后要校验。校验不是仪式,它能排除下载损坏和镜像被替换。Windows 下可以用 PowerShell 算 SHA256,Linux 下用 `sha256sum`。校验值要和官方下载页面一致。写入 U 盘时选“以镜像模式写入”,不要把 ISO 当普通文件复制进去。
Get-FileHash .\archlinux-YYYY.MM.DD-x86_64.iso -Algorithm SHA256
sha256sum archlinux-YYYY.MM.DD-x86_64.iso
进 BIOS/UEFI 后先看三件事。第一,启动模式选择 UEFI,不要用 Legacy/CSM。第二,如果你不准备处理 Secure Boot 签名,先关闭 Secure Boot,等系统稳定后再研究。第三,Windows 双系统如果开了 BitLocker,先在 Windows 里暂停或保存恢复密钥。不同品牌 BIOS 名字不一样,但核心都是这几项。
网络也要提前想好。网线最省事。Wi-Fi 可以用 `iwctl`,但有些网卡需要固件,有些校园网或网页登录认证会很烦。新手安装时不要同时挑战十个变量。能插网线就插网线;必须用 Wi-Fi,就先在 live 环境里确认能 ping 通。
ip link
iwctl
ping -c 3 archlinux.org
`iwctl` 里常用流程是 `device list` 看无线设备,`station wlan0 scan` 扫描,`station wlan0 get-networks` 看网络名,`station wlan0 connect SSID` 连接。这里的 `wlan0` 和 `SSID` 要换成你的输出。连接后退出,再用 `ping` 检查。能解析域名说明 DNS 也正常。
双系统分区要更谨慎。Windows 已有 EFI 分区时,通常复用它,不要新建一堆 EFI。EFI 分区一般是 FAT32,大小可能 100MB 到 1GB,挂载到 `/boot` 或 `/efi`。如果它太小,后面放多个内核可能紧张;但直接扩 EFI 分区牵扯 Windows 分区移动,新手不建议在没备份时做。
安装前还要定一个回退方式。最简单的是保留 Arch ISO U 盘。系统引导坏了,用它进 live 环境,挂载根分区和 EFI,`arch-chroot` 进去修。不要安装完就把 U 盘重做成别的东西。第一次装 Arch,那个 U 盘就是你的扳手。
3分区与安装
这一节从空盘说起。假设目标磁盘是 `/dev/nvme0n1`,EFI 分区是 `/dev/nvme0n1p1`,Linux 根分区是 `/dev/nvme0n1p2`。这只是例子。你的机器可能是 `/dev/sda`,也可能已有 Windows 分区。只要你没完全确认,就不要执行 `mkfs`。
先看磁盘。`lsblk -f` 看文件系统,`fdisk -l` 看分区表,`blkid` 看 UUID。你要确认目标盘大小、品牌、已有分区、是否挂载。新手常犯的错是把 U 盘当目标盘,把 Windows 数据盘格式化,或者在已有 EFI 分区上重新 `mkfs.vfat`。EFI 可以挂载复用,不等于要格式化。
lsblk -f
fdisk -l
blkid
findmnt
空盘可以用 `cfdisk` 或 `parted`。新手用 `cfdisk` 更直观。分区方案可以很简单:EFI 分区 1GB,类型 EFI System;根分区剩余空间,类型 Linux filesystem。swap 可以用 swapfile,先不单独分区。内存很小或要休眠,再专门规划 swap 分区。
cfdisk /dev/nvme0n1
| 分区 | 挂载点 | 文件系统 | 用途 | 新手检查 |
|---|---|---|---|---|
| /dev/nvme0n1p1 | /boot | FAT32 | EFI 启动文件 | 已有 Windows EFI 时通常不要格式化 |
| /dev/nvme0n1p2 | / | Btrfs | 系统和用户数据 | 确认目标是 Linux 根分区 |
| swapfile | 无 | swap | 交换空间 | 装完后创建,便于调整大小 |
格式化时分两种情况。全新空盘可以格式化 EFI 和根分区。双系统复用 Windows EFI 时,只格式化 Linux 根分区,EFI 只挂载。下面命令写的是空盘示例。双系统用户不要照抄第一行。
mkfs.vfat -F32 /dev/nvme0n1p1
mkfs.btrfs -f /dev/nvme0n1p2
Btrfs 子卷的好处是以后做快照和回滚更方便。常见做法是 `@` 做根,`@home` 做家目录,`@log` 放日志,`@cache` 放包缓存。子卷不是分区,创建和删除比传统分区轻。第一次装系统时按一个固定方案来,后面别频繁改。
mount /dev/nvme0n1p2 /mnt
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@log
btrfs subvolume create /mnt/@cache
umount /mnt
挂载顺序要稳。先挂根子卷到 `/mnt`,再建目录,再挂 EFI、home、log、cache。每一步后面都可以用 `findmnt` 看结果。`compress=zstd` 是常见选择,`noatime` 可以减少无意义写入。这里不加复杂参数,先让系统可启动。
mount -o subvol=@,compress=zstd,noatime /dev/nvme0n1p2 /mnt
mkdir -p /mnt/{boot,home,var/log,var/cache/pacman/pkg}
mount /dev/nvme0n1p1 /mnt/boot
mount -o subvol=@home,compress=zstd,noatime /dev/nvme0n1p2 /mnt/home
mount -o subvol=@log,compress=zstd,noatime /dev/nvme0n1p2 /mnt/var/log
mount -o subvol=@cache,compress=zstd,noatime /dev/nvme0n1p2 /mnt/var/cache/pacman/pkg
findmnt /mnt
确认挂载后安装基础包。`linux` 是默认内核,`linux-firmware` 提供固件,`base-devel` 以后编译 AUR 包会用到,`networkmanager` 管网络,`btrfs-progs` 管 Btrfs。微码包按 CPU 选一个:Intel 装 `intel-ucode`,AMD 装 `amd-ucode`。
pacstrap -K /mnt base linux linux-firmware base-devel btrfs-progs networkmanager grub efibootmgr nano sudo
pacstrap -K /mnt intel-ucode
# AMD CPU 用下面这行,不要两个都装
# pacstrap -K /mnt amd-ucode
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
`genfstab` 后要打开 `/mnt/etc/fstab` 看一眼。重点看 UUID 是否存在,挂载点是否重复,EFI 是否挂到你选的位置。很多启动失败来自 fstab 写错。能在安装阶段发现,就不要留到第一次重启。
4基础系统
进入 `arch-chroot /mnt` 后,你已经在新系统里了。此时要做的是让系统有时间、语言、主机名、普通用户、网络服务和引导器。不要急着装桌面。基础系统能稳定启动,再装 HyDE。这样出问题时好定位。
先设置时区和硬件时钟。中国大陆一般用 `Asia/Shanghai`。如果你在别的地区,换成自己的时区。`hwclock --systohc` 会把系统时间写到硬件时钟。双系统机器通常让 Windows 和 Linux 都按本地时间或都按 UTC,别混着来。
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
timedatectl
语言环境最少开 `en_US.UTF-8`,中文用户可以同时开 `zh_CN.UTF-8`。编辑 `/etc/locale.gen`,去掉对应行前面的 `#`,再运行 `locale-gen`。系统默认语言可以设成英文,这样报错更容易搜索;桌面里再单独配置中文输入法。
nano /etc/locale.gen
locale-gen
printf "LANG=en_US.UTF-8\n" > /etc/locale.conf
主机名随便取,但别用空格和中文。hosts 文件写标准三行。然后设置 root 密码,创建普通用户,把普通用户加入 wheel 组,开启 sudo。日常不要用 root 登录桌面。
printf "HOSTNAME\n" > /etc/hostname
cat > /etc/hosts << "EOF"
127.0.0.1 localhost
::1 localhost
127.0.1.1 HOSTNAME.localdomain HOSTNAME
EOF
passwd
useradd -m -G wheel -s /bin/bash USERNAME
passwd USERNAME
EDITOR=nano visudo
在 `visudo` 里找到 `%wheel ALL=(ALL:ALL) ALL`,去掉前面的 `#`。保存前确认你创建的用户确实在 wheel 组。以后登录普通用户,用 `sudo` 提权。
启用网络服务。`NetworkManager` 对桌面用户最省事。安装后启用服务,重启进入系统就能用 `nmcli` 或图形网络组件连接网络。
systemctl enable NetworkManager
systemctl status NetworkManager
安装 GRUB。这里假设 EFI 挂载在 `/boot`。如果你选择 `/efi`,命令里的目录也要换。`--bootloader-id=Arch` 会创建一个名为 Arch 的启动项。执行后用 `grub-mkconfig` 生成配置。
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Arch
grub-mkconfig -o /boot/grub/grub.cfg
efibootmgr
第一次退出前,做一个最小检查:`/etc/fstab` 存在,`/boot` 里有 EFI 文件,NetworkManager 已启用,普通用户能 sudo,GRUB 生成成功。然后退出 chroot,卸载,重启。重启后拔掉 U 盘,确认能进新系统。
exit
umount -R /mnt
reboot
5HyDE / Hyprland
HyDE 是围绕 Hyprland 做的一套桌面配置。它适合想快速拿到完整 Hyprland 体验的人:Waybar、壁纸、Wallbash、启动器、窗口规则、通知、主题切换都有。缺点也直接:它会接管很多配置,新手很容易不知道问题来自 Hyprland、HyDE 脚本、驱动还是自己改过的文件。
建议先把基础系统更新到最新,再装显卡驱动和桌面。桌面前先确认你能进 TTY,普通用户能 sudo,网络可用。这样图形界面坏了还能回 TTY 修。
sudo pacman -Syu
whoami
groups
systemctl status NetworkManager
ip route
安装 HyDE 前先读仓库说明。不要把远程脚本当黑箱。看它会装哪些包、改哪些目录、是否覆盖 `~/.config`。如果你已经有重要 Hyprland 配置,先备份。
mkdir -p ~/backup-before-hyde
cp -a ~/.config/hypr ~/backup-before-hyde/ 2>/dev/null || true
cp -a ~/.config/waybar ~/backup-before-hyde/ 2>/dev/null || true
cp -a ~/.config/rofi ~/backup-before-hyde/ 2>/dev/null || true
HyDE 的快捷键需要自己记一遍。常见绑定里,`SUPER+ALT+Right` 是下一张壁纸,`SUPER+ALT+Left` 是上一张壁纸,`SUPER+ALT+Up/Down` 切 Waybar layout,`SUPER+SHIFT+R` 打开 Wallbash 模式选择,`SUPER+ALT+G` 是 game mode。实际按键以你安装后的配置为准。
| 功能 | 快捷键 | 用途 | 出问题时看哪里 |
|---|---|---|---|
| 下一张壁纸 | SUPER + ALT + Right | 检查壁纸和 Wallbash 是否联动 | 壁纸目录、HyDE 脚本日志 |
| 上一张壁纸 | SUPER + ALT + Left | 回退到上一张壁纸 | 同上 |
| Waybar layout | SUPER + ALT + Up/Down | 切换顶部栏布局 | ~/.config/waybar/config.jsonc |
| Wallbash | SUPER + SHIFT + R | 选择基于壁纸的配色模式 | Wallbash 配置和缓存 |
| Game mode | SUPER + ALT + G | 为游戏会话切换行为 | HyDE game mode 脚本 |
Waybar 不是一个单条横栏那么简单。HyDE 主题通常会把左右两侧、居中模块、tray、network、pulseaudio、microphone 分成不同 group。你要改圆角、间距、透明度,先找对应 group,再改 CSS。不要直接全局改 `*`,否则一个角标修好了,另一个模块可能坏。
hyprctl monitors
hyprctl clients
hyprctl activewindow
journalctl --user -b -p warning..alert
游戏启动器和登录框的问题,多半要靠窗口规则。米哈游类启动器、鸣潮、异环这类窗口,经常打开一个内嵌登录窗口,结果被主窗口挡住,或者 Hyprland 把它当普通 tiled 窗口放到奇怪位置。处理方法是先用 `hyprctl clients` 看 class、title、initialTitle,再写只匹配这个登录窗口的规则。
hyprctl clients
nano ~/.config/hypr/userprefs.conf
# 示例,不要照抄 class/title,先用 hyprctl clients 查
windowrule = float,match:title ^(Login)$
windowrule = center,match:title ^(Login)$
windowrule = pin,match:title ^(Login)$
hyprctl reload
Steam 相关窗口规则可以按用途拆开:好友列表、设置、ProtonUp-Qt、Yad/Protontricks 这类工具窗口适合 float,主游戏窗口保持全屏或独占。你加规则时要小,先匹配具体 title,再扩到 class。匹配过宽会让整个启动器都漂起来。
6内核与 NVIDIA
Arch 是滚动更新。内核、Mesa、NVIDIA、Hyprland、Wayland 协议都会变。本文不写具体版本号,因为写了很快就过期。你真正需要的是会查当前版本,会判断驱动模块有没有加载,会从日志里分辨是显示管理器坏、Hyprland 坏,还是 NVIDIA 模块没起来。
先查内核和系统。`uname -r` 是正在运行的内核,不等于磁盘上最新安装的内核。`pacman -Q linux` 查包版本。刚更新完内核但没重启时,两者可能不一致。NVIDIA 模块是按内核构建的,内核跑旧的、模块装新的,就会出问题。
uname -r
pacman -Q linux linux-firmware
pacman -Qs '^linux'
bootctl status 2>/dev/null || true
NVIDIA 有闭源驱动和 open kernel modules。具体选哪个,看显卡代际、发行包说明和你的稳定性。不要同时装一堆相互冲突的包。先查当前装了什么,再决定改。
pacman -Qs nvidia
pacman -Qi nvidia nvidia-utils 2>/dev/null
pacman -Qi nvidia-open nvidia-utils 2>/dev/null
lsmod | grep nvidia
modinfo nvidia 2>/dev/null | head
nvidia-smi
`nvidia-smi` 能跑,不代表 Wayland 一定没问题;但它跑不了,至少说明驱动链有事。再看 `lsmod` 是否有 `nvidia_drm`、`nvidia_modeset`、`nvidia_uvm`。Hyprland 下还要看 modeset。常见检查是读 `/sys/module/nvidia_drm/parameters/modeset`,输出 `Y` 才是启用。
cat /sys/module/nvidia_drm/parameters/modeset 2>/dev/null
journalctl -b -k | grep -i nvidia
journalctl -b -p warning..alert
journalctl --user -b -p warning..alert
HyDE 的 NVIDIA 配置里有几项常见环境变量:`LIBVA_DRIVER_NAME=nvidia`、`__GLX_VENDOR_LIBRARY_NAME=nvidia`、`GBM_BACKEND=nvidia-drm`。它还把硬件光标关掉:`cursor:no_hardware_cursors = true`,这是为了规避卡顿或光标问题。视频硬解可能需要 `libva-nvidia-driver`,并配 `NVD_BACKEND=direct`。这些不是越多越好,改一项测一项。
# ~/.config/hypr/nvidia.conf 示例
env = LIBVA_DRIVER_NAME,nvidia
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
env = GBM_BACKEND,nvidia-drm
cursor:no_hardware_cursors = true
游戏相关还要装 32 位库。Steam 和很多 Windows 游戏需要 multilib。先打开 `/etc/pacman.conf` 里的 `[multilib]`,再同步数据库。不要只装 64 位驱动就以为游戏都能启动。
sudo nano /etc/pacman.conf
sudo pacman -Syu
sudo pacman -S nvidia-utils lib32-nvidia-utils vulkan-icd-loader lib32-vulkan-icd-loader
黑屏时先别慌。按 `Ctrl+Alt+F3` 进 TTY。如果能登录,说明内核大概率起来了,问题在图形层。先看日志,再决定回退包、换内核、禁用某个 Hyprland 配置。保留一个 LTS 内核是很实用的回退方式。
sudo pacman -S linux-lts linux-lts-headers
sudo grub-mkconfig -o /boot/grub/grub.cfg
pacman -Q linux linux-lts
判断标准很简单:升级前游戏和桌面都正常,升级后图形坏,先查本次升级动了哪些包。`/var/log/pacman.log` 会告诉你。不要凭感觉卸驱动。把证据拿出来,再回退。
7Steam 与兼容层
Steam 在 Arch 上一般不难,难的是把问题分清。Steam 客户端能打开,游戏不一定能启动。游戏能启动,登录器不一定能显示。登录器能显示,反作弊不一定让你进服务器。先装 Steam,再装 Proton 管理工具,再逐个游戏记录兼容层。
sudo pacman -S steam steam-native-runtime gamemode mangohud gamescope winetricks
sudo pacman -S vulkan-tools
vulkaninfo --summary
GE-Proton 通常用于社区修补更快的游戏兼容。DW-Proton 是 Dawn Winery 方向的 Proton 构建。Proton-H 或 Hotfix 可以作为某些游戏的临时回退。不要把“最新”当答案。兼容层选择看游戏。一个游戏固定一个能用的版本,记录下来。更新前先确认旧版本还在。
ProtonUp-Qt 是图形化管理兼容层的常用工具。Arch 可以从 AUR 装,也可以用 Flatpak。没有 AUR helper 的人不要为了它先把系统搞复杂,先会手动放目录也行。Steam 的兼容层目录通常在 `~/.steam/root/compatibilitytools.d/`。
mkdir -p ~/.steam/root/compatibilitytools.d
ls ~/.steam/root/compatibilitytools.d
find ~/.steam/root/compatibilitytools.d -maxdepth 2 -type f -name compatibilitytool.vdf
每个 Steam 游戏都有 appid。它的 Proton 前缀通常在 `~/.steam/steam/steamapps/compatdata/APPID/`。这个目录相当于该游戏的 Windows C 盘和注册表。DLL、字体、VC 运行库、启动器缓存都在里面。前缀坏了可以删,但删之前要确认 appid,最好先改名备份。
APPID=123456
cd ~/.steam/steam/steamapps/compatdata
mv "$APPID" "${APPID}.bak.$(date +%Y%m%d-%H%M)"
steam
Protontricks 用来给某个前缀装运行库或改 winecfg。先用 GUI 选游戏更安全,确认 appid 后再命令行。不要把网上看到的 DLL 覆盖命令直接用到所有游戏。一个前缀一个实验。
protontricks --gui
protontricks -l
protontricks APPID winecfg
Gamescope 可以隔离分辨率和全屏行为,MangoHud 可以看帧率、GPU、CPU、frametime。排障时先开 MangoHud。能看到 overlay,说明渲染路径至少跑起来了。卡在启动器前,MangoHud 可能看不到,这时看 Steam 日志和 Proton log。
MANGOHUD=1 %command%
gamemoderun %command%
gamescope -W 1920 -H 1080 -f -- %command%
PROTON_LOG=1 %command%
`PROTON_LOG=1` 会在 home 目录生成 `steam-APPID.log`。日志很长,不要整份乱发。先搜 `err:`、`wine:`、`dxvk`、`vkd3d`、`fsync`、`esync`、`ntdll`。如果日志停在启动器,问题和游戏本体不同;如果进游戏后崩,才看图形 API、显存、驱动和游戏设置。
8游戏记录矩阵
游戏测试要写矩阵。原因很简单:你不可能记住每个游戏用了哪个 Proton、加了什么启动参数、登录框怎么处理、哪天还能进。矩阵不是装饰,它是回退路线。每次改兼容层前先复制旧记录。
| 游戏 | 建议兼容层 | 启动方式 | 登录框问题 | 回退策略 | 排障入口 |
|---|---|---|---|---|---|
| 米哈游启动器类 | GE-Proton 起步 | Steam 非 Steam 游戏或独立启动器 | 登录窗口可能被主窗口遮住 | 固定旧 GE-Proton,备份前缀 | hyprctl clients、PROTON_LOG |
| 鸣潮 | 最新可用 GE-Proton | 启动器进入游戏 | 注意二维码、网页登录、焦点抢占 | 回退上一可用 GE-Proton | 启动器日志、Steam log、窗口规则 |
| 异环 | DW-Proton | 按启动器或 Steam 添加入口 | 登录层和游戏层分开记录 | 保留 DW-Proton 旧包 | compatdata、winecfg、hyprctl |
| 最后生还者 2 | Proton-H / Hotfix | Steam 原生库 | 通常不是登录框,更多看图形和缓存 | 切回 Hotfix 或官方 Proton | MangoHud、shader cache、vkd3d 日志 |
米哈游类游戏先把启动器当一个程序,把游戏本体当另一个程序。启动器问题包括登录框、网页控件、二维码、更新器、下载目录权限。游戏本体问题包括 DXVK/VKD3D、输入法、全屏、手柄、崩溃。不要看到一个黑屏就说 Proton 不行。先问:黑屏的是启动器,还是游戏窗口?
鸣潮这类游戏更新频繁,兼容层选择很容易随补丁变化。你要记录“今天能进到哪里”:能打开启动器,能登录,能进服务器,能进战斗,还是只到反作弊。每个阶段的失败原因不同。只写“能玩/不能玩”没用。
异环如果你使用 DW-Proton,就把 DW-Proton 放在单独目录,别和 GE-Proton 混命名。Steam 下拉列表里名字相似时很容易选错。最好把目录名保留上游原名,然后在矩阵里写清日期。
最后生还者 2 这类大型单机更容易遇到 shader 编译、显存、VKD3D、图形选项问题。先降画质、关帧生成、关覆盖层,只保留 MangoHud。能稳定进菜单后,再一项项加回去。别一开始就把 Gamescope、MangoHud、gamemode、录屏、输入法、手柄映射全开。
mkdir -p ~/games-linux-notes
nano ~/games-linux-notes/proton-matrix.md
记录模板可以很朴素:日期、系统更新状态、内核、驱动查询输出、Steam appid、兼容层、启动参数、是否能登录、是否能进游戏、失败日志路径、回退方案。每次测试只改一个变量。今天换 Proton,其他都别动;明天改窗口规则,Proton 先保持不变。这样你才知道是哪一步起作用。
date
uname -r
pacman -Qs nvidia
APPID=123456
ls ~/.steam/steam/steamapps/compatdata/$APPID
PROTON_LOG=1 %command%
9反作弊
反作弊要单独说,因为这里最容易产生误会。Proton 支持 Easy Anti-Cheat 和 BattlEye 的运行路径,但具体游戏必须由开发商启用并发布对应配置。也就是说,小蓝熊和战眼不是“装了 Proton 就自动支持 Linux”。一个游戏能进启动器,不代表能进带反作弊的联机服务器。
判断时分三层。第一层,游戏进程能不能启动。第二层,反作弊组件能不能初始化。第三层,服务器是否允许你进入匹配或联机。很多帖子只说“能进游戏”,但没有说能不能匹配。你自己记录时必须写清。
date
echo "Game: GAME_NAME"
echo "AppID: APPID"
echo "Proton: PROTON_NAME"
echo "Can launch:"
echo "Can login:"
echo "Can matchmake:"
echo "Error message:"
ls ~/steam-APPID.log 2>/dev/null
Steam 页面、开发商公告、ProtonDB、Steam Deck Verified 都可以参考,但最终以你当天测试为准。ProtonDB 的报告也要看日期、发行版、显卡、驱动、Proton 版本。半年以前的“可玩”对滚动系统未必有效;昨天的“不可玩”也可能只是某个用户前缀坏了。
遇到反作弊报错,不要先尝试奇怪的绕过方法。不要替换来路不明的 DLL,不要关系统安全功能去赌。反作弊误判会影响账号。正确做法是查官方是否支持 Linux/Proton,确认 Steam 是否下载了对应运行时,删单个游戏前缀重建,换官方 Proton 或该游戏社区确认过的 GE-Proton。仍然失败,就记录失败点,别硬冲。
有些单机或弱联网游戏使用反作弊只是保护本体启动,有些竞技游戏会在匹配时做更严格的检查。你要把“能打开主菜单”和“能进多人模式”分开写。对于小白来说,这个区分能少走很多弯路。
10维护与回滚
Arch 的维护不是每天盲目 `pacman -Syu`。你需要一个节奏:更新前看公告和快照,更新后看日志和关键程序,出问题先回退最近一次变化。桌面游戏机尤其要保守。你不想在晚上准备玩游戏时,顺手更新出一个黑屏。
Btrfs 用户可以用 Snapper 或 Timeshift。Snapper 更偏命令行和子卷,Timeshift 图形化更直观。选一个就行,不要两个一起乱管同一套快照。第一次配置后,必须做一次恢复演练:至少确认能列出快照,知道快照在哪里,知道 live 环境怎么挂载。
sudo pacman -S snapper
sudo snapper -c root create-config /
sudo snapper -c root create --description "before big update"
sudo snapper -c root list
更新前手动建快照。更新后重启,检查桌面、网络、声音、Steam、一个轻量游戏、一个 Proton 游戏。全部正常,再清缓存。不要刚更新完就立刻删旧包。旧包是你回退的材料。
sudo snapper -c root create --description "before pacman -Syu"
sudo pacman -Syu
reboot
journalctl -b -p warning..alert
journalctl --user -b -p warning..alert
grep -i upgraded /var/log/pacman.log | tail -50
包回退可以用缓存,也可以用 Arch Linux Archive。新手先看本地缓存。`/var/cache/pacman/pkg` 里如果还有旧包,可以用 `pacman -U` 装回去。回退 NVIDIA 时要注意内核、驱动、utils、lib32 包一致,不能只退一半。
ls /var/cache/pacman/pkg | grep nvidia
sudo pacman -U /var/cache/pacman/pkg/PACKAGE_NAME.pkg.tar.zst
Steam 前缀清理要按 appid 做。先改名备份,再让 Steam 重建。不要删 `steamapps/common`,那是游戏本体;不要删整个 `compatdata`,那会影响所有游戏。Shader cache 也可以清,但先记录你清了什么。
APPID=123456
cd ~/.steam/steam/steamapps/compatdata
mv "$APPID" "${APPID}.broken.$(date +%Y%m%d-%H%M)"
steam
最后,给自己留一份维护清单。每周或每次大更新前看一遍:有快照吗,Arch 首页有没有公告,NVIDIA 和内核是不是一起更新,Hyprland 是否有破坏性变更,Steam 游戏今晚要不要先别动。折腾可以很开心,但前提是你知道怎么撤。
11Miku 主题包
这一节只讲主题安装。它不是机器状态页,也不记录私人配置。你需要做三件事:备份旧主题,解压 `mikufans`,再用 HyDE 切换过去。
主题包解压后会得到 `mikufans/` 和 `INSTALL.md`。`mikufans/` 要放进 `~/.config/hyde/themes/`。主题包含壁纸、logo、Hyprland、Waybar、Rofi、Kitty 和 Kvantum 外观资源,主色是 Miku teal `#39C5BB`,辅色是 cyan 和 pink。
主题结构
| 文件或目录 | 用途 | 安装后检查 |
|---|---|---|
| wallpapers/ | Miku 和 wafu/soft 系列壁纸 | 主题切换后检查壁纸轮换和 Wallbash 取色 |
| logo/miku.png | 主题 logo 和展示素材 | 检查启动器、fastfetch 或主题选择器是否能读取 |
| hypr.theme | Hyprland 边框、圆角、阴影、blur 和光标主题 | 执行 `hyprctl reload` 后看窗口边框和模糊 |
| waybar.theme | Waybar 透明栏、模块 pill、active/hover 色 | 重启 Waybar 后检查顶部栏可读性 |
| kitty.theme | 透明终端、Miku 调色板、标签和边框色 | 打开新终端确认前景/背景和选区颜色 |
| rofi.theme | 启动器背景、边框、选中项和强调色 | 打开 Rofi,确认选中项和文字对比度 |
| kvantum/ | Qt/Kvantum 控件外观 | 打开 Qt 程序检查菜单、按钮和滚动条 |
安装流程
- 备份 `~/.config/hyde/themes`,至少备份你自己改过的主题。
- 把压缩包解到 `~/.config/hyde/themes/`,确认里面出现 `mikufans/`。
- 用 HyDE 主题选择器或 `hydectl` 切到 `mikufans`。
- 重载 Hyprland,再重启 Waybar、Rofi、Kitty。Qt 程序没变化时再检查 Kvantum。
- 文字看不清时,先调 Waybar/Rofi/Kitty 透明度,不要一上来全局改 blur。
回退原则
主题只改外观。要回退,先恢复备份的主题目录,再切回原主题。黑屏、游戏打不开、Steam 前缀损坏通常要按桌面、驱动、Steam、单个游戏分层排查,不要只改主题。
mkdir -p ~/.config/hyde/themes ~/.config/hyde/backups
cp -a ~/.config/hyde/themes ~/.config/hyde/backups/themes-before-mikufans
tar -xzf hyde-mikufans-theme-20260708.tar.gz -C ~/.config/hyde/themes
hydectl theme set mikufans
hyprctl reload