Mac下安装与使用Wine4最全指导

  • A+
所属分类:MAC应用软件

Wine/CrossOver最近终于释出了4.0正式版,支持了Vulkan等新功能。作为折腾党,第一时间试用了下Wine4.0在Mac下的表现,愿意折腾的可以试试。
Mac下安装与使用Wine4最全指导
原理
Wine可以看作ELF解释器(Interceptor),并实现了WindowsAPI(自己手写一套)与DirectX(基于OpenGL)的Runtime,因此可以复用native的性能,而不用虚拟机去执行虚拟指令集。缺点也明显,上手有一定难度(类似于黑苹果的黑箱调试),需要找DLL与改各种配置,并对日志进行定位分析。

而Wine的商业版CrossOver是在Wine的基础上新增了GUI界面,定制了Wine的二进制,并维护了很多配置文件(比如到底用哪个DLL更好),相当于花了150去买自动配置好的文件,节约了时间,目前CrossOver使用的是3.14(Update Apr 24: 已经升级到4.0)版Wine。它的缺点是日志报错不能直接打印到StdOut,难以调试。

此外还有PortingKit方案。它基于wineskin,融合exe与winelib生成一个App,不过它对应的Wine版本也是3,此方案适用于运行游戏,缺点是占空间,配置更新维护没有CrossOver快,因此这些均不在介绍。

上述均不能保证程序全部正常运行,运行不来的还是要靠虚拟机。

安装
开源版wine的安装
安装过程建议如下

# 请不要用brew安装,而是直接到官网安装pkg,因为brew更新较慢,而且没有“用Wine打开”这个菜单
# https://dl.winehq.org/wine-builds/macosx/download.html

# 安装wine包管理(自动帮你下载与执行注册表)
# 这里有一堆现成的APP
# https://github.com/Winetricks/winetricks/blob/master/files/verbs/all.txt
brew install winetricks
此外可以参考ArchLinux的安装过程

收费版CrossOver的安装
直接点击安装即可。

公共的配置
此部分主要是做对照实验时使用,并防止重装后丢失数据。

首先CrossOver安装完成后,新建一个/win7-64的容器

接着将如下代码复制到~/.bashrc中(或者zshrc,取决于你的Shell)

function wine_common(){
function lk_folder(){
echo "link $1 to $2"
mkdir -p $1
mkdir -p $2
ln -sfn "$1" $2
}
export WINEARCH=win64
export WINEPREFIX=$1
mkdir -p $WINEPREFIX
# 防止程序信息丢失,直接放在Mac下
v_user="${WINEPREFIX}/drive_c/users/$3/"
lk_folder "${HOME}/Documents/wine/Application Data/" $v_user
lk_folder "${HOME}/Documents/wine/AppData/" $v_user
lk_folder "${HOME}/Documents/wine/Local Settings/" $v_user

lk_folder "${HOME}/Documents/wine/My Documents/" $v_user
lk_folder "${HOME}/Documents/wine/My Music/" $v_user
lk_folder "${HOME}/Documents/wine/My Pictures/" $v_user
lk_folder "${HOME}/Documents/wine/My Videos/" $v_user

# configurate path
export PATH=$(echo $PATH|tr ':' '\n'|grep -v wine|grep -v CrossOver|tr '\n' ':')
export PATH=$PATH:$2
# configurate language
export LC_ALL="en_US.UTF-8";
echo $v_user
# 可以看出收费版的Wine信息输出是不一样的
wine --version
}
function switch_wine(){
WINE_BIN="/Applications/Wine Staging.app/Contents/Resources/wine/bin"
WINEPREFIX=$HOME/.wine
wine_common ${WINEPREFIX} ${WINE_BIN} $USER
}
function switch_co(){
BOTTLE_NAME=win7-64
WINE_BIN='/Applications/CrossOver.app/Contents/SharedSupport/CrossOver/CrossOver-Hosted Application'
WINEPREFIX="$HOME/Library/Application Support/CrossOver/Bottles/$BOTTLE_NAME"
Bottles=$(dirname ${WINEPREFIX})
ln -sfn "$Bottles/$BOTTLE_NAME" "$Bottles/default"
v_users=${WINEPREFIX}/drive_c/users
wine_common ${WINEPREFIX} ${WINE_BIN} crossover
}

switch_wine
这样同时安装免费版与商业版的优点是可以随意切换env(商业的4.x与Dev的4.x),而且数据可以共享(大部分配置全部都可以归档到Document下)

使用
大部分简单的APP可以通过如下使用

# 切换到社区版 switch_wine
# 切换到商业版 switch_co
wine xxx.exe
For DirectX Game
到此为止,大部分非3D游戏应该都可以运行了。但是要强调一下,Mac下渲染默认是基于OpenGL实现的,因此性能与虚拟机也好不到哪去,不要有过高期望。

