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