概述
参考文档:
Wine 用平面文本文件模拟 Windows 注册表,键路径组织成与 Windows 相同的树,由
wineserver统一读写每个 prefix(由
WINEPREFIX指定的独立 Windows 环境)有自己的一套注册表,互不干扰文件与根键的对应:
flowchart LR A["WINEPREFIX 目录"] --> B["system.reg"] A --> C["user.reg"] A --> D["userdef.reg"] B -->|"对应"| E["HKEY_LOCAL_MACHINE"] C -->|"对应"| F["HKEY_CURRENT_USER"] D -->|"对应"| G["HKEY_USERS 下默认用户"]
Wine 运行期间不要手改
.reg文件,wineserver退出时会把内存态整体写回,手改会被覆盖,要改就用工具改或退出后改
文件格式
头部一行
WINE REGISTRY Version 2,之后按键路径分段,键内逐行列出值:ini[Software\\Wine\\DllOverrides] # 键路径,反斜杠写成两个 "winemenubuilder"="" # REG_SZ 空字符串 "mscoree"="native,builtin" # REG_SZ 字符串 "Enable"=dword:00000001 # REG_DWORD "Payload"=hex:de,ad,be,ef # REG_BINARY值类型的编码:
REG_SZ:"内容"字符串REG_DWORD:dword:后跟 8 位十六进制REG_BINARY:hex:后跟逗号分隔的字节REG_EXPAND_SZ:hex(2):,含环境变量待展开的字符串REG_MULTI_SZ:hex(7):,多行字符串,行间以00 00分隔
语法与 Windows
.reg导出文件同源,regedit导出的文件可直接导入,但编码与换行要保持导出时的 UTF-16LE 与 CRLF,手写文件建议交给工具导入
修改工具
wine regedit:图形界面,操作与 Windows 的regedit完全一致,支持导出与导入.regwine reg.exe:命令行,脚本友好,配WINEPREFIX可精确操作某个 prefix:console$ WINEPREFIX=~/games/gameX wine reg add "HKCU\\Software\\Wine\\DllOverrides" \ /v mscoree /t REG_SZ /d native,builtin /f $ WINEPREFIX=~/games/gameX wine reg query "HKLM\\Software\\Wine" /s $ WINEPREFIX=~/games/gameX wine reg delete "HKCU\\Some\\Key" /v Name /f $ WINEPREFIX=~/games/gameX wine reg export "HKCU\\Software\\Wine" backup.reg $ WINEPREFIX=~/games/gameX wine reg import backup.reg/v值名、/t类型、/d数据、/f跳过确认、/s递归查询
键名缩写与 Windows 一致:
HKLM即HKEY_LOCAL_MACHINE,HKCU即HKEY_CURRENT_USER,HKU即HKEY_USERS在 Windows 侧做过的修改,把同样的键路径与值在 Wine 里
reg add一遍即可得到同等结果,这是两边对齐的通用方法
常见修改案例
- DLL 覆盖,
HKCU\Software\Wine\DllOverrides:- 值名是要覆盖的 DLL 名,值为加载顺序,如
native,builtin表示优先用 Windows 原生 DLL - 等价于
winecfg中 Libraries 页的手动设置,但可脚本化地批量下发到多个 prefix
- 值名是要覆盖的 DLL 名,值为加载顺序,如
- 按程序伪装 Windows 版本,
HKCU\Software\Wine\AppDefaults\game.exe\Version:- 字符串值
Windows设为win10,只影响该程序,对应winecfg的 per-application 设置
- 字符串值
- 中文界面乱码,
HKLM\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes:- 把
MS Shell Dlg与MS Shell Dlg 2指向Microsoft YaHei,解决字体缺失导致的方块字
- 把
- 窗口与虚拟桌面:
HKCU\Software\Wine\X11 Driver里Decorated=N可去掉窗口装饰HKCU\Software\Wine\Explorer\Desktops定义桌面尺寸,再由Explorer的Desktop值启用,把窗口程序关进虚拟桌面
- 系统环境变量,
HKLM\System\CurrentControlSet\Control\Session Manager\Environment:改PATH等,对应 Windows 的系统属性设置 - 改前先备份:
reg export整棵关心的子树,或直接cp -a整个 prefix 目录,注册表改坏是 Wine 排障的高频原因
相关阅读
- 在 Linux 上玩游戏:Proton 如何为每个游戏管理独立 prefix
- Linux 显示协议与图形栈:Wine 应用为何常运行在 XWayland 上