Wine - Arch Linux 中文维基

跳转到内容

# Wine

来自 Arch Linux 中文维基

相关文章

- CrossOver
- Deepin-wine
- Wine package guidelines

翻译状态：

- 本文（或部分内容）译自 Wine，最近一次同步于 2025-07-28，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

Wine是一款可以在类 Unix 操作系统中运行Windows应用程序的兼容层。

Wine 不进行模拟、转译或虚拟化，而是通过直接提供一组 Win32 API 的对应实现来运行 Windows 应用程序。由于 Wine 的实现与 Windows 的存在一定差异，应用程序运行过程中可能会出现行为、兼容性或性能方面的损失。

警告：

- Wine 并非与你的系统隔离：如果你使用你的用户帐户访问某个文件或资源，那么在 Wine 中运行的程序也可以。参见#在单独的用户帐户下运行 Wine和安全#沙盒程序了解可能的预防措施。
- Wine 也可以运行恶意软件（参见 Wine 关于恶意软件兼容性的 FAQ）

## 安装

可以通过 wine包（开发版），wine-stableAUR（稳定版）或 wine-staging包（测试版本）来安装 Wine。Wine Staging 是 Wine 的修补版本, 其中包含了漏洞修复和尚未集成到稳定或开发分支中的特性。

提示：可以考虑为依赖于 Internet Explorer 和 .NET 的应用程序分别安装 wine-gecko包 和 wine-mono包。这两个软件包不是一定要安装的，因为 Wine 会根据需要自行下载相关文件。反过来说，如果提前安装了软件包，Wine 就不需要再下载这些文件了。不过无论如何，应通过 pacman 对其进行管理。

其它需求见 #图形驱动程序和 #声音。

### 可选依赖项

Wine 有许多可选依赖项，简单的应用程序可能不需要这些依赖项，但如果希望使用声音、3D 图形、视频播放等功能，则应安装这些依赖项。

请注意，许多 Windows 应用程序都是 32 位的，因此需要 32 位版本的相应库，其中有些库仅在 AUR 上提供。标准（64 位）库可用于 64 位应用程序，如果运行的 Wine 版本采用新的 WoW64 模式（参见#安装中的说明），则可用于任何应用程序。使用 file(1) 命令可以检查 Windows 可执行文件是否为 64 位。

提示：常见的依赖项，尤其是与游戏相关的依赖项，可以参考 Lutris 文档 。

#### 图形驱动程序

当你需要安装 32 位版本的图形驱动程序时。请安装 Xorg#驱动安装页面中 OpenGL (multilib) 一栏列出的软件包。

当 Wine 在你的终端窗口中报告以下内容时，你的驱动程序可能没有正确安装或配置：

    直接渲染被禁用,很可能是 OpenGL 驱动程序未被正确安装

注意：安装正确的库后，您可能需要重新启动 Xorg 。

#### 声音

在使用 Wine 运行应用时遇到声音问题，您也可以尝试在 `winecfg` 中检查声音设备的配置，确认选择了正确的声音设备。

根据不同的声音驱动，安装对应的软件包：

- ALSA ：安装 lib32-alsa-lib包 和 lib32-alsa-plugins包
- PulseAudio ：安装 lib32-libpulse包
- PipeWire ：安装 lib32-pipewire包 以及根据需求安装下面的包：
  - 安装 pipewire-pulse包 和 lib32-libpulse包 以使用 PulseAudio 作为声音前端
  - 安装 pipewire-alsa包、lib32-alsa-lib包 和 lib32-alsa-plugins包 以使用 ALSA 作为声音前端
- OSS ： 安装 lib32-alsa-oss包

如果 winecfg 仍然无法检测到音频驱动程序（Selected driver: (none)）， 请尝试配置注册表。例如，在一个 wine-1.9.7 的 64 位版本上，如果麦克风在 32 位 Windows 应用程序中无法正常工作，则可以按照以下步骤来手动配置其对声音硬件（扬声器和麦克风）的访问权限：打开 `regedit`，查找路径 `HKEY_CURRENT_USER > Wine > Drivers> Software` ，然后添加一个键名为 `Audio` 的字符串值，并为其指定值 `alsa` 。此外，重建前缀也可能有一定帮助。

##### MIDI支持

MIDI 是一种从 20 世纪 90 年代开始被广泛使用的音乐系统。如果您使用 Wine 游玩使用了相关技术的老游戏，可能会发现游戏音乐无法正常播放。

事实上 Wine 提供了非常好的 MIDI 支持，但前提是您的主机系统也支持 MIDI，相关内容请参阅MIDI。最后需要注意的是，请确保 Wine 使用了正确的 MIDI 输出。

若要在游戏中播放 MIDI 轨道，请使用 `winetricks gmdls` 以安装 Microsoft's General MIDI DLS Collection。

#### 其他依赖

部分应用可能会需要其他的依赖（参考 WineHQ 页面）

