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
目录并创建一个新的Wine环境通过使用$WINEARCH=win32 winecfg
。这将给你一个32位Wine环境。不设置WINEARCH
将给你一个64位环境。
你可以通过修改WINEPREFIX
来创建一个分开的win32
和win64
环境:
$ 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"
另一种可能性是在Wine前缀中安装微软的 TrueType 字体。详见微软字体。 如果这没有帮助,请先运行winetricks corefonts
,如果依然不能,请运行 winetricks allfonts
。
运行此类程序后,关闭所有 Wine 服务并运行 winecfg
。字体现在应该是可读的。
如果字体看起来模糊不清,导入以下文本文件到 Wine 注册表regedit:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Wine\X11 Driver] "ClientSideWithRender"="N"
对于高分辨率显示,可以在 winecfg 中调整 dpi 值。
启用平滑字体[编辑 | 编辑源代码]
提高Wine渲染效果的一个好方法是使用cleartype平滑字体。 若要启用“次像素平滑(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/
下。
/usr/share/applications
下。详见 WineHQ bug 11112wine winemenubuilder
也许能帮得上忙。为Wine utilities创建菜单项[编辑 | 编辑源代码]
默认情况下,Wine 的安装不会为 Wine 附带的软件创建桌面菜单/图标(例如“ winecfg”、“ winebroserer”等)。这可以通过安装 wine-installerAUR或 wine-installer-gitAUR meta-package (后者没有附加依赖项)来实现,否则这些说明将为这些应用程序添加条目。
首先,使用 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/
.
除了通过 Wine 删除不需要的扩展绑定,还可以执行以下命令(摘自 Wine 官网) :
$ 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 外观的主题可以在这里下载. 为安装它,见上游维基文档. 最后,用 winecfg 选择它。
Zune
目录和Zune.theme
档案自32位前缀中的drive_c/Windows/Resources/Themes
目录到你常用的前缀。测试版Wine用户也许想要尝试启用Enable GTK3 Theming在winecfg的测试部分作为一个主题匹配正在使用的GTK主题。
打印[编辑 | 编辑源代码]
为了在Wine程序中使用已安装的打印机(包括本地与网路的)在 win32 前缀(如微软 Word ),安装lib32-libcups包包,使用(wineboot)重启 wine,然后重新启动你的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
使用[编辑 | 编辑源代码]
见Wine用户手册以获得Wine使用中的通用讯息。
见Wine程序数据库(AppDB)以获得Wine中特殊Windows程序的附加讯息。
Wayland[编辑 | 编辑源代码]
Wine 当前并不直接支持 Wayland,但你可以使用 XWayland。
这有一些支持 Wayland 的努力:
- wine-wayland:一个 Wine 的定制版本,可支持 Wayland 通过 Vulkan(所以它只支持Direct9、10和11通过#DXVK和 Vulkan 完全支持的程序)。
提示与技巧[编辑 | 编辑源代码]
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,有更多的讯息。