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