- TLS 的 32 位支持可以安装 lib32-gnutls包
- 手柄和游戏杆的 32 位支持可以安装 lib32-sdl2AUR
- 媒体播放的 32 位支持可以根据需求安装 lib32-gst-plugins-base包、 lib32-gst-plugins-good包、lib32-gst-plugins-badAUR、lib32-gst-plugins-uglyAUR 和 lib32-gst-libavAUR
- 对于 NTLM 验证可以安装 samba包

### Wine前缀内依赖

除了系统依赖项之外，一些程序还需要额外的字体或 dll 库文件，这时您可以将相关内容复制或安装到 #WINEPREFIX 中（参见 WineHQ 页面）。

我们姑且将上面这种依赖情况称为“WINEPREFIX 内部依赖（In-prefix dependencies）”。

您可以尝试使用 Winetricks 来满足一些程序的依赖。它像一个简陋的“包管理器”，通过安装一些软件及应用相关配置来满足不同程序的运行需求。关于它的安装和使用可以参考下文的 #Winetricks 章节。

由于依赖关系之间的冲突，您可能无法创建可以运行所有程序的“完美”运行环境 [1] [2]。建议您将前缀（Wine Prefix）视为可以随时被销毁的（除非它们包含重要的配置或数据），并为具有不同依赖关系的程序使用单独的前缀。您可以使用 #WINEPREFIX 环境变量来指定您期望操作的前缀环境。

确定某个应用需求所需的依赖往往需要反复试验，您可以参考 Bottles 的依赖页面，了解一些常见的依赖关系。下面的内容对解决一些特定的应用依赖问题可能会有所帮助：

- Wine Application Database：Wine 的官方资源，但是内容可能比较老旧且相对下面的内容可能相对缺少维护。
- Lutris：您可以在 lutris 的页面上搜索您想游玩的游戏，部分游戏可以在详细页面点击下拉菜单按钮，选择“View install script”来查看 lutris 所使用的 Winetricks 的配置。
- Bottles program repository：资源规模较小，但不仅仅包括游戏。
- ProtonDB：虽然 Proton 与 Wine 的兼容性不同（如果您使用该网站资源或在网站创建回复，建议仅使用 Proton），但是评论中可能会搜集到用户所使用的配置。
  - 您也可以查阅 protonfixes 工具的源代码，以及包含其内容的 proton-ge-custom。但要注意的是，他们假定您的运行环境中存在 Proton 和 GE 的修复游戏运行补丁。

如果您发现自己在管理游戏运行环境上花费了大量时间，那么使用第三方应用程序代为处理可能会更方便。

### 第三方程序

以下的程序均有他们自己的社区与官网，Wine的官方社区不支持。详见 Wine Wiki 。

- Bottles — 一个基于GTK图形化的Wine前缀和运行管理器。

  https://usebottles.com/ || bottlesAUR

- CrossOver — 收费的商用官方 Wine。提供更多的终端用户支援和图形化界面。

  https://www.codeweavers.com || crossoverAUR

- icoextract — Windows 的可执行程序 (.exe 和 .dll) 的图标生成器。

  https://github.com/jlu5/icoextract || icoextractAUR

