Arch Linux 运行原神
DWProton 直接通过自身的 proton 脚本启动游戏。普通入口支持游戏和官方启动器;补充工具入口先运行 gi-toolkit-ng.exe,再由它启动游戏并加载 hutao_minhook_ng.dll。两者共用同一个 Wine prefix。
环境与目录
本文记录时的主要版本:
| 组件 | 本机版本或设置 |
|---|---|
| 桌面 | KDE Plasma 6.8,Wayland 会话 |
| GPU | NVIDIA GeForce RTX 4050 Laptop GPU |
| NVIDIA 驱动 | 615.78.08-1 |
| 游戏所在文件系统 | XFS |
| DWProton | dwproton-11.0-14 |
| MangoHud | 0.8.4-1 |
| Rust / Cargo | rustup stable,1.99.1 |
| cargo-xwin | AUR cargo-xwin 0.23.1-1,通过 yay 安装 |
| Clang / LLVM | 23.1.3-2 |
| Windows 编译目标 | x86_64-pc-windows-msvc |
最终目录布局:
~/.local/opt/dwproton-11.0-14/ # DWProton 解压目录
~/.local/bin/genshin-bilibili # 普通启动脚本
~/.local/bin/genshin-bilibili-hutao # 补充工具启动脚本
~/.config/MangoHud/MangoHud.conf # MangoHud 配置
~/Games/
├── genshin-bilibili/
│ ├── launcher.exe
│ └── games/Genshin Impact Game/YuanShen.exe
├── genshin-bilibili-hutao/
│ ├── gi-toolkit-ng.exe
│ ├── hutao_minhook_ng.dll
│ ├── config.ini
│ └── offset.ini # 运行后生成的偏移缓存
└── compatdata/genshin-bilibili-direct/
├── pfx/ # 实际的 Wine prefix
└── steam-client/ # 提供给 Proton 的客户端路径
~/hutao-minhook-ng/ # DLL 源码
~/gi-toolkit-ng/ # EXE 源码
~/.cache/gi-windows-build.XXXXXX/ # 每次独立的构建目录以下默认 NVIDIA 驱动和 Vulkan 已经可用。游戏文件和 prefix 都放在 Linux 文件系统中。
复制游戏到 XFS
安装复制、下载和监测工具。DWProton 的启动脚本还需要 Python:
sudo pacman -Syu --needed rsync curl python mangohud
mkdir -p "$HOME/Games/genshin-bilibili"
findmnt -T "$HOME/Games" -o TARGET,SOURCE,FSTYPE
df -h "$HOME/Games"确认目标文件系统是 XFS,剩余空间足够,然后复制整个 B 服安装目录:
rsync -rt --partial --info=progress2 \
'/run/media/yoimiya/新加卷/Program Files/Genshin Impact bilibili/' \
"$HOME/Games/genshin-bilibili/"源目录末尾的 / 表示复制目录里面的内容,因此复制完成后 launcher.exe 直接位于 ~/Games/genshin-bilibili/ 下。
-r 递归复制,-t 保留修改时间,--partial 保留未完成的文件,--info=progress2 显示整体进度。同一条命令可以重跑,大小和修改时间一致的文件会被跳过;目标目录中额外生成的文件会保留。
检查两个入口:
ls -l "$HOME/Games/genshin-bilibili/launcher.exe"
ls -l "$HOME/Games/genshin-bilibili/games/Genshin Impact Game/YuanShen.exe"下载并解压 DWProton
这里固定使用本机验证过的 11.0-14,下载官方镜像仓库的 x86_64 压缩包:
mkdir -p "$HOME/Downloads" "$HOME/.local/opt/dwproton-11.0-14"
curl -fL \
'https://github.com/dawn-winery/dwproton-mirror/releases/download/dwproton-11.0-14/dwproton-11.0-14-x86_64.tar.xz' \
-o "$HOME/Downloads/dwproton-11.0-14-x86_64.tar.xz"
tar -xJf "$HOME/Downloads/dwproton-11.0-14-x86_64.tar.xz" \
-C "$HOME/.local/opt/dwproton-11.0-14" \
--strip-components=1
test -x "$HOME/.local/opt/dwproton-11.0-14/proton"压缩包本身带有一层 dwproton-11.0-14-x86_64/,所以解压时使用 --strip-components=1。最后的入口应当是 ~/.local/opt/dwproton-11.0-14/proton。
DWProton 包含配套的 Wine、DXVK 和游戏修复。这里调用包内的 proton,由它完成 prefix 初始化和运行环境配置。
配置 MangoHud
写入当前使用的配置:
mkdir -p "$HOME/.config/MangoHud"
cat > "$HOME/.config/MangoHud/MangoHud.conf" <<'MANGOHUD_CONF'
# Default overlay for games launched with MANGOHUD=1.
position=top-left
font_size=22
background_alpha=0.4
# Frame rate and frame time.
fps
frametime
frame_timing
# CPU/GPU load, temperatures, and GPU power.
cpu_stats
cpu_temp
gpu_stats
gpu_temp
gpu_power
# Memory usage and rendering backend.
vram
ram
engine_version
# Right Shift + F12: show/hide. Left Shift + F4: reload config.
toggle_hud=Shift_R+F12
reload_cfg=Shift_L+F4
MANGOHUD_CONF覆盖层显示帧率、帧时间曲线、CPU/GPU 使用率和温度、GPU 功耗、内存与显存占用。快捷键如下:
| 快捷键 | 功能 |
|---|---|
| 右 Shift + F12 | 显示或隐藏覆盖层 |
| 左 Shift + F4 | 重新载入配置 |
后面的脚本默认导出 MANGOHUD=1,通过 Vulkan 层启用 MangoHud。需要临时关闭时,在启动命令前设置 MANGOHUD=0。
普通启动脚本
创建 ~/.local/bin/genshin-bilibili。这份脚本默认启动游戏,也可以选择官方启动器;显示后端默认为 XWayland,通过 PROTON_ENABLE_WAYLAND=1 可以切换到原生 Wayland。游戏模式另外提供可选 HDR 开关。
完整脚本
mkdir -p "$HOME/.local/bin"
cat > "$HOME/.local/bin/genshin-bilibili" <<'GENSHIN_SCRIPT'
#!/usr/bin/env bash
set -euo pipefail
dwproton_dir="${DWPROTON_DIR:-$HOME/.local/opt/dwproton-11.0-14}"
game_exe="$HOME/Games/genshin-bilibili/games/Genshin Impact Game/YuanShen.exe"
launcher_exe="$HOME/Games/genshin-bilibili/launcher.exe"
enable_wayland="${PROTON_ENABLE_WAYLAND:-0}"
# Enable with GENSHIN_HDR=1, or change the default below to 1.
# This shell-local setting applies only when launching the game directly.
enable_hdr="${GENSHIN_HDR:-0}"
compat_dir="$HOME/Games/compatdata/genshin-bilibili-direct"
log_dir="${XDG_STATE_HOME:-$HOME/.local/state}/dwproton"
launch_exe="$game_exe"
launch_mode=game
case "${1:-}" in
--launcher)
launch_exe="$launcher_exe"
launch_mode=launcher
shift
;;
--game)
shift
;;
-h|--help)
printf 'Usage: %s [--game|--launcher] [arguments...]\n' "${0##*/}"
printf 'Defaults to launching YuanShen.exe. Remaining arguments go to the selected executable.\n'
printf 'GENSHIN_HDR=1 enables game HDR and native Wayland in game mode only.\n'
printf 'PROTON_ENABLE_WAYLAND=1 enables native Wayland for game or launcher; defaults to 0 (XWayland).\n'
exit 0
;;
--)
shift
;;
esac
if [[ "$launch_mode" == game && "$enable_hdr" != 0 && "$enable_hdr" != 1 ]]; then
printf 'GENSHIN_HDR must be 0 or 1.\n' >&2
exit 2
fi
# Resolve the backend once. Game HDR takes precedence over the display switch.
if [[ "$enable_wayland" != 0 && "$enable_wayland" != 1 ]]; then
printf 'PROTON_ENABLE_WAYLAND must be 0 or 1.\n' >&2
exit 2
fi
if [[ "$launch_mode" == game && "$enable_hdr" == 1 ]]; then
enable_wayland=1
fi
case "$enable_wayland" in
0)
graphics_driver=x11
;;
1)
graphics_driver=wayland
if [[ -z "${WAYLAND_DISPLAY:-}" ]]; then
printf 'Native Wayland requires WAYLAND_DISPLAY in the current session.\n' >&2
exit 2
fi
;;
esac
if [[ ! -x "$dwproton_dir/proton" ]]; then
printf 'DWProton launcher not found: %s\n' "$dwproton_dir/proton" >&2
exit 1
fi
if [[ ! -f "$launch_exe" ]]; then
printf 'Executable not found: %s\n' "$launch_exe" >&2
exit 1
fi
mkdir -p "$compat_dir/steam-client" "$log_dir"
cd "${launch_exe%/*}"
# Proton creates the actual Wine prefix under "$compat_dir/pfx".
export STEAM_COMPAT_DATA_PATH="$compat_dir"
# Proton expects a client path even when no Steam client is installed.
export STEAM_COMPAT_CLIENT_INSTALL_PATH="$compat_dir/steam-client"
export STEAM_COMPAT_INSTALL_PATH="${launch_exe%/*}"
export SteamAppId=0
export SteamGameId=0
# These select DWProton's bundled Genshin fixes and steam.exe compatibility stub.
# Setting UMU_ID does not invoke or require umu-launcher.
export UMU_ID=umu-genshin
export STORE=none
export UMU_USE_STEAM=1
# Use Wine's new WoW64 mode to avoid the traditional 32-bit Unix Wine loader.
export PROTON_USE_WOW64=1
# Export one consistent backend and clear the alternate Proton switch.
export PROTON_ENABLE_WAYLAND="$enable_wayland"
unset PROTON_USE_WAYLAND
export WINE_GRAPHICS_DRIVER="$graphics_driver"
# Disable the optional automatic FSR4 DLL download for this game.
export PROTON_FSR4_UPGRADE=0
# Request NVIDIA PRIME render offload for this game.
export __NV_PRIME_RENDER_OFFLOAD=1
export __GLX_VENDOR_LIBRARY_NAME=nvidia
export MANGOHUD="${MANGOHUD:-1}"
export PROTON_LOG="${PROTON_LOG:-1}"
export PROTON_LOG_DIR="$log_dir"
if [[ "$launch_mode" == game ]]; then
# Match hutao-minhook-ng/src/hdr.rs in this game's prefix. Using `run`
# also initializes a fresh prefix before writing the registry value.
PROTON_LOG=0 MANGOHUD=0 "$dwproton_dir/proton" run reg.exe add \
'HKCU\Software\miHoYo\原神' \
/v WINDOWS_HDR_ON_h3132281285 /t REG_DWORD /d "$enable_hdr" /f
if [[ "$enable_hdr" == 1 ]]; then
export DXVK_HDR=1
fi
fi
"$dwproton_dir/proton" waitforexitandrun "$launch_exe" "$@" \
2>&1 | tee "$log_dir/genshin-direct-launch.log"
GENSHIN_SCRIPT
chmod +x "$HOME/.local/bin/genshin-bilibili"
bash -n "$HOME/.local/bin/genshin-bilibili"把下面一行加入 ~/.zshrc,并在当前终端执行一次,以便直接使用命令名:
export PATH="$HOME/.local/bin:$PATH"启动方式
# 默认直接启动 YuanShen.exe
genshin-bilibili
# 显式启动游戏
genshin-bilibili --game
# 启动官方 B 服启动器,用于更新等操作
genshin-bilibili --launcher
# 日常游玩时关闭 Proton 详细日志
PROTON_LOG=0 genshin-bilibili --game
# 临时关闭 MangoHud
MANGOHUD=0 genshin-bilibili --game关键环境变量
| 设置 | 作用 |
|---|---|
STEAM_COMPAT_DATA_PATH | 指向 compatdata 目录,实际 prefix 位于它下面的 pfx/ |
STEAM_COMPAT_CLIENT_INSTALL_PATH | 给 Proton 提供客户端路径;本例使用独立的 steam-client/ 目录 |
SteamAppId=0、SteamGameId=0 | 为直接启动提供固定标识,Proton 日志相应命名为 steam-0.log |
UMU_ID=umu-genshin | 选择 DWProton 内置的原神修复 |
UMU_USE_STEAM=1 | 使用 DWProton 包内的 steam.exe 兼容入口 |
PROTON_USE_WOW64=1 | 使用 Wine 新 WoW64 模式,避免依赖传统的 32 位 Unix Wine 加载器 |
PROTON_ENABLE_WAYLAND=0/1 | 默认为 0(XWayland),设为 1 时选择原生 Wayland;脚本据此统一设置 WINE_GRAPHICS_DRIVER |
PROTON_FSR4_UPGRADE=0 | 关闭这个游戏不需要的 FSR4 DLL 自动下载 |
__NV_PRIME_RENDER_OFFLOAD=1 | 请求 NVIDIA PRIME 渲染卸载 |
__GLX_VENDOR_LIBRARY_NAME=nvidia | 为 GLX 选择 NVIDIA 实现 |
MANGOHUD=1 | 启用 MangoHud |
PROTON_LOG=1 | 输出 Proton 详细日志,排查完成后可以设为 0 |
这些 UMU_* 变量用于选择 DWProton 的兼容行为,脚本本身没有调用 umu-run。其中 steam.exe 是 DWProton 提供的兼容程序,启动过程不需要安装 Steam 客户端。
切换 Wayland / XWayland
本机测试中,Wine 原生 Wayland 出现过鼠标光标显示异常,官方启动器也无法正常打开,因此两个脚本默认使用 XWayland。后续关注 Wine / DWProton 的更新时,可以通过同一个环境变量切换后端,分别测试游戏和启动器:
# 使用相同的 SDR 设置对比普通游戏入口
GENSHIN_HDR=0 PROTON_ENABLE_WAYLAND=0 genshin-bilibili --game
GENSHIN_HDR=0 PROTON_ENABLE_WAYLAND=1 genshin-bilibili --game
# 分别测试官方启动器
PROTON_ENABLE_WAYLAND=0 genshin-bilibili --launcher
PROTON_ENABLE_WAYLAND=1 genshin-bilibili --launcherPROTON_ENABLE_WAYLAND 接受 0 或 1。脚本先确定最终后端,再一次性导出这个变量和对应的 WINE_GRAPHICS_DRIVER=x11/wayland;继承的 PROTON_USE_WAYLAND 会被清除,避免两个开关互相影响。选择原生 Wayland 时,当前会话需要提供 WAYLAND_DISPLAY,缺少时脚本会直接报错。
对比时先退出上一轮游戏,保持 DWProton 版本、游戏画面设置和 HDR 状态一致。补充工具入口的切换命令见后文。
可选 HDR
需要尝试 HDR 时,先自行在 KDE 显示设置中开启 HDR,再执行:
GENSHIN_HDR=1 genshin-bilibili --game游戏模式会在同一个 prefix 中设置以下注册表值,并启用 DXVK_HDR=1。GENSHIN_HDR=1 的游戏模式优先选择原生 Wayland,即使同时指定了 PROTON_ENABLE_WAYLAND=0:
HKCU\Software\miHoYo\原神
WINDOWS_HDR_ON_h3132281285 = REG_DWORD 1默认游戏模式会把这个注册表值写回 0。--launcher 根据 PROTON_ENABLE_WAYLAND 选择显示后端,并且不执行上述注册表修改;GENSHIN_HDR 对启动器模式不生效。KDE 自身的 HDR 开关由用户管理。
当前 DWProton 基于的 CachyOS 上游已将旧的 PROTON_ENABLE_HDR 替换为 DXVK_HDR。上游说明
配置 Rust 交叉编译环境
两个补充项目分别生成:
| 项目 | 产物 | 记录时的提交 |
|---|---|---|
hutao-minhook-ng | hutao_minhook_ng.dll | e470ec5 |
gi-toolkit-ng | gi-toolkit-ng.exe | 5aa22ad |
DLL 通过 cc crate 编译 src/hutao_seh_stub.c,里面使用 Windows 的 __try / __except 结构化异常处理。两个项目统一使用 x86_64-pc-windows-msvc 目标和 clang-cl。
安装工具
使用 pacman 安装 rustup 和 Clang:
sudo pacman -S --needed rustup clang
rustup set profile minimal
rustup default stable
rustup target add x86_64-pc-windows-msvccargo-xwin 则通过 yay 安装 AUR 包,由 pacman 管理 /usr/bin/cargo-xwin:
yay -S cargo-xwin本机需要的工具分工如下:
| 工具 | 用途 |
|---|---|
| rustup | 安装 Rust/Cargo 和匹配的 Windows Rust 标准库 |
| clang | 提供 clang-cl,编译 DLL 中的 C 代码 |
| llvm | 提供 llvm-lib 等工具;当前 Arch 的 clang 会自动依赖安装 |
Rust 自带的 rust-lld | cargo-xwin 找不到系统 lld-link 时使用的链接器 |
| cargo-xwin | 下载并缓存微软 SDK/CRT,配置头文件、库路径、C 编译器和链接参数 |
Rust 的 Windows 标准库和微软 C 运行库是两套不同组件,分别由 rustup 与 cargo-xwin 准备。cargo-xwin 的工具替代实现
检查环境:
rustc -V
cargo -V
rustup target list --installed
cargo xwin --version
command -v clang-cl llvm-lib
test -x "$(rustc +stable --print target-libdir)/../bin/rust-lld"准备源码
本机已经有 ~/hutao-minhook-ng 和 ~/gi-toolkit-ng。在新机器上可以先克隆:
git clone https://github.com/Rukkhadevata123/hutao-minhook-ng.git "$HOME/hutao-minhook-ng"
git clone https://github.com/Rukkhadevata123/gi-toolkit-ng.git "$HOME/gi-toolkit-ng"下面的编译命令保留两个仓库已有的 Cargo.lock,使用 --locked 固定依赖解析结果。
干净构建 EXE 和 DLL
整段可以直接在 zsh 中执行,实际构建在独立 Bash 子进程中进行。每次创建全新的 target 目录,中间产物放在 ~/.cache,最终产物集中到本次构建的 dist/:
bash <<'BUILD'
set -euo pipefail
mkdir -p "$HOME/.cache"
build_root="$(mktemp -d "$HOME/.cache/gi-windows-build.XXXXXX")"
export XWIN_ARCH=x86_64
export XWIN_CROSS_COMPILER=clang-cl
export RUSTFLAGS="-C target-feature=+crt-static"
for project_name in hutao-minhook-ng gi-toolkit-ng; do
cargo +stable xwin build \
--manifest-path "$HOME/$project_name/Cargo.toml" \
--target x86_64-pc-windows-msvc \
--target-dir "$build_root/$project_name" \
--release --locked
done
out_dir="$build_root/dist"
mkdir -p "$out_dir"
cp "$build_root/hutao-minhook-ng/x86_64-pc-windows-msvc/release/hutao_minhook_ng.dll" "$out_dir/"
cp "$build_root/gi-toolkit-ng/x86_64-pc-windows-msvc/release/gi-toolkit-ng.exe" "$out_dir/"
cp "$HOME/hutao-minhook-ng/config.ini" "$out_dir/"
file "$out_dir/gi-toolkit-ng.exe" "$out_dir/hutao_minhook_ng.dll"
printf '\n输出目录:%s\n' "$out_dir"
BUILDXWIN_ARCH=x86_64 让 cargo-xwin 只准备需要的架构。+crt-static 请求静态链接 C 运行库,cargo-xwin 会补充对应的 UCRT 链接参数。首次构建需要联网下载微软 SDK/CRT 和尚未缓存的 Rust 依赖。
本次成功构建的输出目录是:
/home/yoimiya/.cache/gi-windows-build.okMtj6/distfile 确认两个产物均为 PE32+、x86-64,分别是 GUI EXE 和 DLL。导入表中没有 vcruntime140.dll、msvcp140.dll 或 ucrtbase.dll,符合本次静态 CRT 配置的预期。
部署补充工具
把本次构建打印出的 dist 复制到游戏目录旁边。下面使用本次实际产物路径,重新构建后应替换 source_dir:
source_dir="$HOME/.cache/gi-windows-build.okMtj6/dist"
toolkit_dir="$HOME/Games/genshin-bilibili-hutao"
mkdir -p "$toolkit_dir"
cp -a "$source_dir/." "$toolkit_dir/"这是首次部署的复制方式。后续只更新 EXE/DLL 时,单独复制这两个文件,可以保留已经修改的 config.ini 和运行时生成的 offset.ini。
config.ini
gi-toolkit-ng.exe 从自身所在目录读取 config.ini,并在同目录查找 hutao_minhook_ng.dll。因此三个文件需要放在一起。
游戏路径要写成 Wine 能识别的 Windows 路径。本机 prefix 的 dosdevices/z: 指向 /,所以 Linux 中的 /home/yoimiya/... 对应 Z:\home\yoimiya\...:
readlink "$HOME/Games/compatdata/genshin-bilibili-direct/pfx/dosdevices/z:"当前使用的配置如下。这个代码块会写入补充工具目录中的配置文件:
cat > "$HOME/Games/genshin-bilibili-hutao/config.ini" <<'HUTAO_CONF'
[Settings]
GamePath=Z:\home\yoimiya\Games\genshin-bilibili\games\Genshin Impact Game\YuanShen.exe
EnableFPSUnlock=1
TargetFPS=120
EnableFOVModify=1
TargetFOV=60.0
; 1 = set the current user's Genshin Impact HDR registry value on each DLL injection.
EnableHDR=0
UseTouchScreen=0
; 1 = only register enabled features at startup.
DisableHotReload=0
; 1 = log hook setup and runtime debug events.
DebugMode=0
; Temporary probe hooks. Requires DebugMode=1.
ProbeMode=0
[Visuals]
RemoveFog=0
RemoveBlur=0
RemoveDiveMosaic=0
HideQuestBanner=0
HideUID=0
DisableEventCameraMove=0
DisableShowDamageText=0
[Features]
RedirectCrafting=1
RemoveTeamAnimation=1
[Hotkeys]
; HOME
ToggleKey=36
; Semicolon
CraftKey=186
HUTAO_CONF其中 TargetFPS=120、TargetFOV=60.0 是本机当前设置。EnableHDR=0 表示 DLL 不主动写入启用 HDR 的注册表值;补充工具启动脚本也不处理 HDR。按 Home 可以重新载入配置。
offset.ini 是运行时按游戏版本保存的偏移缓存,不需要从构建目录手动提供。
补充工具启动脚本
创建 ~/.local/bin/genshin-bilibili-hutao。它只负责启动 gi-toolkit-ng.exe,显示后端同样通过 PROTON_ENABLE_WAYLAND=0/1 选择,默认使用 XWayland。
完整脚本
mkdir -p "$HOME/.local/bin"
cat > "$HOME/.local/bin/genshin-bilibili-hutao" <<'HUTAO_SCRIPT'
#!/usr/bin/env bash
set -euo pipefail
dwproton_dir="${DWPROTON_DIR:-$HOME/.local/opt/dwproton-11.0-14}"
toolkit_dir="$HOME/Games/genshin-bilibili-hutao"
toolkit_exe="$toolkit_dir/gi-toolkit-ng.exe"
game_dir="$HOME/Games/genshin-bilibili/games/Genshin Impact Game"
enable_wayland="${PROTON_ENABLE_WAYLAND:-0}"
compat_dir="$HOME/Games/compatdata/genshin-bilibili-direct"
log_dir="${XDG_STATE_HOME:-$HOME/.local/state}/dwproton/hutao"
case "$enable_wayland" in
0)
graphics_driver=x11
;;
1)
graphics_driver=wayland
if [[ -z "${WAYLAND_DISPLAY:-}" ]]; then
printf 'Native Wayland requires WAYLAND_DISPLAY in the current session.\n' >&2
exit 2
fi
;;
*)
printf 'PROTON_ENABLE_WAYLAND must be 0 or 1.\n' >&2
exit 2
;;
esac
if [[ ! -x "$dwproton_dir/proton" ]]; then
printf 'DWProton launcher not found: %s\n' "$dwproton_dir/proton" >&2
exit 1
fi
for required_file in "$toolkit_exe" "$toolkit_dir/hutao_minhook_ng.dll" "$toolkit_dir/config.ini"; do
if [[ ! -f "$required_file" ]]; then
printf 'Required file not found: %s\n' "$required_file" >&2
exit 1
fi
done
mkdir -p "$compat_dir/steam-client" "$log_dir"
cd "$toolkit_dir"
# Reuse the existing game's Proton prefix.
export STEAM_COMPAT_DATA_PATH="$compat_dir"
export STEAM_COMPAT_CLIENT_INSTALL_PATH="$compat_dir/steam-client"
export STEAM_COMPAT_INSTALL_PATH="$game_dir"
export SteamAppId=0
export SteamGameId=0
# Apply DWProton's Genshin fixes to the toolkit and its child game process.
export UMU_ID=umu-genshin
export STORE=none
export UMU_USE_STEAM=1
export PROTON_USE_WOW64=1
export PROTON_FSR4_UPGRADE=0
# Export one consistent backend and clear the alternate Proton switch.
export PROTON_ENABLE_WAYLAND="$enable_wayland"
unset PROTON_USE_WAYLAND
export WINE_GRAPHICS_DRIVER="$graphics_driver"
export __NV_PRIME_RENDER_OFFLOAD=1
export __GLX_VENDOR_LIBRARY_NAME=nvidia
export MANGOHUD="${MANGOHUD:-1}"
export PROTON_LOG="${PROTON_LOG:-1}"
export PROTON_LOG_DIR="$log_dir"
"$dwproton_dir/proton" waitforexitandrun "$toolkit_exe" "$@" \
2>&1 | tee "$log_dir/genshin-hutao-launch.log"
HUTAO_SCRIPT
chmod +x "$HOME/.local/bin/genshin-bilibili-hutao"
bash -n "$HOME/.local/bin/genshin-bilibili-hutao"运行方式:
genshin-bilibili-hutao
# 显式使用 XWayland
PROTON_ENABLE_WAYLAND=0 genshin-bilibili-hutao
# 使用原生 Wayland,便于对比
PROTON_ENABLE_WAYLAND=1 genshin-bilibili-hutao
# 关闭 Proton 详细日志
PROTON_LOG=0 genshin-bilibili-hutaogi-toolkit-ng.exe 会读取 GamePath,以挂起状态创建游戏进程,加载同目录 DLL,再恢复游戏。它为游戏设置的工作目录是 YuanShen.exe 所在目录。
两个入口共用 ~/Games/compatdata/genshin-bilibili-direct/pfx。切换入口时先退出上一次启动的游戏。官方启动器需要更新游戏时,使用普通脚本的 --launcher。
日志与后续维护
| 内容 | 默认路径 |
|---|---|
| 普通入口的终端输出 | ~/.local/state/dwproton/genshin-direct-launch.log |
| 普通入口的 Proton 日志 | ~/.local/state/dwproton/steam-0.log |
| 补充工具入口的终端输出 | ~/.local/state/dwproton/hutao/genshin-hutao-launch.log |
| 补充工具入口的 Proton 日志 | ~/.local/state/dwproton/hutao/steam-0.log |
| 构建中间文件及 dist | ~/.cache/gi-windows-build.XXXXXX/ |
设置 XDG_STATE_HOME 时,日志根目录会相应移动。两个入口分开保存日志,方便对照;同一入口再次运行时会覆盖对应的本次启动日志。
PROTON_LOG=1 会生成较大的详细日志。本机一次启动曾产生约 44 MiB 的 steam-0.log,日常使用可以在命令前加 PROTON_LOG=0,脚本仍通过 tee 保存终端输出。
DWProton 升级后,可以修改两个脚本的默认版本路径,或者在运行时临时指定:
DWPROTON_DIR="$HOME/.local/opt/另一个版本目录" genshin-bilibili --game补充工具已经复制到 ~/Games/genshin-bilibili-hutao 后,可以按需清理旧的独立构建目录。游戏文件、prefix、补充工具部署目录分别管理;备份时保留补充工具目录中的配置文件和需要的 prefix 数据。