Wine 配置笔记
记录一下 Wine 的一些配置。OS 是 ArchLinux 。
用单独的用户运行
因为用 Wine 运行的程序有不少都不会很可信,所以配置了用单独的用户运行 Wine,这样至少可以保护家目录。直接切换 TTY、登录用户然后起 wm 是最直接的途径;当然也可以在当前用户的 X server 里用另一个用户运行 Wine。关于配置方法,ArchWiki 上有比较详细的说明。
PipeWire Pulse
如果是用上述两种方法的后者,则需要配置音频使得多个用户可以共享音频 daemon。ArchWiki 给了 PulseAudio 的配置示例,而我在用 PipeWire,关于音频的配置稍微不太一样:
创建
.config/pipewire/pipewire-pulse.conf.d/wine-pulse.conf
,内容如下:pulse.properties = { server.address = [ "unix:native" "unix:/tmp/pulse-socket" ] } context.exec = [ { path = "/bin/chmod" args = "go+w /tmp/pulse-socket" } ]
在
sudo -u wineuser env ...
的命令里加入PULSE_SERVER="unix:/tmp/pulse-socket"
即可。
字体
Wine 下运行的程序里出现字体问题是挺常见的事情。
CJK 文字乱码
一般来说 CJK 文字完全变成乱码(窗口标题或者程序界面里)的原因都是 locale 没有设置好。在用 wine
运行程序时正确设置 LANG
环境变量即可。具体设置什么值要看程序本身,比如很多繁体汉化组汉化的旧游戏要用 LANG=zh_TW
。
P.S. 系统里要有和设置的值对应的 locale。
字体看起来很丑
ArchWiki 的 Wine 页面有一些字体方面的配置介绍。下面是我在运行一些老游戏时测试出的另外一些 tweaks:
禁用抗锯齿
对 RPG Maker 制作的游戏,需要用 Fontconfig 禁用抗锯齿,不然字体反而会变得很难读。
创建一个 Fontconfig 配置文件,可以放在
$WINEPREFIX/fonts/conf/fonts.conf
。注意修改cachedir
的值:xml<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"> <!-- /etc/fonts/fonts.conf file to configure system font access --> <fontconfig> <description>Disable antialias for rpg_rt engine</description> <match target="font"> <edit mode="assign" name="hinting"> <bool>false</bool> </edit> </match> <match target="font"> <edit mode="assign" name="antialias"> <bool>false</bool> </edit> </match> <match target="font"> <edit mode="assign" name="rgba"> <const>none</const> </edit> </match> <cachedir>/home/wineuser/font_tweak_pfx/fonts/cache</cachedir> </fontconfig>
在使用
wine
时设置环境变量FONTCONFIG_FILE=$WINEPREFIX/fonts/conf/fonts.conf
即可。
将 Windows 的字体复制/链接进 WINEPREFIX
上面提到的 Wine 的 ArchWiki 页面里也有与此相关的说明。可以将所有字体都放进来然后逐步删除,排查一下具体需要哪个字体文件。
此外我发现运行有些程序时 host 上的字体会对 Wine 造成干扰,需要手动从注册表中删掉所有对 host 的字体的引用。例如 system.reg
中有以下值:
[Software\\Microsoft\\Windows\\CurrentVersion\\Fonts]
...
"@Noto Sans CJK HK (TrueType)"="\\??\\unix\\usr\\share\\fonts\\noto-cjk\\NotoSansCJK-Regular.ttc"
...
可以在 vim 里用 %s/.*\\unix\\\\usr\\\\share\\\\fonts.*\n//g
删掉 .reg
文件里所有相关行。
音频
gst 插件
在运行一个 RPG Maker 制作的游戏时遇到了弹出对话框「not implemented」的问题,最后排查发现是因为 host 上缺少 gst 插件使得无法解码一些格式的音频文件,安装 lib32-gst-plugins-good
后解决。如果有类似问题,可以尝试安装 good bad ugly 等 gst 插件。
MIDI
关于 MIDI 的配置,ArchWiki 也有相关的介绍,总之就是在 host 上配置好一个 software MIDI daemon,Wine 会自动识别使用。但是由于我配置了在当前用户的 X server 里用另一个用户运行 Wine,Wine 就没有权限访问 sequencer /dev/snd/seq
了。一个 workaround 是把 Wine 的用户加进 audio
组。