本篇講類unix系統(tǒng)下的用以模擬運行Windows程序的wine
。會從普通使用者的比較實用的角度去講。有專為國內(nèi)用戶準備的內(nèi)容。
本篇面向有Linux經(jīng)驗但對wine不熟悉的人。
wine是不可靠的,自用可以,生產(chǎn)環(huán)境和嚴格環(huán)境中千萬別用。
一般越舊的Windows程序wine越容易模擬運行成功(或部分功能成功)。請先在官方wine Application Database上查你想運行的程序的別人的模擬結(jié)果(官方搜索不好用,可以用Google加 site:appdb.winehq.org
),看Test Results:
Rating一列由運行結(jié)果好到壞為Platinum、Gold、Silver、Bronze、Garbage
看他們當時所用的wine版本和程序版本。有些是用很舊的wine測試的結(jié)果不好,新版本wine或許已不一樣
結(jié)果好的,你打算做,那么點擊此條結(jié)果,看提交者所描述的正常功能、不可用功能、未測試功能,及他所留的建立過程和操作方法
無近期結(jié)果或近期仍然Silver以下的就放棄吧。也可以自己嘗試,但這對普通人來說,順利則已,不順利則是一大大大坑
這個WINEARCH
決定了你模擬的Windows是32位或是64位的x86。對應(yīng)的值為win32
及win64
,如果你的Unix系統(tǒng)是64位的它就默認是win64
。
發(fā)行版所提供的wine一般都有32位及64位兩個包,直接對應(yīng)所模擬的Windows位數(shù),包里面的Unix二進制及運行庫也都是對應(yīng)位數(shù)。
以我的經(jīng)驗來看,使用32位更容易成功。
有時嘗試了多次都失敗,而export LANG=en_US.utf8
后就成功了。其中有些Windows程序安裝時需要把語言設(shè)置成英文,運行時又可以用中文運行。神奇吧 !-_-!
WINEPREFIX
是很重要的,默認值為~/.wine
。
wine會在它所指定的路徑下創(chuàng)建drive_c/
等幾個文件(夾),其中包含了Windows環(huán)境配置、它的C盤文件等等。
建議把你安裝的不同的Windows程序分給不同的WINEPREFIX,便于打包和隔離。當你要啟動這個Windows程序前也記得要設(shè)置WINEPREFIX。
在你用一個空WINEPREFIX目錄第一次啟動wine時,它會問你是否下載mono和gecko。一般情況選否即可。
命令wine 路徑/xxx.exe 參數(shù)(可以是文件路徑)
就可以通過wine運行exe
。路徑可以是Unix路徑,也可以是(在有WINEPREFIX情況下的)Windows路徑,wine會自動判斷。
以WINEPREFIX是默認值情況下為例:
wine notepad.exe c:/abc.txt
wine notepad.exe ~/.wine/drive_c/abc.txt
上面兩條命令效果一樣。
對wine來說,你Unix系統(tǒng)里的其他文件(即模擬的C盤之外的文件)的Windows路徑都以Z盤開頭:
wine notepad.exe z:/home/username/.wine/drive_c/abc.txt
wine也提供了
winepath
這個命令來轉(zhuǎn)換Unix和Windows之前的路徑,但一般用不上。
要安裝一個Windows程序,一般就是在設(shè)置好WINEPREFIX
和WINEARCH
后,運行安裝包
wine 安裝包.exe
wine msiexec /i 安裝包.msi
安裝好后,安裝程序所生成的Windows開始菜單項會被自動加入你的Linux系統(tǒng)的啟動器中。.desktop
文件里已經(jīng)有了WINEPREFIX
和WINEARCH
。安裝程序所產(chǎn)生的文件擴展名關(guān)聯(lián)、圖標等等“垃圾”也會進入Linux中。
如果你不喜歡垃圾,可以清理,參考官方FAQ
甚至你可以在安裝前就禁止它在Unix中產(chǎn)生任何菜單、文件關(guān)聯(lián)等物件(參考這里):
export WINEDLLOVERRIDES=winemenubuilder.exe=d wine setup.exe
我自己是總把垃圾清理掉的。如果你也清理了,沒有了安裝程序創(chuàng)建的菜單和文件關(guān)聯(lián),可以按如下方法自己弄:
寫一個自己的腳本:
#!/bin/bash
# 取得此bash腳本所在路徑
script=$(readlink -f "$0")
scriptpath=$(dirname "$script")
# 這里設(shè)置好WINEPREFIX
export WINEPREFIX="$scriptpath"
wine "c:\Program Files\xxxx\xxxx.exe" "$1"
把這個腳本放在WINEPREFIX目錄下使用。
自己確定好此WINEPREFIX目錄放在何處后,可以手動將文件后綴與這個腳本關(guān)聯(lián),具體可以參考我寫的另一篇《Linux關(guān)聯(lián)文件擴展名和打開程序》。
winecfg
命令會打開一個GUI的、應(yīng)對此WINEPREFIX的wine環(huán)境配置。
里面可以設(shè)置要模擬的Windows版本。
還可以設(shè)置某個DLL文件使用內(nèi)建、原裝、內(nèi)建先于原裝、原裝先于內(nèi)建、停用之中的哪種。默認情況下都是使用內(nèi)建的。如果想使用原裝,則必須把真正的Windows DLL放入WINERPEFIX的系統(tǒng)目錄中,其中大部分是用winetricks
來搞。
這個對于一個程序是否能成功模擬比較關(guān)鍵,但需要一些技術(shù)知識,本篇不細談。官方wine Application Database中,提交者一般會給出他們所使用的設(shè)置。
有官方背景的一個工具。其主頁位于Github。發(fā)行版也會帶它,但不一定最新,最好用最新的。它能幫用戶方便配置wine環(huán)境,或安裝一些基本DLL,運行庫如VC runtime、.NET。
例如winetricks dotnet45 vcrun2010
。也支持一些大型應(yīng)用如office2007pro
(需要自己準備光盤或iso
)、7zip
、qq
、qqintl
(這些安裝時它自己從網(wǎng)上下載)??梢杂?code>winetricks list-all來看看它支持什么。
因為是老外維護的,所以winetricks有許多東西要把語言設(shè)置成英文才可以安裝成功。
經(jīng)我試驗,winetricks中許多也只能在32位或64位一種情況下,或某個wine版本之上或之下才能成功,而winetricks卻不記錄或提供這些信息,很奇怪。
如果在wine中運行notepad,會有以下進程在Unix中:
23770 23765 notepad.exe notepad.exe
23774 23765 wineserver /usr/bin/wineserver
23780 23765 services.exe C:\windows\system32\services.exe
23783 23765 winedevice.exe C:\windows\system32\winedevice.exe
23793 23765 plugplay.exe C:\windows\system32\plugplay.exe
23798 23765 winedevice.exe C:\windows\system32\winedevice.exe
23805 23765 explorer.exe C:\windows\system32\explorer.exe /desktop
那些看似名為.exe
結(jié)尾的進程實際上在Unix中是wine-preloader
。每一個運行中的WINEPREFIX會有一套以上進程。
正常情況下,如上例,notepad.exe
退出后其余也會自動退出。但wine無法正常自行徹底退出是常有的。例如若用wine運行QQ,常常出現(xiàn)QQ.exe
退出但TXPlatform.exe
死活不自己退出的情況,甚至可能你點擊了QQ界面上的叉,只是界面消失,實際的exe進程都卡住不退??ㄗ〔煌说那闆r也屬于所模擬的程序功能僅部分正常。
使用wineserver -k
來告訴wine殺死本W(wǎng)INEPREFIX的所有進程。但這招有時也不靈,那么需要手動清理,比較麻煩。
winetricks_zh(https://github.com/hillwoodroc/winetricks-zh )是一個國人維護的winetricks。想裝國內(nèi)軟件時可以先來這里看看,比官方winetricks更符合國內(nèi)情況。支持QQ、微信、同花順、大智慧等等。
深度(Deepin)是國內(nèi)的Linux發(fā)行版,它已經(jīng)裝備好了一些wine好的國內(nèi)軟件。但許多是不能直接拿到其他發(fā)行版上來用的。深度會自己修改wine的源代碼,他們提供的wine好的東西許多是基于他們的wine。
別人打包的AppImage,例如這個打包好的QQ(https://github.com/askme765cs/Wine-QQ-TIM)。許多人是拿深度所做的打包成AppImage。自行在網(wǎng)上搜索一下會有,但別人打包的水平有高有低,兼容性有好有壞??煽慷群惋L險自行評估。
Github上的用戶 countstarlight 所維護的從深度wine那邊移植往Arch Linux的騰訊通信軟件:
wine已經(jīng)廣泛被各個發(fā)行版?zhèn)}庫收錄了,但有些情況下需要手動下載wine的各種版本:
發(fā)行版提供的wine太舊
某些東西在舊版本中正常,新版本反而不正常(有時這可以通過調(diào)整配置解決,但這也是坑)
可以下載各個版本的wine的發(fā)行版通用二進制的地方:
為wine用戶提供便捷的PlayOnLinux(https://www.playonlinux.com/wine/binaries/phoenicis/upstream-linux-amd64/ )
做Linux游戲主題的Lutris https://lutris.net/files/runners/ 有1.7到3.9版本的wine,好像不更新了
Github上的一個提供portable wine的人Kron4ek https://github.com/Kron4ek/Wine-Builds/releases 及 https://github.com/Kron4ek/wine-portable-executable/releases 可靠程度不明
經(jīng)我測試,下載后解包,不要改變目錄關(guān)系,使用里面的wine
二進制即可以,一般是比較portable的。
下載時注意是32位還是64位的x86。不是根據(jù)你的真實cpu位數(shù)來,而是根據(jù)你需要模擬的Windows位數(shù)來。
wine是坑!能用則用,不能用別留戀。兩臺電腦一臺Linux一臺Windows是最好方案。
另外最好也知道,proton是Valve為他們的游戲弄的wine衍生版,部分steam游戲使用它;crossover是wine的一個商業(yè)應(yīng)用。如果真要弄wine,有時也可以尋找這些資源。