- Lutris — 一个游戏启动器(附前缀管理功能），支持Wine上的游戏以及Linux原生游戏。

  https://lutris.net || lutris包

- PlayOnLinux — 图形化 Wine 前缀管理器。包括脚本协助程序的安装与配置。

  https://www.playonlinux.com || playonlinuxAUR

- Proton — 为Steam打造的兼容性工具，它基于 Wine 而有很多附加组件。见ProtonDB 获取兼容列表。

  https://github.com/ValveSoftware/Proton || protonAUR

- PyWinery — 为 Wine 打造的简单前缀管理器。

  https://github.com/ergoithz/pywinery || pywineryAUR

- Q4Wine — 给 Wine 的图形化前缀管理器。为更好地设计统一，可以使用Qt主题到 Wine 设置中。

  https://sourceforge.net/projects/q4wine/ || q4wine-gitAUR

- WINEgui — 用户友好的 wine 图形界面

  https://gitlab.melroy.org/melroy/winegui || wineguiAUR, winegui-binAUR

## 配置

配置 Wine 通常使用以下方法：

- control - Wine 对 Windows 控制面板的实现，可以通过运行 `wine control` 启动。
- regedit - 是 Wine 的注册表编辑工具，可以通过运行 `regedit` 来启动。另见 WineHQ 关于有用的注册表键。
- winecfg——Wine 的 GUI 配置工具，可以通过 `winecfg` 运行。

- 完整列表见 WineHQ 的命令列表。

### WINEPREFIX

默认情况下，Wine 将其配置文件和安装的 Windows 程序存储在 `~/.wine` ，通常会把此目录叫作“Wine prefix”或“Wine bottle”。当您运行 Windows 程序或 Wine 的捆绑程序(如 winecfg)时，它会自动创建/更新。前缀目录还包含一个目录，您的 Windows 程序将其视为 `c:` （ C 盘）。

注意：Wine 前缀不兼容旧版本。新版本的Wine会在必要时自动升级旧前缀，旧版本的 Wine 使用升级后的前缀可能会出错。（Lutris-GE-7.0-8-LoL 版本说明中有提到类似问题）

您可以通过 `WINEPREFIX` 环境变量指定 Wine 使用的前缀位置。如果您希望为不同的 Windows 程序使用单独的配置，这会非常有用。当 Wine 在指定的 `WINEPREFIX` 第一次运行时，Wine 将自动创建一个带有 C 盘和注册表信息的目录。

例如，如果您分别执行命令 `env WINEPREFIX=~/.win-a wine program-a.exe` 和 `env WINEPREFIX=~/.win-b wine program-b.exe` ，这两个程序将分别在 `~/.win-a` 和 `~/.win-b` 路径下有各自单独的 C 盘目录和注册表配置。

警告：Wine不是沙盒！运行在 Wine 下的程序仍然可以访问外部系统的内容！（例如, Wine 会默认将 `/` 映射到 `Z:`，无论哪个 Wine 前缀）

若要在不运行 Windows 程序或其他图形工具的情况下创建前缀，可以执行：

    $ env WINEPREFIX=~/.customprefix wineboot -u

### WINEARCH

Wine默认使用一个64位环境。你可以使用环境变量 `WINEARCH` 控制这一行为。 例如您可以删除或重命名 `~/.wine` 目录，之后执行 `$WINEARCH=win32 winecfg` 来创建一个32位的 Wine 环境。不明确配置 `WINEARCH` 会默认创建64位环境。

我们可以结合 `WINEPREFIX` 来分别创建32位和64位环境

    $ WINEARCH=win32 WINEPREFIX=~/win32 winecfg
    $ WINEPREFIX=~/win64 winecfg

`WINEARCH` 也对一些其他程序生效，例如 #Winetricks（以 Steam 为例）

    $ WINEARCH=win32 WINEPREFIX=~/.local/share/wineprefixes/steam winetricks steam

确认已经创建的 Wine Prefix 是哪种环境需要检查其注册表内容。下面的命令通过查找 `~/.wine` 目录下的注册表文件内容，检查其包含 `#arch-win32` 还是 `#arch=win64` 来确认其架构类型。

    $ grep '#arch' ~/.wine/system.reg

### 字体

如果 Wine 应用程序的字体存在丢失、无法正常显示等问题，您可以尝试用软链接的方式，将系统字体文件映射到对应 #WINEPREFIX 中：

    $ cd ${WINEPREFIX:-~/.wine}/drive_c/windows/Fonts && for i in /usr/share/fonts/**/*.{ttf,otf}; do ln -s "$i" ; done

Wine 使用 FreeType 渲染字体，因此在一些情况下，您可以尝试修改 FreeType 的一些配置。例如您可以尝试设置如下的环境变量修改 FreeType 的解析器版本：

    FREETYPE_PROPERTIES="truetype:interpreter-version=35"

此外，您也可以尝试在 Wine Prefix 中安装微软的 TrueType 字体，详见微软字体。也可以考虑使用 #Winetricks ，执行 `winetricks corefonts` ，如果仍存在问题，可以尝试执行 `winetricks allfonts` 。

您还可以通过修改 Wine 注册表的方式添加字体别名，以便 Wine 使用系统字体。

以中文用户常用字体 `Noto Sans CJK SC` 为例，将以下文本保存为 `chs.reg`：

    REGEDIT4

    [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
    "MS Shell Dlg"="Noto Sans CJK SC"
    "MS Shell Dlg 2"="Noto Sans CJK SC"
    "SimSun"="Noto Sans CJK SC"
    "Microsoft YaHei"="Noto Sans CJK SC"

通过执行 `wine regedit ./chs.reg`即可导入以上条目。

执行相关操作后，需要关闭所有 Wine 服务并运行 `winecfg` 查看效果。

如果字体看起来模糊不清，用下面的命令来更改Wine注册表：

     $ wine reg add 'HKEY_CURRENT_USER\Software\Wine\X11 Driver' /v ClientSideWithRender /t REG_SZ /d N

对于高分辨率屏幕，可以在 `winecfg` 中尝试调整 dpi 值。

另见字体配置#不支持_Fontconfig_的程序及相关页面尝试调整文字渲染问题。

#### 启用字体平滑

启用 ClearType 字体平滑可以提高 Wine 中的字体渲染效果。 若要启用“次像素平滑(ClearType) RGB”请创建文件并执行之后的命令：

    /tmp/fontsmoothing

    REGEDIT4

    [HKEY_CURRENT_USER\Control Panel\Desktop]
    "FontSmoothing"="2"
    "FontSmoothingOrientation"=dword:00000001
    "FontSmoothingType"=dword:00000002
    "FontSmoothingGamma"=dword:00000578
    EOF

    $ WINE=${WINE:-wine} WINEPREFIX=${WINEPREFIX:-$HOME/.wine} $WINE regedit /tmp/fontsmoothing 2> /dev/null

如果你已经安装了 winetricks包 ，有更简单的方式：

    winetricks fontsmooth=rgb

相关内容详见[3]。

### 桌面项（快捷方式）

当使用 Windows 应用的安装程序尝试创建快捷方式时，Wine 会创建对应的 .desktop 文件。Arch Linux 中这些文件的默认位置是：

- 桌面快捷方式位于 `~/Desktop` 下。
- 开始菜单条目位于 `~/.local/share/applications/wine/Programs/` 下。

注意：Wine 不支持为所有用户安装 Windows 应用程序，所以 Wine 不会把 `.desktop` 文件放到 `/usr/share/applications` 中。详见 WineHQ bug 11112
提示：如果安装软件时桌面项没有被创建或已经丢失，可以尝试执行 `wine winemenubuilder`。

#### 为 Wine 的工具创建桌面项

默认情况下，Wine 附带的软件不会创建桌面项（例如 `winecfg`、`winebrowser` 等）。这可以通过安装 wine-installerAUR 或 wine-installer-gitAUR （后者不依赖 #Winetricks ）来解决，您也可以根据下面的说明手动创建相关条目。

下面的文件您可以保存在 `~/.local/share/applications/wine/` 目录下：

    wine-browsedrive.desktop

    [Desktop Entry]
    Name=Browse C: Drive
    Comment=Browse your virtual C: drive
    Exec=wine winebrowser c:
    Terminal=false
    Type=Application
    Icon=folder-wine
    Categories=Wine;

    wine-uninstaller.desktop

    [Desktop Entry]
    Name=Uninstall Wine Software
    Comment=Uninstall Windows applications for Wine
    Exec=wine uninstaller
    Terminal=false
    Type=Application
    Icon=wine-uninstaller
    Categories=Wine;

    wine-winecfg.desktop

    [Desktop Entry]
    Name=Configure Wine
    Comment=Change application-specific and general Wine options
    Exec=winecfg
    Terminal=false
    Icon=wine-winecfg
    Type=Application
    Categories=Wine;

并在`~/.config/menus/applications-merged/`目录创建如下文件：

    wine.menu

    <!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
    "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
    <Menu>
      <Name>Applications</Name>
      <Menu>
        <Name>wine-wine</Name>
        <Directory>wine-wine.directory</Directory>
        <Include>
          <Category>Wine</Category>
        </Include>
      </Menu>
    </Menu>

如果这些文件显示的图标存在问题，可能是您使用的图标主题中没有这些程序的图标，或者您也可以手动指定应用的图标文件。一个包含了这些内容的图标主题是 gnome-colors-icon-themeAUR。

#### 删除桌面项（快捷方式）

由 Wine 创建的菜单条目位于 `~/.local/share/applications/wine/Programs/` 目录。

如果要删除 Wine 绑定的不想使用的扩展，可以执行以下命令（摘自 Wine FAQ，请仔细确认后执行） ：

    $ rm ~/.local/share/mime/packages/x-wine*
    $ rm ~/.local/share/applications/wine-extension*
    $ rm ~/.local/share/icons/hicolor/*/*/application-x-wine-extension*
    $ rm ~/.local/share/mime/application/x-wine-extension*

此外您也可以通过移除在 `/.config/menus/` 中的 `wine-*.menu` 文件以移除 KDE 应用菜单中 Wine 子菜单的图标。

### 主题

类似 Windows XP 外观的主题可以在这里下载。可以参考 Wine 维基页面进行安装。安装完成后，可以使用 `winecfg` 选择对应的主题。

注意：上面提到的主题只能安装在32位，系统兼容性配置为 Windows XP 的 #WINEPREFIX 中。要将其安装在64位环境上，您需要在的32位 Wine Prefix 环境中安装该主题，之后从32位 Wine Prefix 环境下的 `drive_c/Windows/Resources/Themes` 目录内，将 `Zune` 文件夹和 `Zune.theme` 文件复制到您使用的环境中。

wine-staging包 用户可以尝试在 `winecfg` 中配置启用“Enable GTK3 Theming”令相关应用适配当前的 GTK 主题。

### 打印机

为了在32位的 #WINEPREFIX 中（例如微软 Word）使用您已经安装的打印机（包括本地打印机和网络打印机），您需要安装 lib32-libcups包 ，并在之后重启所有 Wine 服务及您的应用程序。

### 网络

一些32位的程序可能需要安装 lib32-gnutls包 来创建 TLS 或 HTTPS 连接。

对于 ICMP（ping 命令），需要为 Wine 配置相关权限（Capabilities)，详见 WineHQ FAQ：

    # setcap cap_net_raw+epi /usr/bin/wine-preloader

如果执行上述命令后，您遇到了一些问题（例如程序异常、权限问题等），您可以通过下面的命令取消相关权限：

    # setcap -r /usr/bin/wine-preloader

## 使用

警告：不要以 root 身份运行 Wine 或安装 Windows 应用程序！详见 Wine FAQ。

Wine 用户手册可以为您提供 Wine 使用说明。

Wine 程序数据库（AppDB）可以提供部分特定 Windows 程序在 Wine 中运行的参考信息。

### Wayland

警告：Wine 的 Wayland 驱动仍处于实验阶段

目前 Wine 在 Wayland 环境下通过 XWayland 进行渲染，这可以为大部分用户提供良好的体验。在 9.0rc1 版本后，Wine 在原生 Wayland 支持上取得了较大进展，已经可以在一些情境下使用。

如果您希望尝试最近加入到 Wine 版本的原生 Wayland 支持，可以尝试以下步骤：

- Wine 9.22 后的版本执行下面的命令修改注册表配置：

    $ wine reg add 'HKEY_CURRENT_USER\Software\Wine\Drivers' /v Graphics /t REG_SZ /d 'x11,wayland'

- 通过取消设置 `DISPLAY` 环境变量，来强制使用 Wayland 驱动：

      $ env -u DISPLAY wine example.exe

如果取消设置 `DISPLAY` 导致 Wine 运行出现问题，请检查您安装的 Wine 版本是否在构建时添加了 Wayland 驱动支持。

### 停止运行 Wine 程序

在执行 `wine` 的终端按下 Ctrl+Z 或在 `wineconsole` 的终端中按下 Ctrl+C，只是将进程转入了后台运行。

假设当前进程如下：

    $ ps -xo pid,cmd
        PID CMD
        297 -bash
        933 /usr/bin/wineserver
        939 C:\windows\system32\services.exe
        942 C:\windows\system32\winedevice.exe
        950 C:\windows\system32\explorer.exe /desktop
        954 C:\windows\system32\winedevice.exe
        965 C:\windows\system32\plugplay.exe
        977 C:\windows\system32\svchost.exe -k LocalServiceNetworkRestricted
        984 C:\windows\system32\rpcss.exe
        997 mbserver.exe
       1017 start.exe /exec
       1019 C:\windows\system32\conhost.exe --unix --width 169 --height 40 --server 0x10
       1021 Z:\home\wineuser\mbserver.exe
       1030 ps -xo pid,cmd

所有正在运行中的 `wine` 和 `wineconsole` 进程都可以被 wineserver -k 命令终止。例如：

    $ wineserver -k 15

这个命令可以与 #WINEPREFIX 关联，因此当您使用自己配置的 `WINEPREFIX` 时，可以执行：

    $ WINEPREFIX=~/wine/my-prefix wineserver -k

一个与上面操作等价的命令是直接将相关进程终止掉：

    $ kill 997 1021

## 提示与技巧

### Wineconsole

通常情况下，你可能需要运行.exe来修补游戏文件，例如一个老游戏的宽屏 mod，通过 Wine 正常运行.exe可能不会产生任何效果。在这种情况下，你可以打开一个终端，运行以下命令。

    $ wineconsole cmd

然后转到该目录，从那里运行.exe文件。

### Winetricks

Winetricks是一个可以帮助用户安装一些 Windows 程序所需依赖的脚本。可安装的组件包括 Direct9、MSXML（Office 2007 和 Internet Explorer 所需依赖）、Visual 运行时库和很多其它组件。

安装winetricks包（或winetricks-gitAUR）后，直接执行下面命令即可使用：

    $ winetricks

如果希望使用图形界面，需要安装 zenity包（GTK）或 kdialog包（QT）。

### 性能

#### CSMT

CSMT 是 Wine 使用的一项技术，它为 OpenGL 调用使用了一个单独的线程，以显著提高性能。从 Wine 3.2 开始，CSMT 被默认启用。

注意，CSMT可以会在某些应用中损害性能。如果这种情况发生，通过运行 `wine regedit` 并设置 HKEY_CURRENT_USER -> Software > Wine > Direct3D > csmt 的 DOWRD 值为 0x00 （禁用）。

更多信息：

- Phoronix 论坛讨论

#### 强制使用OpenGL模式运行游戏

有些游戏可能有 OpenGL 模式，其性能可能比其默认的 DirectX 模式更好。虽然启用 OpenGL 渲染的是 "特定应用"，但许多游戏可以使用 `-opengl` 参数。

    $ wine /path/to/3d_game.exe -opengl

你应该参考你的应用程序文档和 Wine 的官网 AppDB 来了解这些应用程序的具体信息。

#### DXVK

DXVK 是在 Vulkan 上对 DirectX 8,9,10 和 11 的一个可能的新实现。其在大部分游戏上的性能和兼容性优于 WineD3D。其不支持 DirectX 12，另请参阅 #VKD3D-Proton。DXVK 和 VKD3D-Proton 可以且应当一同安装以支持所有 DirectX 版本。

用 #Winetricks 来安装最新的版本：

安装 dxvk-binAUR 以使用它. 然后运行以下命令，在 wine 前缀中激活它（默认为 `~/.wine`):

    $ WINEPREFIX=your-prefix winetricks dxvk

你可以安装一个特殊的版本。例如，若要安装一个对驱动要求较低的 DXVK 版本，使用以下命令：

    $ WINEPREFIX=your-prefix winetricks dxvk1103

也可以安装 dxvk-mingwAUR 或 dxvk-binAUR。然后运行下面的指令来在你的 Wine 前缀中激活它（默认是 `~/.wine`）。

    $ WINEPREFIX=your-prefix setup_dxvk install --symlink

#### VKD3D-Proton

VKD3D-Proton 是 VKD3D 的一个 fork，这旨在用 Vulkan 实现完整的 Direct3D 12 API。该项目是 Proton 中 Direct3D 12 支持的开发项目，旨在提高 DirectX 12 游戏的性能和兼容性。

注意：尽管这些 DLL 名称中带有“Proton”，它们在普通版本的 Wine 中也能正常工作，并且可以与 DXVK 一起使用 #DXVK 。

为使用最新的版本，使用 #Winetricks：

    $ WINEPREFIX=your-prefix winetricks vkd3d

此外，安装 vkd3d-proton-mingwAUR 或 vkd3d-proton-binAUR 。然后运行下面的指令来在你的 Wine 前缀中激活它（默认是 `~/.wine`）。

    $ WINEPREFIX=your-prefix setup_vkd3d_proton install --symlink

警告： VKD3D-Proton 会覆盖 DirectX 12 DLL，这也许会被一些在线多玩家游戏认定为作弊，然后你的账户可能会被 banned。用的时候小心！
提示：仅对于 AMDGPU 用户：当搭配 Gamescope 使用时，DXVK v2.1 及以上版本支持 HDR10 显示器。详情请参见 HDR 显示器支持

#### Gallium Nine

这一章节正在考虑移除。

原因: No point in keeping historical details if they have no relevance. (在 Talk:Wine 讨论)

Gallium Nine was available for Mesa users only. But now Gallium Nine have been totally dropped from Mesa. And so, now you cannot use Gallium Nine at all. Now you should use #DXVK instead.

#### xSync

Some games heavily use windows sync objects to run multi-threaded workloads, Wine is able to provide a userspace implementation through wineserver, however most of the time the default implementation have major performance impact in CPU bound scenarios.

Currently there are 3 options available to improve the performance, and you should use only one of it at same time:

- ESync - User-space eventfd-based synchronization.
  - Not included in wine包. Included in wine-staging包, but not enabled by default.
  - Enabled by default in Proton unless FSync is available. FSync is not available if you use very old release of Linux kernel.

- FSync - In-kernel Futex2-based implementation of synchronization, should have better performance than ESync.
  - Enabled by default in Proton, however for Wine you will need a patched version.