我个人不推荐安装这里的任何dll,如果有问题,只能试试看而已。

DirectX9
虽然Wine已经完整实现并Build in了DirectX9,但是如果有兼容问题,可以考虑如下方案

# DX9, 10+不相互兼容,需要各自下载各自的,以9为例
# 这里有安装完全包(directx9)与DLL的方案,官方更推荐DLL(d3dx9_36)方案
# 我个人更喜欢安装这个
winetricks directx9
如果还是不能运行,那么就只能换DX的版本或者换Wine的版本了

另外注册表参数CSMT虽然在网上说有用(CrossOver中叫做Performance Enhanced Graphics),但是实际没有较大的提升

DirectX10+
在Wine中Mac下暂时没有找到实现,只有部分Hack的博文。原因是在Mac下,DX10通过如下实现 Metal -> MoltenVK -> Vulkan -> DX10。但是目前支持并不完善,所有DX10与Vulkan都没有实现(dxvk)。同时由于Mac本身性能就一般,所以这里就不折腾了。

而在CrossOver下,商业版支持了部分DX10+的API,但是总体上只可以看成一个Stub,并非完全支持。

关于.NetFrameWork
net框架是向前兼容的,理论上安装最新的就可以的,但是我个人建议需要哪个就安装哪个,因为winetricks的依赖管理很复杂,不要强求最新的

一般用Wine自己实现的Net框架Mono是最方便的,注意版本号以此文件实时为准

wine uninstaller --remove '{E45D8920-A758-4088-B6C6-31DBB276992E}'
wine msiexec /i wine-mono-4.7.5.msi
除此之外,还有如下实现方式

# install Net 3.5
winetricks dotnet35
而在CrossOver下会自动帮你安装好mono

结论
与虚拟机的对比
Wine方案(包括CrossOver)总体来说,在Mac下使用范围还是有限,适合喜欢折腾的用户。因为Mac下非游戏类的软件均有替代方案,甚至比Windows下功能更强;而游戏由于OpenGL先天性能不行导致只是比虚拟机性能略高,但是散热更低(风扇不会太响),可能有渲染错位,FS性能比虚拟机弱(可能是运行时转换DLL导致,需要PreLoader)的问题。当然这些是与付费软件Parallels对比的,有失公平。

此外还有一点,为了提高易用性,Wine方案安全隔离完全不够,权限与普通用户一致,没有做到Namespace隔离,因此建议只运行可信来源的软件。

因此在目前场景下,Wine比较适合中小型软件/游戏的使用,以及白名单中的应用。最佳方案还是大硬盘+安全虚拟机综合效果更好

Wine各个版本的性能对比
普通软件使用任何Wrapper均可运行

游戏此处有点玄学了,目前3与4并拉不开差距,我个人测试如下(均安装了官网DX9)

PortingKit/Wine4/Wine3(性能强,兼容弱) > CrossOver > Wine
需要等到Wine4支持Mac下的Meta绘图框架后,性能才会拉开明显的差距

其它配置
主题
配置主题(底层是WinXP实现),可选操作,强迫症专用

建议配置稳定后再安装,具体可以在Nick-zone下载

# 主题文件夹
mkdir -p $HOME/.wine/drive_c/windows/Resources/Themes
# 下载拷贝到themes目录
字体
解决乱码问题,网上有直接替换user.reg或者system.reg的方案,我个人不推荐,因为这两个可以看作序列化缓存,不应该手动修改,缺点是没有复用Mac下的字体

# 安装一堆CJK字体,能用就行
winetricks cjkfonts
接着配置

cd $HOME/.wine
cat > font_settings.reg << EOF REGEDIT4 [HKEY_CURRENT_USER\Software\Wine\X11 Driver] "ClientSideWithRender"="N" EOF # 导入此文件 wine regedit font_settings.reg 如果有乱码问题,可以配置宿主语言或者传递如下变量,不需要LocaleEmulator等工具 # https://wiki.winehq.org/Testing_Languages # ja_JP, en_US export LC_ALL="zh_CN.UTF-8"; 卸载Wine 详见此Wiki 如果需要删除缓存 rm -rf ~/.cache/winetricks 常见报错处理 Q: Unhandled exception: page fault on read access A: 这种一般是找不到库导致的,有的程序自嵌所有的库,有的必须找Windows Q: fixme xxx A: 根据调试经验,除了CG渲染,Fixme相关报错一般与主报错关系不大。建议使用二分法定位。 Q: PresentationFramework, Version=3.0.0.0, Culture A: 安装相应的net库 Q: 如何彻底重装? A: 直接rm -rf ${WINEPREFIX}(慎重执行)即可,winetricks下载的缓存在~/.cache/winetricks中,不会重复下载 Q: 还是无法运行某程序 A: 尝试下载使用旧版,通过二分法定位

文件下载 wine for Mac安装包
下载地址

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: