Wine

来自 ArchWiki
(重定向自 PlayOnLinux

Wine 是一个兼容层,能够在类 Unix 操作系统上运行 Microsoft Windows 应用程序。在 Wine 中运行的程序就像本地程序一样运行,而没有模拟器的性能/内存损失。

警告

安装

可以通过启用multilib 仓库并安装 wine (开发版), wine-stableAUR (稳定版) 或 wine-staging (测试版) 软件包来安装 Wine。Wine StagingWine 的一个补丁版本,其中包含尚未集成到稳定版或开发分支的错误修复和功能。

注意: 如果您不想启用multilib 仓库,或者只是想避免安装额外的 32 位库,您可以改用 wine-wow64AURwine-staging-wow64AUR 软件包。它们是使用“新的 WoW64 模式”构建的,用于专门使用 64 位 Linux 库运行 32 位 Windows 应用程序。但是,对这种模式的支持目前是实验性的。[1]

另请参阅#显卡驱动#声音以了解其他要求。

考虑安装 wine-geckowine-mono,分别用于依赖 Internet Explorer 和 .NET 的应用程序。这些软件包不是严格必需的,因为 Wine 会根据需要下载相关文件。但是,您应该使用 pacman 管理它们

可选依赖项

提示: 常见依赖项,特别是与游戏相关的依赖项,列在lutris 文档中。

Wine 有许多可选依赖项,这些依赖项对于基本应用程序可能不是必需的,但应该安装以提供声音、3D 图形、视频播放等功能。

请注意,许多 Windows 应用程序是 32 位的,并且需要相应库的 32 位版本,其中一些仅在 AUR 上可用。标准(64 位)库可以用于 64 位应用程序,或者如果您运行的是带有新的 WoW64 模式的 Wine 版本,则可以用于任何应用程序(请参阅#安装中的注释)。您可以使用 file(1) 命令检查 Windows 可执行文件是否为 64 位。

显卡驱动

您需要安装 32 位版本的显卡驱动。请安装 Xorg#驱动程序安装 表格中OpenGL (multilib)列出的软件包。

一个好的迹象表明您的驱动程序不足或配置不正确是当 Wine 在您的终端窗口中报告以下内容时

Direct rendering is disabled, most likely your OpenGL drivers have not been installed correctly
注意: 您可能需要在安装正确的库后重启 X。

声音

默认情况下,运行 Wine 应用程序时可能会出现声音问题。确保在 winecfg 中只选择一个声音设备。

为您要使用的音频驱动安装正确的软件包

如果 winecfg 仍然 无法检测到音频驱动程序(选定的驱动程序:(无)),通过注册表配置它。例如,在 64 位 stock install of wine-1.9.7 上 32 位 Windows 应用程序中的麦克风不工作的情况下,这提供了对声音硬件的完全访问权限(声音播放和麦克风):打开 regedit,查找键 HKEY_CURRENT_USER > Software > Wine > Drivers,并添加一个名为 Audio 的字符串并为其赋值 alsa。此外,重新创建前缀也可能有所帮助。

MIDI 支持

MIDI 是 90 年代非常流行的视频游戏音乐系统。如果您正在尝试老游戏,音乐通常无法开箱即用。Wine 具有出色的 MIDI 支持。但是,您首先需要使其在您的主机系统上工作,如MIDI中所述。最后但并非最不重要的是,您需要确保 Wine 将使用正确的 MIDI 输出。

其他依赖项

某些应用程序可能需要额外的软件包[2]

前缀内依赖项

除了系统依赖项之外,许多程序还需要安装额外的字体和 DLL 到 Wine 前缀[3]。要满足这些依赖项,您可以使用 Winetricks,这是一个原始的“软件包管理器”,其中每个动词要么安装某些东西,要么应用配置调整。使用 Winetricks 有两种方法

  • 通过 CLI:运行 winetricks verb_name
  • 通过 GUI:安装 zenitykdialog 然后运行 winetricks

由于依赖项之间的冲突,您可能无法创建可以运行所有内容的“完美”Windows 安装[4] [5]。相反,您应该将前缀视为可一次性的(除非它们包含重要的配置或数据),并为具有不同依赖项的程序使用单独的前缀。您可以使用 #WINEPREFIX 环境变量来控制动词作用于哪个前缀。

确定程序所需的动词可能需要大量的试验和错误。请参阅 Bottles 依赖项页面,了解一些更常见的依赖项,以及以下特定于程序的资源

  • Wine 应用程序数据库。官方资源,但较旧,维护可能不如其他资源。
  • Lutris 网站。如果您正在尝试运行恰好在本网站上推荐的游戏,您可以单击下拉菜单,然后单击查看安装脚本以查看 Lutris 使用了哪些 Winetricks 动词。
  • Bottles 程序仓库。规模较小,但不仅限于游戏。
  • 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/crossover || crossoverAUR
  • Lutris — 适用于所有类型游戏的启动器,包括 Wine 游戏(带前缀管理)、原生 Linux 游戏和模拟器。
https://lutris.net || lutris
  • PlayOnLinux — Wine 的图形化前缀管理器。包含辅助程序安装和配置的脚本。
https://www.playonlinux.com || playonlinuxAUR
  • Proton — 基于 Wine 和其他组件为 Steam 制作的兼容性工具。有关兼容性列表,请参阅 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 通常通过以下方式完成

  • winecfg 是 Wine 的 GUI 配置工具,可以通过运行 winecfg 启动。
  • regedit 是 Wine 的注册表编辑工具,可以通过运行 regedit 启动。请参阅 WineHQ 关于有用的注册表键的文章。
  • control 是 Wine 对 Windows 控制面板的实现,可以通过运行 wine control 启动。
  • 有关完整列表,请参阅 WineHQ 的命令列表

WINEPREFIX

默认情况下,Wine 将其配置文件和已安装的 Windows 程序存储在 ~/.wine 中。此目录通常称为“Wine 前缀”或“Wine 容器”。每当您运行 Windows 程序或 Wine 的捆绑程序(如 winecfg)之一时,它都会自动创建/更新。前缀目录还包含一个树,您的 Windows 程序将看到它作为 C: (C 盘)。

注意: Wine 前缀不向前兼容。新版本的 Wine 会在必要时自动升级旧前缀,届时它们可能会对旧版本的 Wine 造成损坏。[6]

您可以使用 WINEPREFIX 环境变量 覆盖 Wine 用于前缀的位置。如果您想为不同的 Windows 程序使用单独的配置,这将非常有用。首次使用新的 Wine 前缀运行程序时,Wine 将自动创建一个包含裸 C 盘和注册表的目录。

例如,如果您使用 env WINEPREFIX=~/.win-a wine program-a.exe 运行一个程序,并使用 env WINEPREFIX=~/.win-b wine program-b.exe 运行另一个程序,则这两个程序将分别具有单独的 C 盘和单独的注册表。

警告: Wine 前缀不是 沙盒!在 Wine 下运行的程序仍然可以访问系统的其余部分!(例如,无论 Wine 前缀如何,Z: 都映射到 /)。

要创建默认前缀而不运行 Windows 程序或其他 GUI 工具,您可以使用

$ env WINEPREFIX=~/.customprefix wineboot -u

WINEARCH

Wine 默认情况下将启动 64 位环境。您可以使用 WINEARCH 环境变量 更改此行为。重命名您的 ~/.wine 目录,并通过运行 $ WINEARCH=win32 winecfg 创建一个新的 Wine 环境。这将为您提供一个 32 位 Wine 环境。不设置 WINEARCH 将为您提供一个 64 位环境。

您可以将此与 WINEPREFIX 结合使用,以创建单独的 win32win64 环境

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

您还可以将 WINEARCH 与其他 Wine 程序结合使用,例如 winetricks(以 Steam 为例)

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

为了查看现有前缀的架构,您可以检查其注册表文件。以下命令读取 ~/.wine 前缀的系统注册表,并根据架构类型返回 #arch=win32#arch=win64

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

字体

如果 Wine 应用程序的字体不可读或丢失,则可能是您没有安装任何字体。要轻松链接所有系统字体,以便可以从 Wine 访问它们

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

Wine 使用 FreeType 渲染字体,而 FreeType 的默认设置在几个版本前发生了更改。尝试在 Wine 中运行程序时使用以下 环境变量

FREETYPE_PROPERTIES="truetype:interpreter-version=35"

另一种可能性是将 Microsoft 的 TrueType 字体 安装到您的 Wine 前缀中。如果这没有帮助,请先尝试运行 winetricks corefonts,然后最后尝试 winetricks allfonts

运行此类程序后,杀死所有 Wine 服务器并运行 winecfg。字体现在应该清晰可辨。

如果字体看起来有些模糊,请运行以下命令来更改 Wine 注册表中的设置

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

对于高分辨率显示器,您可以在 winecfg 中调整 dpi 值。

另请参阅字体配置#不支持 Fontconfig 的应用程序

启用字体平滑

改进 Wine 字体渲染的一个好方法是启用 ClearType 字体平滑。要启用“子像素平滑 (ClearType) RGB”

/tmp/fontsmoothing.reg
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.reg 2> /dev/null

有关更多信息,请查看原始答案

桌面启动器菜单

当 Windows 应用程序安装程序创建快捷方式时,Wine 会创建一个 .desktop 文件。这些文件在 Arch Linux 中的默认位置是

  • 桌面快捷方式放在 ~/Desktop
  • 开始菜单快捷方式放在 ~/.local/share/applications/wine/Programs/
注意: Wine 不支持为所有用户安装 Windows 应用程序,因此它不会将 .desktop 文件放在 /usr/share/applications 中。请参阅 WineHQ 错误 11112
提示: 如果在安装软件时创建菜单项或菜单项已丢失,则 wine winemenubuilder 可能会有所帮助。

为 Wine 实用程序创建菜单项

默认情况下,安装 Wine 不会为 Wine 附带的软件(例如 winecfgwinebrowser 等)创建桌面菜单/图标。这可以通过安装 wine-installerAURwine-installer-gitAUR 元软件包(后者没有其他依赖项)来实现,否则这些说明将为这些应用程序添加条目。

首先,使用 Wine 安装 Windows 程序以创建基本菜单。创建基本菜单后,您可以在 ~/.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/ 中。删除程序的 .desktop 条目以从菜单中删除该应用程序。

除了删除 Wine 不必要的文件扩展名绑定外,请执行以下命令:[7]

$ 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 子菜单中完全删除项目。

外观

类似于 XP 外观的主题可以下载。要安装它,请参阅此上游 wiki 文章。最后,使用 winecfg 选择它。

注意: 上面链接的主题只能安装在将 Windows XP 作为前缀版本的 32 位前缀上。要在 64 位前缀上安装它,您可能需要创建一个临时的 32 位前缀,安装主题,并将该前缀中 drive_c/Windows/Resources/Themes 中的 Zune 文件夹和 Zune.theme 文件复制到常用前缀中的相同位置。

Wine Staging 用户可能希望尝试启用 winecfg 的 Staging 部分下的启用 GTK3 主题选项,以获得与当前 GTK 主题相匹配的主题。

打印

为了在 win32 prefixes (例如 MS Word) 中使用 Wine 应用程序使用已安装的打印机(本地和网络打印机),请安装 lib32-libcups 软件包,重启 Wine (wineboot) 并重启您的 Wine 应用程序。

网络

安装后,可能需要安装 lib32-gnutls 软件包,以便使用 TLS 或 HTTPS 连接的应用程序能够正常工作。

对于 ICMP (ping),Wine 可能需要如 WineHQ FAQ 中所述的网络访问权限。

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

如果在此之后出现问题(例如未处理的异常或特权指令),请通过以下方式移除:

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

用法

警告: 不要以 root 身份运行或安装 Wine 应用程序!有关详细信息,请参阅 Wine FAQ

有关 Wine 用法的一般信息,请参阅 Wine 用户指南

有关 Wine 中特定 Windows 应用程序的更多信息,请参阅 Wine 应用程序数据库 (AppDB)

Wayland

警告: 原生 Wayland 驱动程序仍处于实验阶段。

默认情况下,Wine 通过 Xwayland 在 Wayland 上运行,为大多数用户提供令人满意的体验。截至 9.0rc1 版本,Wine 在合并原生 Wayland 支持方面取得了实质性进展,现在使其适用于某些用例。

要体验最新 Wine 版本中添加的原生 Wayland 驱动程序,您可以按照以下步骤操作:

  • 对于低于 9.22 的 Wine 版本,运行以下命令来更改 Wine 注册表中的设置:
    $ wine reg add 'HKEY_CURRENT_USER\Software\Wine\Drivers' /v Graphics /t REG_SZ /d 'x11,wayland'
  • 绕过 Xwayland 的使用,并通过取消设置 DISPLAY 环境变量 来强制使用原生 Wayland 驱动程序:
    $ env -u DISPLAY wine example.exe

如果第二步导致 Wine 停止工作,请检查您的 Wine 版本是否构建了对新 Wayland 驱动程序的支持。

停止运行 Wine

使用 Ctrl+Z 停止已启动的可执行文件 wine 或使用 Ctrl+C 停止 wineconsole 可能会使进程在后台运行。例如,请参阅:

$ 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

所有正在运行的 winewineconsole 进程都使用 wineserver -k 命令一次性停止。例如:

$ wineserver -k 15

此命令是 WINEPREFIX 相关的,因此当使用自定义 Wine 前缀时,请运行:

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

优雅地结束上面示例中两个可执行文件的等效命令是:

$ kill 997 1021

技巧和窍门

Wineconsole

通常您可能需要运行 .exe 文件来修补游戏文件,例如旧游戏的宽屏补丁,并且正常通过 Wine 运行 .exe 文件可能没有任何反应。在这种情况下,您可以打开终端并运行以下命令:

$ wineconsole cmd

然后导航到该目录并从那里运行 .exe 文件。

Winetricks

Winetricks 是一个脚本,允许用户安装运行 Windows 程序所需的基本组件。可安装的组件包括 DirectX 9.x、MSXML(Microsoft Office 2007 和 Internet Explorer 所需)、Visual Runtime 库等等。

安装 winetricks 软件包(或 winetricks-gitAUR)。然后使用以下命令运行它:

$ winetricks

要使用 GUI,您可以安装 zenity(GTK) 或 kdialog(Qt)。

性能

CSMT

CSMT 是 Wine 使用的一项技术,它使用单独的线程来处理 OpenGL 调用,从而显著提高性能。自 Wine 3.2 以来,CSMT 默认启用。

请注意,CSMT 实际上可能会降低某些应用程序的性能 - 如果是这种情况,请运行 wine regedit 并将 HKEY_CURRENT_USER -> Software > Wine > Direct3D > csmt 的 DWORD 值设置为 0x00(禁用)来禁用它。

更多信息

与 CSMT 开发人员 Stefan Dösinger 的 Phoronix 论坛讨论

强制游戏使用 OpenGL 模式

某些游戏可能具有 OpenGL 模式,该模式的性能可能优于其默认的 DirectX 模式。虽然启用 OpenGL 渲染的步骤是应用程序特定的,但许多游戏接受 -opengl 参数。

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

您当然应该参考应用程序的文档和 Wine 的 AppDB 以获取此类特定于应用程序的信息。

VKD3D-Proton

注意: 尽管其名称中包含 Proton,但 DLL 与 Wine 的普通版本完美配合,并与 #DXVK 一起工作。

VKD3D-ProtonVKD3D 的一个分支,旨在实现使用 Vulkan 的完整 Direct3D 12 API。该项目是 Proton 中 Direct3D 12 支持的开发工作,提高了 DirectX 12 游戏的性能和兼容性。

要使用它,请安装 vkd3d-proton-mingwAURvkd3d-proton-binAUR。然后运行以下命令以在您的 Wineprefix (默认为 ~/.wine) 中激活它:

$ WINEPREFIX=your-prefix setup_vkd3d_proton install
警告: VKD3D-Proton 会覆盖 DirectX 12 DLL,这可能被认为是在线多人游戏中作弊,并可能导致您的帐户被封禁。使用风险自负!

DXVK

DXVK 是一个通过 Vulkan 实现 DirectX 9、10 和 11 的实现。在大多数游戏中,它的性能和兼容性都优于 WineD3D 驱动程序。它不支持 DirectX 12,请参阅 #VKD3D-Proton。DXVK 和 VKD3D-Proton 可以并且应该一起安装,以便能够支持所有 DirectX 版本。

要使用它,请安装 dxvk-mingwAURdxvk-binAUR。然后运行以下命令以在您的 Wineprefix (默认为 ~/.wine) 中激活它:

$ WINEPREFIX=your-prefix setup_dxvk install

在使用 DXVK 和双显卡设置时,Wine 优先使用独立显卡。在笔记本电脑上为了省电,可以覆盖此设置:

$ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/your_driver.json wine executable
HDR 支持

当与 Gamescope 配对使用时,DXVK (V2.1+) 为 HDR10 显示器提供支持(仅适用于 AMDGPU 用户)。有关详细信息,请参阅 HDR 显示器支持

Gallium Nine

当使用基于 Gallium 的 Mesa 驱动程序(主要是 AMD 和 Intel 显卡)时,有一个原生的 Gallium Direct3D 驱动程序,它为 DirectX 9 提供了良好的性能。它在很大程度上已经不受欢迎,因为有了 DXVK,但如果您没有 Vulkan 支持,您可能仍然会发现它很有用。DXVK 和 Gallium Nine 的性能应该大致相同

安装 wine-nine 以使用它。这是一个独立的软件包,可以与任何 Wine 版本一起安装。使用 wine ninewinecfg 检查是否已启用。

对于较旧的 Intel 显卡(gen4-7:GMA 3000、GMA 4500、HD 2000-5000;年份 2006-2014),自 Mesa 21.2 起,应使用 Crocus Gallium 驱动程序而不是 i965。导出以下环境变量,然后再运行 Wine:

MESA_LOADER_DRIVER_OVERRIDE=crocus

取消注册现有的 Wine 文件关联

默认情况下,Wine 接管许多格式的默认应用程序。某些格式(例如 vbschm)是 Windows 特有的,使用 Wine 打开它们可能很方便。但是,让其他格式(例如 gifjpegtxtjs)在 Wine 简陋的 Internet Explorer 和记事本模拟中打开可能会很烦人。

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 创建文件类型关联

注意: 这必须为每个 WINEPREFIX 完成,除非您选择更改 /usr/share/wine/wine.inf,否则不应更新文件关联。

此方法阻止创建文件类型关联,但保留创建 XDG .desktop 文件(您可能会在菜单中看到这些文件)。

如果您想通过 winecfg 阻止 Wine 创建文件类型关联,您必须取消选中“桌面集成”选项卡下的“管理文件关联”复选框。请参阅 Wine FAQ

要通过注册表进行相同的更改,请在以下位置添加字符串 Enable,值为 N

HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations

您可能必须先创建键 FileOpenAssociations

要通过命令行进行此更改,请运行以下命令:

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

如果您想为新的 WINEPREFIXES 默认应用此更改,请编辑 /usr/share/wine/wine.inf 并在 [Services] 部分下添加此行,例如:

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

为防止软件包升级覆盖修改后的文件,请创建一个 pacman hook 以自动进行更改:

/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 将正确处理它。

在游戏中显示 FPS 叠加

如果设置了环境变量 WINEDEBUG=fps,Wine 具有适用于所有图形应用程序的嵌入式 FPS 监视器。这会将帧率输出到 stdout。借助 xosd 软件包中的 osd_cat,您可以将 FPS 显示在窗口顶部。有关帮助脚本,请参阅 winefps.sh

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

警告: 这不是一个合适的沙箱解决方案,只会使用文件系统权限保护您的主目录。如果您想要一个沙箱,您应该使用像 firejailbubblewrap 这样的工具,这些工具不会带来需要 rootful Xorg 或出现音频问题的缺点。

可能需要在一个专门创建的用户帐户下运行 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/sh
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 程序中的音频可能无法正常工作。有关允许 Wine 用户访问主用户的 PulseAudio 守护程序的信息,请参阅 PulseAudio/Examples#Allowing multiple users to share a 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

如果系统或 Wine 前缀中不存在 Gecko 和/或 Mono,Wine 将提示从 Internet 下载它们。如果您不需要 Gecko 和/或 Mono,您可能希望通过将 WINEDLLOVERRIDES 环境变量 设置为 mscoree=d;mshtml=d 来禁用此对话框。

Vulkan

默认的 Wine Vulkan ICD 加载器适用于大多数应用程序,但不支持高级功能,例如 Vulkan 层。要使用这些功能,您必须安装官方 Vulkan SDK,请参阅原始 Vulkan 补丁作者的 GitHub 页面上的步骤 2-4。

移除 Wine 文件绑定

出于安全原因,移除预安装的 Wine 绑定可能很有用,这样 Windows 应用程序就无法直接从文件管理器或浏览器启动(Firefox 提供了直接使用 Wine 打开 EXE 文件的功能!)。如果您想这样做,您可以在 /etc/pacman.conf 中添加以下 NoExtract 行:

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

Wine 正在将其自己的应用程序设置为默认值

每次 Wine 创建(或更新)前缀时,它都会将其自己的捆绑应用程序(如记事本和 Winebrowser)设置为相应的默认文本编辑器和 Web 浏览器。

解决这种不良行为的一种方法是使用此环境变量

$ WINEDLLOVERRIDES=winemenubuilder.exe=d ...

WineASIO

如果您需要在 Wine 下获得专业的音频支持,您可以使用 wineasioAUR,它为 Wine 提供了一个 ASIO 接口,然后您可以将其与 JACK 一起使用。

为了使用 wineasio,您必须将自己添加到 realtime 用户组

接下来,您需要在您想要的 Wine 前缀中注册 wineasio。根据需要注册 32 位和/或 64 位版本:

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

禁用启动 explorer.exe

如果您在没有安装 X 的情况下运行文本模式(命令行用户界面)可执行文件,则在启动可执行文件时可能会出现这些错误:

0060:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0060:err:winediag:nodrv_CreateWindow L"The explorer process failed to start."
0060:err:systray:initialize_systray Could not create tray window

这是因为 wine 默认情况下启动 explorer.exe。根据 ps 输出,即使 wineconsole 也启动 explorer.exe /desktop

可以使用此环境设置禁用启动包括系统托盘在内的 explorer:

$ WINEDLLOVERRIDES="explorer.exe=d" wine program.exe

根据您的 CUI 程序,您也许可以通过禁用 services.exe 来以最低的内存占用量使用它:

$ WINEDLLOVERRIDES="explorer.exe,services.exe=d" wine program.exe

故障排除

有关一般提示,请参阅 Wine 用户指南Wine FAQ(尤其是其 故障排除 部分)。

另请参阅 Wine AppDB,以获取有关特定应用程序的建议。

常规安装问题

每个 Wine 前缀都有很多持久状态,介于已安装的程序和注册表之间。程序安装问题故障排除的第一步应该是创建一个隔离的前缀,或者通过 rm -rf ~/.wine 清除默认前缀。后者将删除您添加到默认前缀的任何程序和设置。

加载 libc.so.6 时出错

运行 Wine 时,您可能会收到以下错误:

$ wine cmd
/usr/bin/wine: error while loading shared libraries: libc.so.6: cannot create shared object descriptor: Operation not permitted

这是由 mmap2 的系统调用失败引起的。

mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 EPERM (Operation not permitted)

这是一个已知的 内核中的错误

vm.mmap_min_addr sysctl 值从默认值 65536 更改似乎可以解决问题:

# sysctl -w vm.mmap_min_addr=32768

Xwayland 问题

如果您在 Xwayland 下使用 Wine,您可以在 winecfg 的“图形”选项卡中激活“模拟虚拟桌面”选项,以避免以下问题:

  • 闪烁;
  • 窗口位置错误;
  • 鼠标光标位置和点击错误;
  • 键盘检测。

如果禁用虚拟桌面后,您无法再使用鼠标和键盘与 winecfg 窗口交互,您可以显式地在虚拟桌面上启动 winecfg 并重新启用它:

$ wine explorer /desktop=name,800x600 winecfg

当使用 Wayland 启动 GUI 窗口(例如 winecfg)时,如果没有显示窗口,并且控制台中出现以下错误:

$ wine winecfg
Authorization required, but no authorization protocol specified

008c:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
008c:err:winediag:nodrv_CreateWindow L"The explorer process failed to start."
008c:err:systray:initialize_systray Could not create tray window

您可以尝试将 DISPLAY 变量设置为 :1

$ DISPLAY=:1 wine winecfg

键盘输入无法工作

这可能是由窗口管理器未切换焦点引起的。在 winecfg图形选项卡中,禁用“允许窗口管理器...”选项,或使用“模拟虚拟桌面”设置窗口模式。

  • 有些人建议切换所有窗口设置,单击应用,然后将它们改回。如果这不起作用,请尝试上述方法。

如果键盘在应用程序失去焦点后无法工作,请尝试编辑注册表:

  • HKEY_CURRENT_USER\Software\Wine\X11 Driver 下,添加一个字符串值 UseTakeFocus 并将其设置为 N
  • 或者,您可以使用 winetricks 来设置该值:
    $ winetricks usetakefocus=n
    或使用 wine reg:
    $ wine reg add 'HKEY_CURRENT_USER\Software\Wine\X11 Driver' /t REG_SZ /v UseTakeFocus /d N /f

应用程序无法启动

一些较旧的游戏和应用程序假定当前的工作目录与可执行文件所在的目录相同。从其他位置启动这些可执行文件将阻止它们正确启动。在使用 Wine 之前,使用 cd path_containing_exe 排除这种可能性。

另请参阅