有時候免不了要使用Windows應用程序,于是在本教程中,我們將使用Wine教你如何在Linux上順暢地運行Windows應用程序。

縱然Linux軟件品種繁多,但有時候你還是覺得缺少了與Windows版對應的某個應用程序。需要那一個應用程序可能有好多原因,最常見的原因恐怕是Linux不支持某一種文件格式或實際使用的某個應用程序。幸好,有好多辦法可以在Linux系統上使用Windows應用程序。
Wine的介紹
Wine是Wine Is Not an Emulator(Wine不是模擬器)的縮寫,其實是一個轉換層(或程序裝入器),能夠在Linux及與POSIX兼容的其他類似操作系統上運行Windows應用程序。Wine在Linux上無法模擬Windows應用程序,而是提供了另外的方法來實施DLL(典型的Windows應用程序可以調用這些DLL)和代替Windows NT內核的進程。Wine完全由非微軟代碼組成。
Wine支持數量眾多的應用程序,但并非全部都得到同樣的支持??梢栽L問Wine應用數據庫(AppDB, http://appdb.winehq.org),看看你常用的Windows應用程序與Wine之間的兼容性有多好。AppDB由社區維護;你也可以添加自己發現的應用程序。AppDB定義了如下幾種級別類型:
白金:如果某應用程序在“即開即用”狀態下可以順暢無阻地安裝和運行,它可以被評為白金級。Wine配置文件不需要進行更改。
黃金:應用程序與一些DLL覆蓋文件、其他設置或第三方軟件可以順暢無阻地協同運行。
白銀:就“平常”使用而言,應用程序可以出色地運行。比如說,游戲在單人玩家模式下運行很好,但在多人玩家模式下不行;Windows Media Player作為插件和獨立播放器運行很好,但無法處理數字版權管理(DRM)等。
青銅:應用程序可以運行,但存在一些問題,哪怕是平常使用。比如說,游戲無法正確地重新繪圖或者用錯誤的顏色顯示字體,速度比平常慢得多,等等。
垃圾:如果應用程序無法用于原本的用途,就會得到這個評級。如果這樣,通用軟件缺陷跟蹤系統Bugzilla中應該至少有一個軟件缺陷報告。應用程序無法安裝、無法啟動,或者就算能啟動,也有好多錯誤,以至于幾乎沒法使用。
一. 安裝Wine
Wine適應于所有流行的UNIX操作系統,包括Ubuntu、Debian、Red Hat、SUSE、Mandriva、FreeBSD、Solaris和Mac OS X。
在Ubuntu上:
1. 打開Applications(應用程序)>Ubuntu Software Center(Unbuntu軟件中心),打開Ubuntu軟件中心。
2. 然后點擊Edit(編輯)>Software Sources(軟件源)。選擇Other Software(其他軟件)選項卡,點擊Add(添加)。然后輸入下列apt行:
ppa:ubuntu-wine/ppa
3. 從左邊的Get Software(取得軟件)部分中選擇“PPA for Ubuntu Wine Team”,然后選擇Microsoft Windows Compatibility Layer(Development files) – wine1.3-dev。點擊Install(安裝)。這會安裝最新的Wine軟件包,包括開發庫。
提示:卸載現有的Wine軟件包,以確保最大的兼容性。另外,如果想干凈安裝,你可以刪除Wine用戶目錄,為此可以從主目錄中使用命令rm -r -v .wine。
4.在 64 位 Ubuntu 15.10 中編譯最新版 32 位 Wine
Wine 發布了最新的1.7.53版本。此版本帶來的大量性能提升,包括XAudio,Direct3D代碼清理,改善OLE對象嵌入技術,更好的 Web Services DLL的實現,還有其他大量更新。

雖然有一個官方 Wine PPA,但目前只提供1.7.44版本,所以安裝最新版本可以從源碼編譯安裝。
下載源碼包(直接下載地址在此)并解壓 tar -xf wine-1.7.53。然后,安裝如下依賴。
sudo apt-get install build-essential gcc-multilib libx11-dev:i386 libfreetype6-dev:i386 libxcursor-dev:i386 libxi-dev:i386 libxshmfence-dev:i386 libxxf86vm-dev:i386 libxrandr-dev:i386 libxinerama-dev:i386 libxcomposite-dev:i386 libglu1-mesa-dev:i386 libosmesa6-dev:i386 libpcap0.8-dev:i386 libdbus-1-dev:i386 libncurses5-dev:i386 libsane-dev:i386 libv4l-dev:i386 libgphoto2-dev:i386 liblcms2-dev:i386 gstreamer0.10-plugins-base:i386 libcapi20-dev:i386 libcups2-dev:i386 libfontconfig1-dev:i386 libgsm1-dev:i386 libtiff5-dev:i386 libmpg123-dev:i386 libopenal-dev:i386 libldap2-dev:i386 libgnutls-dev:i386 libjpeg-dev:i386
現在切換到 wine-1.7.53 解壓后的文件夾,并輸入:
./configure
make
sudo make install
同樣地,你也可以給配置腳本指定 prefix 參數。以普通用戶安裝 wine:
./configure --prefix=$HOME/usr/bin
make
make install
二. 安裝Wine支持包
現在,我們需要安裝非開源(但免費)的支持包。這包括微軟Core Fonts、Visual C++運行時環境等軟件包。
不妨繼續深入介紹。
安裝Cabextract:
需要該軟件包來解壓縮微軟.cab文件。
$ sudo apt-get install cabextract
下載winetricks腳本:
現在我們需要下載一個很棒的腳本,名為winetricks,它會自動下載和安裝必要的支持包。
$ wget http://winetricks.org/winetricks
現在輸入下列命令,安裝必要的支持包:
$ sh winetricks corefonts Tahoma
提示:你還可以不用任何命令行參數來運行winetricks,那樣就能從漂亮的GUI界面選擇需要安裝的軟件包。
三. 安裝微軟Office
在本例中,我們將安裝微軟Office 2007。插入微軟Office 2007光盤,鼠標右擊setup.exe,選擇“Open With Windows Program Loader”。這應該會啟動微軟Office安裝程序。以平常的方式來安裝,就像你在任何Windows系統上安裝那樣。
四. 建立庫
鑒于已安裝好了微軟Office 2007,我們要確保Wine已經過配置,可以順利使用該應用軟件。你也看到,Wine以自己的方法實施了各種Windows庫,但我們可以直接使用原生的Windows庫,確保應用程序有最大的兼容性。Wine隨帶自己的配置工具:winecfg。除了其他功能外,該工具還讓我們可以在內置版本的庫與原生版本的庫之間切換。
輸入命令winecfg,即可打開Wine配置工具。進入到Libraries(庫)選項卡,把riched20和usp10添加到“native, builtin”。這表明,Wine應該先試著裝入原生的Windows庫;要是沒有這些庫,它會試著裝入內置的庫。
五. 運行微軟Office
微軟Office現在應該已出現在Ubuntu程序菜單中??梢韵群筮M入到Application(應用程序)> Programs(程序)>Microsoft Office(微軟Office)來訪問它。
這個過程確實相當簡單。如果你只想臨時運行某個Windows程序,假設兼容性很好,那么全都妥當了;但是高級用戶想要再深入一步的話,需要繼續讀下去。[NextPage]
使用Winelib構建Windows應用程序

如果你想不受微軟的約束,Wine確實大有幫助。這年頭,連第三方的Windows應用開發人員都要受微軟的支配。比如說,Windows多媒體應用開發人員處理最簡單的任務都要依賴DirectX。DirectX是微軟的專屬財產,別人誰也無法訪問不了源代碼。有一天,微軟可能會開發DirectX的一些獨特功能,由于這些功能沒有列入文檔,獨立軟件開發商訪問不了這些功能。那樣的話,Windows Media Player將是該平臺上最好的多媒體播放器,因為其他播放器被迫依賴DirectX,又無法完全控制它。
歡迎來到Linux社區:在這里,沒有什么是不可能的。
不妨再以DirectX為例。Wine以自己的方法實施了DirectX(借助Transgaming Technologies而實現)。Wine實施了常見的多媒體應用編程接口(API),比如Direct3D、DirectInput、DirectSound、DirectShow及其他許多API,實施的辦法就是將它們與功能強大的、開放的Linux對應API聯系起來,如OpenGL、X11和ALSA/OSS API。因而,將DirectX應用程序移植到Linux時,你可以使用所有這些開放的技術。Winelib可以用作將應用程序從Windows平臺取出來放到Linux系統上的第一步。然后,可以逐漸充分利用Linux提供的所有功能。
Winelib能夠在Linux上運行和編譯Windows應用程序,不需要Windows。Winelib是Wine項目的一部分。它以開源的方式實施了Win32 API,基于Linux和X Window System(如今常稱為Xorg)而建。Winelib的代碼與Wine完全共享,能夠編譯控制臺應用程序和GUI應用程序。它還能編譯DLL(動態鏈接庫)等庫文件。Wine通過下列兩種方式來處理Windows源代碼。
•提供二進制級的兼容性
二進制級的兼容性可通過Wine本身來獲得。在此過程中,應用程序的源代碼在Windows平臺上編譯,然后二進制文件被移到Linux系統上,通過Wine來運行。應用程序在二進制兼容的情況下運行時,它可以使用所有現有的.dll文件。這個過程相當簡單,但無法釋放Wine子系統的全部功能。這與我們使用Wine來運行微軟Office 2007的方式一模一樣。
•提供源碼級的兼容性
在該方法中,源代碼文件被移到Linux系統上,然后使用GCC對照Winelib庫來進行編譯。這樣一來,應用程序還能夠與UNIX API調用兼容,以便充分利用UNIX的全部功能。Winelib隨帶一款名為winemaker的工具,該工具可以通過VC++項目創建基于GNU標準autoconf的makefile文件。Winemaker是一個Perl腳本,負責處理轉換源代碼、使源代碼專門用于UNIX、清空用例問題及其他眾多方面的所有繁重任務。