- NTSync - In-kernel implementation of synchronization, that compared to ESync and FSync, NTsync closely emulates the behavior of MS Windows implementation, which currently not implemented yet in upstream Wine, and not included in Proton, but require to be implemented in Wine or/and Proton to NTsync can work. However, out-of-tree patches exist for both. Usually is on par with FSync or smoother. NTSync is now implemented in kernel and require Linux 6.14 or newer. Also you should manually load "ntsync" Linux kernel module, because it disabled by default. For example:

    /etc/modules-load.d/ntsync.conf

    # Automaticaly load ntsync kernel module at every boot

    ntsync

注意：None of those options are now available in wine包, but NTsync maybe soon.

To enable ESync Export the following environment variable before running Wine:

    WINEESYNC=1

Or for FSync with patched Wine:

    WINEFSYNC=1

NTsync does not require setting an environment variable.

Also MangoHud can shows the absence or presence of ESync, FSync or NTsync in games if you have enabled an indication of wsync in its config file.

### 取消注册已经存在的Wine档案关联

默认情况下，Wine 接管了许多格式的默认程序。一些（例如 `vbs` 或是 `chm` ）都是 Windows 独有的，并且用 Wine 打开他们是方便的。但是，很多其它的格式（例如 `gif`、`jpeg`、`txt`、`js` 在Wine的模拟 Internet Explorer 或 Notepad 中打开是烦人的

Wine的档案关联都设定在 `~/.local/share/applications/` 作为 `wine-extension-extension.desktop` 档案。删除这些档案对应的就像你想的那样取消注册了。或者，删除所有的 wine 拓展：

    $ rm -f ~/.local/share/applications/wine-extension*.desktop
    $ rm -f ~/.local/share/icons/hicolor/*/*/application-x-wine-extension*

接下来，删除旧缓存：

    $ rm -f ~/.local/share/applications/mimeinfo.cache
    $ rm -f ~/.local/share/mime/packages/x-wine*
    $ rm -f ~/.local/share/mime/application/x-wine-extension*

并且，升级这些缓存：

    $ update-desktop-database ~/.local/share/applications
    $ update-mime-database ~/.local/share/mime/

请注意，如果应用程序再次设置文件关联，Wine仍将创建新的文件关联，甚至重新创建文件关联。

### 阻止 Wine 创建文件关联

注意：必须对每个 Wine 前缀执行此操作，除非您选择更改 `/usr/share/wine/wine.inf`，否则不应更新文件关联。

这个方法避免建立档案类型关联，但是保留建立的 XDG .desktop 档案（你可能会在选单中看到它们）。

如果你想阻止 wine 通过 winecfg 创建档案关联，你必须不检查桌面通讯选项卡下的“管理档案关联”复选框，见 Wine FAQ

为了创建相同的更改通过注册表，在以下的路径加入字符串值 `N` 来 `启用`。

    HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations

你也许需要先创建键 `FileOpenAssociations`！

为了在命令行创建相同的改变，运行下面的指令：

    $ wine reg add "HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations" /v Enable /d N

如果你想去应用默认设置在新的 Wine 前缀，编辑 `/usr/share/wine/wine.inf` 并加入这一行到 `Services` 段下：

    HKCU,"Software\Wine\FileOpenAssociations","Enable",2,"N"

为了防止包升级覆盖设置档案，创建一个 pacman 钩子来让这个变化自动进行：

    /etc/pacman.d/hooks/stop-wine-associations.hook

    [Trigger]
    Operation = Install
    Operation = Upgrade
    Type = Path
    Target = usr/share/wine/wine.inf

    [Action]
    Description = Stopping Wine from hijacking file associations...
    When = PostTransaction
    Exec = /bin/sh -c '/usr/bin/grep -q "HKCU,\"Software\\\Wine\\\FileOpenAssociations\",\"Enable\",2,\"N\"" /usr/share/wine/wine.inf || /usr/bin/sed -i "s/\[Services\]/\[Services\]\nHKCU,\"Software\\\Wine\\\FileOpenAssociations\",\"Enable\",2,\"N\"/g" /usr/share/wine/wine.inf'

见 Pacman#Hooks 。

### 自动使用 Wine 执行 Windows 程序

wine包 软件包会安装一个 binfmt 文件，这可使你能够直接运行 Windows 程序，例如，`./myprogram.exe` 将与 `wine ./myprogram.exe` 效果相同。服务默认在开机时启动，如果在安装 Wine 之后还没有重启过，启动 `systemd-binfmt.service` 即可。

注意：确保 Windows 程序可执行，否则程序将不会运行。

### 双显示器具有不同的分辨率

如果您在双显示器设置与不同的显示分辨率方面有问题，这可能是缺少了 lib32-libxrandr包。

安装 lib32-libxinerama包 也许可以解决 wine 中的双头问题（例如，最底部或右侧的显示器的程序中的按钮与选单不可被按下，该区域中应用程序的界面不可重绘，离开应用程序区域后拖动鼠标光标状态受阻）。

### 烧录光盘

为了烧录 CD 或者是 DVD，你将需要加载`sg`内核模块。

### 正确的挂载光碟

一些程序会将光碟作为一个设备检查。他们可能只检查数据，在这种情况下，可将相应路径配置为“winecfg”中的 CD-ROM 驱动器。

但是。其它程序将找到媒体名称或/和序列号，在这种情况下映像要用特殊的属性挂载。

一些虚拟设备无法处理这些元数据，就像是基于 FUSE 的虚拟设备（譬如 Acetoneiso）。 CDemu 将会正确的处理它。

### 游戏内显示帧数

Wine 有一个内置的 FPS 检测器，在环境变量 `WINEDEBUG=fps` 设定的情况下，它会运行在所有图形程序上。这将会输出帧率到标准输出。你可以显示帧率到屏幕最上面通过 xosd包 包中的 `osd_cat`。winefps.sh 为它的帮助脚本。

### 在单独的用户帐户下运行 Wine

在一个专门创建的用户账户下运行Wine可能是可取的，以便减少对 Windows 应用程序访问你的主目录的担忧。

第一步，建立一个用户账户给Wine:

    # useradd -m -s /bin/bash wineuser

现在切换到另一个 TTY，像平常一样启动你的X WM或DE，或者继续阅读......

注意：以下方法仅在为Xorg启用root时有效。关于如何在主用户下执行`xhost`命令的更多信息，请参见Xorg#Rootless Xorg 。

之后，为了使用这个新的用户账户打开Wine应用程序，你需要将这个新用户添加到X服务器的权限列表中。

    $ xhost +SI:localuser:wineuser

最后，你可以通过以下命令来运行Wine，该命令使用`env`来启动Wine，并加入它所期望的环境变量。

    $ sudo -u wineuser env HOME=/home/wineuser USER=wineuser USERNAME=wineuser LOGNAME=wineuser wine arguments

可以使用如下的shell脚本，使用Wine运行Windows应用程序的过程自动化：

    /usr/local/bin/runaswine

    #!/bin/bash
    xhost +SI:localuser:wineuser
    sudo -u wineuser env HOME=/home/wineuser USER=wineuser USERNAME=wineuser LOGNAME=wineuser wine "$@"

Wine程序可以被通过以下指令启动：

    $ runaswine "C:\path\to\application.exe"

为了在每次以其他用户身份运行Wine时不被要求输入密码，可以在sudoers文件中加入以下条目。`mainuser ALL=(wineuser) NOPASSWD: ALL`。更多信息见Sudo#Configuration。

