Wine
Wine 是一款可以在类 Unix 操作系统上运行微软 Windows 应用程序的兼容层。在 Wine 中运行的程序可以像本地程序一样运行,而没有模拟器的性能/内存损失。
- Wine 并非与你的系统隔离。
- 如果你可以使用你的用户帐户访问某个文件或资源,那么在 Wine 中运行的程序也可以。参见#在单独的用户帐户下运行 Wine和安全#沙盒程序了解可能的预防措施。
- Wine 也可以运行恶意软件(参见 Wine 关于恶意软件兼容性的 FAQ)
安装[编辑 | 编辑源代码]
首先启用multilib仓库,然后安装 wine包(开发版),wine-stableAUR(稳定版)或 wine-staging包(测试版本)。Wine Staging 是 Wine 的修补版本, 其中包含了漏洞修复和尚未集成到稳定或开发分支中的特性。
可以考虑为依赖于 Internet Explorer 和 .NET 的应用程序分别安装 wine-gecko包 和 wine-mono包。这两个软件包不是一定要安装的,因为 Wine 会根据需要自行下载相关文件。反过来说,如果提前安装了软件包,Wine 就不需要再下载这些文件了。
可选依赖项[编辑 | 编辑源代码]
Wine 有许多可选依赖项,简单的应用程序可能不需要这些依赖项,但如果希望使用声音、3D 图形、视频播放等功能,则应安装这些依赖项。
请注意,许多 Windows 应用程序都是 32 位的,因此需要 32 位版本的相应库,其中有些库仅在 AUR 上提供。标准(64 位)库可用于 64 位应用程序,如果运行的 Wine 版本采用新的 WoW64 模式(参见#安装中的说明),则可用于任何应用程序。使用 file(1) 命令可以检查 Windows 可执行文件是否为 64 位。
图形驱动程序[编辑 | 编辑源代码]
当你需要安装 32 位版本的图形驱动程序时。请安装 Xorg#驱动安装页面中 OpenGL (multilib) 一栏列出的软件包。
当 Wine 在你的终端窗口中报告以下内容时,你的驱动程序可能没有正确安装或配置:
Direct rendering is disabled, most likely your OpenGL drivers have not been installed correctly
声音[编辑 | 编辑源代码]
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包
MIDI支持[编辑 | 编辑源代码]
MIDI 是一种从 20 世纪 90 年代开始被广泛使用的音乐系统。如果您使用 Wine 游玩使用了相关技术的老游戏,可能会发现游戏音乐无法正常播放。 事实上 Wine 提供了非常好的 MIDI 支持,但前提是您的主机系统也支持 MIDI,相关内容请参阅英文页面。 最后需要注意的是,请确保 Wine 使用了正确的 MIDI 输出。
其他依赖[编辑 | 编辑源代码]
部分应用可能会需要其他的依赖(参考 WineHQ 页面)
- TLS 的 32 位支持可以安装 lib32-gnutls包
- 手柄和游戏杆的 32 位支持可以安装 lib32-sdl2包
- 媒体播放的 32 位支持可以根据需求安装 lib32-gst-plugins-base包、 lib32-gst-plugins-good包、lib32-gst-plugins-badAUR、lib32-gst-plugins-uglyAUR 和 lib32-gst-libavAUR
- 对于 NTLM 验证可以安装 samba包
WINEPREFIX 内部依赖[编辑 | 编辑源代码]
除了系统依赖项之外,一些程序还需要额外的字体或 dll 库文件,这时您可以将相关内容复制或安装到 #WINEPREFIX 中(相关说明可以参考 WineHQ 页面)。
我们姑且将上面这种依赖情况称为“WINEPREFIX 内部依赖(In-prefix dependencies)”。
您可以尝试使用 Winetricks 来满足一些程序的依赖。它像一个简陋的“包管理器”,通过安装一些软件及应用相关配置来满足不同程序的运行需求。关于它的安装和使用可以参考下文的 #Winetricks 章节。
由于依赖关系之间的冲突,您可能无法创建可以运行所有程序的“完美”运行环境 [2] [3]。建议您将前缀(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前缀和运行管理器。
- CrossOver — 收费的商用官方 Wine。提供更多的终端用户支援和图形化界面。
- icoextract — Windows 的可执行程序 (.exe 和 .dll) 的图标生成器。
- Lutris — 一个游戏启动器(附前缀管理功能),支持Wine上的游戏以及Linux原生游戏。
- PlayOnLinux — 图形化 Wine 前缀管理器。包括脚本协助程序的安装与配置。
- PyWinery — 为 Wine 打造的简单前缀管理器。
- Q4Wine — 给 Wine 的图形化前缀管理器。为更好地设计统一,可以使用Qt主题到 Wine 设置中。
- WINEgui — 用户友好的 wine 图形界面
配置[编辑 | 编辑源代码]
配置 Wine 通常使用以下方法:
- winecfg 是 Wine 的 GUI 配置工具,可以通过运行
winecfg
来启动。 - regedit 是 Wine 的注册表编辑工具,可以通过运行
regedit
来启动。另见 WineHQ 关于有用的注册表键的文档。 - control 是 Wine 的 Windows 控制面板的实现,可以通过运行
wine control
来启动。 - 完整列表见 WineHQ 的命令列表。
WINEPREFIX[编辑 | 编辑源代码]
默认情况下,Wine 将其配置文件和安装的 Windows 程序存储在 ~/.wine
,通常会把此目录叫作“Wine prefix”或“Wine bottle”。当您运行 Windows 程序或 Wine 的捆绑程序(如 winecfg)时,它会自动创建/更新。前缀目录还包含一个目录,您的 Windows 程序将其视为 c:
( C 盘)。
您可以通过 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 盘目录和注册表配置。
若要在不运行 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 服务并运行 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
相关内容详见[4]。
桌面项(快捷方式)[编辑 | 编辑源代码]
当使用 Windows 应用的安装程序尝试创建快捷方式时,Wine 会创建对应的 .desktop 文件。Arch Linux 中这些文件的默认位置是:
- 桌面快捷方式位于
~/Desktop
下。 - 开始菜单条目位于
~/.local/share/applications/wine/Programs/
下。
.desktop
文件放到 /usr/share/applications
中。详见 WineHQ bug 11112wine 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 创建的 MIME 绑定,可以执行以下命令(摘自 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
选择对应的主题。
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
使用[编辑 | 编辑源代码]
Wine 用户手册可以为您提供 Wine 使用说明。
Wine 程序数据库(AppDB)可以提供部分特定 Windows 程序在 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 被默认启用。
更多:
强制使用OpenGL模式运行游戏[编辑 | 编辑源代码]
有些游戏可能有 OpenGL 模式,其性能可能比其默认的 DirectX 模式更好。虽然启用 OpenGL 渲染的是 "特定应用",但许多游戏可以使用 -opengl
参数。
$ wine /path/to/3d_game.exe -opengl
你应该参考你的应用程序文档和 Wine 的官网 AppDB 来了解这些应用程序的具体信息。
VKD3D-Proton[编辑 | 编辑源代码]
VKD3D-Proton 是 VKD3D 的一个 fork,这旨在用 Vulkan 实现完整的 Direct3D 12 API。该项目是 Proton 中 Direct3D 12 支持的开发项目,旨在提高 DirectX 12 游戏的性能和兼容性。
为使用它,安装 vkd3d-proton-binAUR。然后运行下面的指令来在你的 Wine 前缀中激活它(默认是 ~/.wine
)。
$ WINEPREFIX=your-prefix setup_vkd3d_proton install
DXVK[编辑 | 编辑源代码]
DXVK 是在 Vulkan 上对 DirectX 9、10 和 11 的一个可能的新实现。这应该有更好的性能,在某些情况下,甚至更好的兼容性。例如,《战地1》在 DXVK 下运行。另一方面,DXVK 并不支持所有的 Wine 游戏(目前)。
安装 dxvk-binAUR 以使用它. 然后运行以下命令,在 wine 前缀中激活它(默认为 ~/.wine
):
$ WINEPREFIX=your-prefix setup_dxvk install
Gallium Nine[编辑 | 编辑源代码]
这里是Gallium Direct3D state tracker,协同开源的基于 gallium 的驱动(可用于绝大部分的 AMD 与 Intel 显卡),目标是可提供接近真实的 DirectX 9 性能。在大多数情况下,它相对上游 wine 故障更少,却拥有着加倍的性能。相对于 CSMT,它消耗更少的 CPU 分时。
安装 wine-nine包 来使用它。这是个单独包,可以同任何 wine 版本一起安装。使用 wine ninewinecfg
来检查它是否启用。
对于老 Intel 显示卡(en4-7: GMA 3000, GMA 4500, HD 2000-5000; 2006-2014 年),自 Mesa 21.2 开始,Crocus Gallium 驱动需要使用 i965 。Export 这个环境变量在运行 wine 之前:
MESA_LOADER_DRIVER_OVERRIDE=crocus
取消注册已经存在的Wine档案关联[编辑 | 编辑源代码]
默认情况下,Wine 接管了许多格式的默认程序。一些(例如 vbs
或是 chm
)都是 Windows 独有的,并且用 Wine 打开他们是方便的。但是,很多其它的格式(例如 gif
、{{ic}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 创建文件关联[编辑 | 编辑源代码]
/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'
See Pacman#Hooks
自动使用 Wine 执行 Windows 程序[编辑 | 编辑源代码]
wine包 软件包会安装一个 binfmt 文件,这可使你能够直接运行 Windows 程序,例如,./myprogram.exe
将与 wine ./myprogram.exe
效果相同。服务默认在开机时启动,如果在安装 Wine 之后还没有重启过,启动 systemd-binfmt.service
即可。
双显示器具有不同的分辨率[编辑 | 编辑源代码]
如果您在双显示器设置与不同的显示分辨率方面有问题,这可能是缺少了 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,或者继续阅读......
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
的 [options]
部分。
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 用户指北和 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 维基
- Wine 程序数据库 (AppDB) - 关于运行一些特定的 Windows 程序的讯息 (已知问题、指北、等级、其它关于程序的讯息)
- Wine 论坛 - 一个问问题的好地方在你看了 FAQ 和 AppDB 后。
- Gentoo:Wine
- Darling - 一个模拟 MacOS 程序的小项目
- WineASIO - WineASIO 项目的 Github Page,有更多的讯息。