Mac使用Wine运行Windows软件 | Bruce's Blog
Wine简介
什么是Wine?
Wine是“WINE Is Not an Emulator”(WINE不是一个模拟器)的缩写,这种缩写是一种递归缩写,即把缩写本身又放进缩写的意思里面。
Wine 是一个可以在其他系统(比如 macOS、Linux、Android)上运行 Windows 程序的轻量级兼容层。Wine 和虚拟机、模拟器不同,Wine 只翻译 Windows 系统调用,所以应用程序可以获得接近原生程序的性能。依托这个原理,Windows 游戏和应用程序运行时不会占用大量内存,也没有性能损耗,Windows 程序就如同原生程序一般在您的系统高效运行,并且高度集成。甚至在某些情况下,应用程序在 Wine 运行还可以获得比在 Windows 下还要优越的表现。
Wine与虚拟机的区别
Wine与虚拟机不同的是,Wine只是对Windows Api的Linux实现或Mac实现,而虚拟机是对硬件的模拟,简单的说,Wine是一个能让Windows程序在Mac/Linux等系统上运行的工具。
Wine的相对于虚拟机的优点:
当你需要打开Windows软件的时候,直接用Wine打开即可,不需要像虚拟机那样先启动虚拟机,所以打开软件的速度上比虚拟机快很多(即使虚拟机只是睡眠了,启动速度也未必有Wine快)。
Wine本身占用资源极少,而虚拟机就算不启动程序,也会因为Windows系统本身的启动而占用很多系统资源,直观的反应就是Mac发热增加,风扇呼呼转(如果你在外没有插电源,那么这会让你电池的电消耗的更快,意味着你能用的时间就短了)。
Wine让你的感觉Windows软件和Mac是融为一体的,而不是在另一个系统里的,虽然虚拟机的融合模式也能做到这个,但是流畅性并没有Wine的强(这个不是绝对,说流畅性没有Wine强,一个原因是虚拟机占用资源多,另一个原因是我有时候不想用Win软件就把虚拟机睡眠,要用的时候又打开,这么一来一去,有时候恢复会有问题,反正使用体验不好)。
Wine的相对于虚拟机的缺点:
虚拟机可以安装任何系统,进而在安装的系统里安装软件,而Wine只能让你运行Windows软件(因为它本身就是为Windows而生的)。
假如你虚拟机安装的Windows系统,理论上虚拟机能运行任何Windows系统能运行的软件,但Wine并不一定能,可能有些Windows软件无法用Wine启动。
该用Wine还是虚拟机:
看情况,如果你只是想平时运行一个两个Windows软件,那么可以用Wine,如果你需要一个完整的Windows系统来做一些实验之类的那只能用虚拟机,比如我写这篇文章,就是因为我要用网易云音乐上传自己下载的歌到《我的音乐云盘》里,而Mac版虽然有我的音乐云盘,也能听里面的歌,但却没有上传功能,所以我只能用Windows版的,但平时我又不开其它的Windows软件,没必要为了用一个网易云音乐而开一个虚拟机占用这么多系统资源,搞的我电脑发烫、风扇呼呼转。
Wine的种类
Wine
WineBottler
PlayOnMac
WineSkin
CrossOver
事实上Wine只有一种,它的官网是WineHQ,其余四种都是基于Wine的,因为Wine是开源的(Github)。
Wine的开源代码是CrossOver所属公司CodeWeavers开发的,当然后面由于有开源爱好者的加入,所以现在的Wine的源码贡献除了大概2/3来自CodeWeavers,也有大概1/3的代码来自开源代码贡献者。所以CrossOver就相当于Wine的商业版,它是所有Wine里面更新的最快,匹配新系统最快的,这也因为它是收费软件的原因。
WineBottler是一个开发者的业余爱好,所以更新比较慢,PlayOnMac是专注于在Mac上玩Windows游戏的,WineSkin貌似也与WineBottler类似,不过它已经很老了,最新的都在2017年。
在Mac上安装WINE
安装Wine
理论上Wine是可以直接用brew安装的,但事实上我测试了用brew install wine
安装的还是sierra的版本,而我现在系统是Mojave,所以还是手动下载Mac WINE安装吧。
其中第一个Stable是稳定版,Development是开发版,而Staging是待发布的,真机测试的版本,是在发布Stable之前模拟测试的版本,由于写本文时发现稳定版跟Staging版版本号相差挺多的,所以我下了Staging版本:
Wine需要xquartz的支持,如果没有安装xquartz就直接安装Wine会报以下错误(xquartz是苹果系统中支持窗口界面的一个项目):
所以我们要先安装xquartz,使用如下代码即可安装(当然也可以自己下载安装包来安装):
brew cask install xquartz
用brew安装xquartz的输出信息(到最后一步要输入管理员密码):
brew cask install xquartz ==> Satisfying dependencies ==> Downloading https://dl.bintray.com/xquartz/downloads/XQuartz-2.7.11.dmg ######################################################################## 100.0%^@ ==> Verifying SHA-256 checksum for Cask 'xquartz'. ==> Installing Cask xquartz ==> Running installer for xquartz; your password may be necessary. ==> Package installers may write to any location; options such as --appdir are ignored. Password: Sorry, try again. Password: ^@installer: Package name is XQuartz 2.7.11 installer: Installing at base path / installer: The install was successful. 🍺 xquartz was successfully installed!
安装完xquartz后再双击安装Wine,按下图选择(即让所有用户都可以使用):
勾选64位支持(避免到时你要用它运行一些64位的软件):
点击安装:
安装完后有这个图标:
但不幸的是,你点击上图的图标并不会有一个Wine的界面跳出来,而是直接弹出一个终端界面,告诉你如果要运行Wine,可以用以下的命令(所以说这是一个只能用命令操作的Wine):
操作的命令非常简单,wine /path/to/xxxx.exe
(即wine命令空一格,然后放上.exe
程序的路径,回车即可运行):
################################################################################ # Wine Is Not an Emulator # ################################################################################ Welcome to wine-4.13 (Staging). In order to start a program: .exe: wine program.exe .msi: wine msiexec /i program.msi If you want to configure wine: winecfg To get information about app compatibility: appdb Program Name
要运行wine的命令,我们需要把wine的命令加入到环境变量中,在~/.bashrc
或~/.zshrc
文件中添加如下配置(如果你安装的是Stable版就要把Staging修改为Stable)
export PATH=/Applications/Wine\ Staging.app/Contents/Resources/wine/bin:$PATH
然后source一下使刚刚添加的环境变量生效
# 默认用这个 source ~/.bashrc # 如果你安装过zsh,那就用这个 source ~/.zshrc
安装winecfg(用于配置wine)
在终端输入winecfg
回车,由于默认没有这个命令,它会弹出提示下载(Download),点击Download即可:
安装的过程中会弹出这个(没安装完就弹出来了):
提示安装就点安装:
安装好之后,要把wine的命令目录放到环境变量里,在~/.bashrc
或~/.zshrc
中添加以下代码(其中app名字我的是“Wine\ Staging.app”,如果是stable版本,也许是“Wine.app”,总之要保证路径存在):
export PATH=/Applications/Wine\ Staging.app/Contents/Resources/wine/bin:$PATH
再读取一下修改后的配置:source ~/.bashrc
或source ~/.zshrc
,读取配置后,用which wine
命令查看一下是否正确加入了环境变量,如果加入了,那么会有一个路径出来,如果没有加载,那就什么都没有,这样就要检查路径是否对了。
用Wine运行Windows程序
Wine运行windows程序要使用命令运行,命令非常简单:
wine /path/to/xxxx.exe
对于少数不是.exe
的windows程序,比如.msi
格式的,要这样执行
wine msiexec /i /path/to/xxxx.exe
对于安装包来说,可以用这种方式运行,因为安装只安装一次,但对于启动已经安装好的程序来说,每次用命令就显得麻烦。
其实比较好的方法是在~/.bashrc
或./.zshrc
中添加一个alias,比如我这个,直接在终端敲netease
回车,就打开了:
alias netease='wine ~/.wine/drive_c/Program\ Files\ \(x86\)/Netease/CloudMusic/cloudmusic.exe'
当然也可以直接右击xxxx.exe
然后选择使用Wine打开:
然后就会显示软件的安装界面,就跟在Windows下一样安装,不过安装路径你可以选,你可以选一个Mac的路径安装,也可以默认安装在C盘,但其实这个“C盘”是在你的用户目录下的.wine
目录里面的,不过.wine
目录由于是.
开头,所以是隐藏目录,默认你是看不见的,要按command+shift+.
才会显示(再次按就隐藏回去),这个C盘的路径为~/.wine/drive_c
,进去就会发现里面的目录结构是跟真正的Windows的C盘结构是一样的。
下图就是我把网易云音乐安装到C盘后的路径,最终能运行的是cloudmusic.exe那个文件,要运行它,也是一样wine+路径,当然也可以右击它,选择使用Wine.app打开(装Windows版是为了使用它的上传音乐到我的音乐云盘的功能,Mac版没有上传功能):
但是按上面的方法,每次要找到它来启动也太麻烦了,所以不建议安装到C盘,而是自己建一个文件夹,比如我在家目录下创建一个文件夹,然后把它拖到方面的左侧栏里:
然后把所有程序都安装到WineSoftwares文件夹里面,要运行的时候,就找到里面的.exe
文件,然后在终端输入wine
,空格,然后把这里的.exe
文件拽到终端里,回车即可运行。
当然也可以把软件都装到默认的C盘,然后把C盘直接拖到访达左侧,这样也能快速访问到C盘。
在Wine官网有一个AppDB,它是用于记录一些Windows的软件是否已经在Wine上测试过可用,我看貌似没太大参考价值,因为我看上面的网易云音乐是1.9.2测试过,但现在都2.5.5了而且我也能正常用。
解决乱码问题
一般来说,只要在~/.bashrc
或~/.zshrc
中添加这个环境变量应试是可以解决
export LC_ALL=zh_CN.UTF-8
注意添加后要source一下。其实对一般人来说可能不添加也能解决,毕竟一般默认应该就有这个环境变量,而我这边要添加是因为我系统语言用的英文。
如果上面方法解决不了,则要用以下方法(但同时上边方法也得用)。
去网上下载一个simsun
(新宋体)字体,一般解压后你能看到有simsun.ttf
和simsun.ttc
文件,我们双击simsun.ttf
点击安装,即会自动安装到macOS字体文件目录~/Library/Fonts/
中。
安装后,我们要把该字体文件创建一个软链接到wine
下的windows系统字体文件夹中,直接使用以下命令即可
ln -s ~/Library/Fonts/simsun.ttf ~/.wine/drive_c/windows/fonts/simsun.ttf
打开wine的windows系统注册表文件
vim ~/.wine/system.reg
在里面搜索LogPixels
,应该能搜索到下图所示的配置,其中的00000060
表示分辨率(十六进制),单位是DPI
用在线转换工具可以看到十六进制的60是十进制的96,适当增加这个数字有助于提高wine运行的windows程序界面文字的清晰度,比如有些人把它改为70
修改win.ini
vim ~/.wine/drive_c/windows/win.ini
在win.ini
最后添加以下配置(主要是配置菜单等的文字大小,如果你觉得不合适,可以改一下数字)
[Desktop] menufontsize=13 messagefontsize=13 statusfontsize=13 IconTitleSize=13
更改注册表,把以下内容保存到一个文件中wine_zh.reg
(其实文件名随意,只要使用的时候用上你写的这个文件名即可)
REGEDIT4 [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes] "Arial"="simsun" "Arial CE,238"="simsun" "Arial CYR,204"="simsun" "Arial Greek,161"="simsun" "Arial TUR,162"="simsun" "Courier New"="simsun" "Courier New CE,238"="simsun" "Courier New CYR,204"="simsun" "Courier New Greek,161"="simsun" "Courier New TUR,162"="simsun" "FixedSys"="simsun" "Helv"="simsun" "Helvetica"="simsun" "MS Sans Serif"="simsun" "MS Shell Dlg"="simsun" "MS Shell Dlg 2"="simsun" "System"="simsun" "Tahoma"="simsun" "Times"="simsun" "Times New Roman CE,238"="simsun" "Times New Roman CYR,204"="simsun" "Times New Roman Greek,161"="simsun" "Times New Roman TUR,162"="simsun" "Tms Rmn"="simsun"
在Mac的终端中,使用以下命令把刚刚创建的注册表文件添加到注册表中
regedit wine_zh.reg
你也许会奇怪,Mac上哪来regedit这个命令?这不是Windows的注册表命令吗?其实它是你安装Wine之后才有的,而且我们在~/.bashrc
中添加了wine环境变量才有的。
到这里,配置就完成了,现在用wine运行你的windows程序看看,还乱码不?
对了,再提一下,别忘了在~/.bashrc
或~/.zshrc
中添加这个环境变量然后source一下
export LC_ALL=zh_CN.UTF-8
安装WineBottler
WineBottler的更新比较慢,都是作者自己晚上业余时间写的,这只是它的hobby(业余爱好),所以支持的Mac系统版本也比较旧(虽然写着支持High Sierra,Mojave的上一个版本,但其实是支持Mojave的),而且这个作者竟然还有微博。
下载WineBottler后,按这个安装:WineBottler。
安装CrossOver
CrossOver是收费软件,149RMB永久授权,其实不贵,如果要方便,可以买这个CrossOver for Mac 18 简体中文【标准版 + Mac】,这是官网安装教程:如何在 Mac 上安装 CrossOver。
参考:Mac下安装与使用Wine4最全指导。