建议以Wine用户身份运行`winecfg`，并在配置窗口的 "桌面集成 "部分删除Wine用户主目录以外的所有目录绑定，这样，使用Wine运行的程序就无法读取特殊用户主目录以外的任何文件。

请记住，如果使用了PulseAudio，那么在以这种方式运行的Wine程序中，音频可能将无法发挥作用。请参阅 PulseAudio/Examples#Allowing multiple users to share a PulseAudio daemon 以了解关于允许Wine用户访问主用户的PulseAudio daemon的信息。

### Tmpfs 上的临时目录

为了防止 Wine 将临时文件写到物理硬盘上，需要设置一个另外的位置，例如 tmpfs。删除 Wine 临时文件的默认目录并建立一个软链接：

    $ rm -r ~/.wine/drive_c/users/$USER/Temp ~/.wine/drive_c/windows/temp
    $ ln -s /tmp/ ~/.wine/drive_c/users/$USER/Temp
    $ ln -s /tmp/ ~/.wine/drive_c/windows/temp

### 防止 Mono/Gecko 的安装

如果 Gecko 或/和 Mono 都不在系统或 Wine 前缀中，Wine 将提示从网路上下载他们。如果你并不需要 Gecko 或/和 Mono，你也许希望关闭这个提示，通过设置 `WINEDLLOVERRIDES` 环境变量为 `mscoree=d;mshtml=d`.。

### Vulkan

默认的 wine Vulkan ICD 加载器在大多数程序中都工作地很好，但是不支持高级特性，例如 Vulkan 层。为使用这些特性，你需要安装官方的 Vulkan SDK，见原始的Vulkan补丁作者的 GitHub page 的第二到四步。

### 删除Wine文件绑定

因为安全因素，移除 Wine 绑定来让 Windows 程序无法直接从文件管理器或是浏览器（Firefox 提供直接使用 Wine 打开 EXE 文件的方法）或许是有用的。

假如你想这么做，你需要在 `/etc/pacman.conf` 中加入下面的 NoExtract 行：

    NoExtract = usr/lib/binfmt.d/wine.conf
    NoExtract = usr/share/applications/wine.desktop

### WineASIO

如果你需要 Wine 下的专业的音频支持，你可以使用 wineasioAUR 来提供一个给 wine 的 ASIO 界面来让你可以使用 JACK。

为了使用 wineasio，你必须将自己加入`realtime`用户组。

然后你需要注册 wineasio 到你的选定的 wine 前缀。注册32位或/和64位版本作为需要的：

    $ regsvr32 /usr/lib32/wine/i386-windows/wineasio.dll
    $ wine64 regsvr32 /usr/lib/wine/x86_64-windows/wineasio.dll

## 疑难解答

见用户指南和 Wine FAQ (特别注意这个 Troubleshooting 选段)以参阅通用指南。

也请将运行程序的建议也反馈到 Wine AppDB。

### XWayland问题

如果你在 XWayland 下使用 wine，你可以在 winecfg 的显示菜单启用“模拟虚拟桌面”来避免以下的问题：

- 窗口闪动;
- 错误的窗口位置;
- 错误的鼠标位置和点击;
- 键盘监察错误。

### 键盘输入不工作

这可能是由于窗口管理器没有切换焦点造成的。在winecfg的图形标签中，禁用'允许窗口管理器...'选项，或者用'模拟虚拟桌面'设置窗口模式。

- 有人建议切换所有的 "窗口设置"，点击 "应用"，然后把它们改回来。如果这不起作用，请尝试上述方法。

如果在取消应用程序的焦点后，键盘不能工作，请尝试编辑注册表。

- 在 `HKEY_CURRENT_USER\Software\Wine\X11 Driver` 下，添加一个字符串值 `UseTakeFocus` 并将其设置为 `N` 。
- 另外，你也可以用 winetricks 来设置这个值。

    $ winetricks usetakefocus=n

或者使用wine注册表

    $ wine reg add 'HKEY_CURRENT_USER\Software\Wine\X11 Driver' /t REG_SZ /v UseTakeFocus /d N /f

### 应用程序启动失败

有些旧的游戏和应用程序会假设当前工作目录与可执行文件所在目录相同。如果从其他位置启动这些可执行文件，可能会导致它们无法正常启动。在运行 Wine 之前，使用 `cd path_containing_exe` 来排除这种可能性。

## 参见

- Wine 主页
- Wine 维基
- Wine 程序数据库 (AppDB) - 关于运行一些特定的 Windows 程序的讯息 (已知问题、指北、等级、其它关于程序的讯息)
- Wine 论坛 - 一个问问题的好地方在你看了 FAQ 和 AppDB 后。
- Gentoo:Wine
- Darling - 一个模拟 MacOS 程序的小项目
- WineASIO - WineASIO 项目的 Github Page，有更多的讯息。

分类：​

- 仿真
- 游戏
- 使用“模板:Remove”标记的章节

Wine
添加话题