Wine 配置笔记

记录一下 Wine 的一些配置。OS 是 ArchLinux 。

用单独的用户运行

因为用 Wine 运行的程序有不少都不会很可信,所以配置了用单独的用户运行 Wine,这样至少可以保护家目录。直接切换 TTY、登录用户然后起 wm 是最直接的途径;当然也可以在当前用户的 X server 里用另一个用户运行 Wine。关于配置方法,ArchWiki 上有比较详细的说明

PipeWire Pulse

如果是用上述两种方法的后者,则需要配置音频使得多个用户可以共享音频 daemon。ArchWiki 给了 PulseAudio 的配置示例,而我在用 PipeWire,关于音频的配置稍微不太一样:

  1. 创建 .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" }
    ]
  2. 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 禁用抗锯齿,不然字体反而会变得很难读。

  1. 创建一个 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>
  2. 在使用 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 组。