快轉到主要內容

「Wine」指令使用教學,在Linux系統跑Windows exe軟體

分類   Linux系統 Linux好用軟體
標籤   Wine
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

如果要在Linux系統跑Windows程式,只要能拿到exe,就有機率能透過"Wine"轉譯技術執行。

它能夠把Windows應用程式變成有如原生Linux程式一樣,讓使用者以接近原生的效能,操作Windows上的軟體。

圖例:Linux系統執行Windows版的WinRAR

本文Ivon詳細介紹Linux系統使用Wine跑Windows軟體的方法。首先簡介Wine的由來,再介紹Wine指令用法,最後附上一些額外的Wine輔助工具。

1. Wine是什麼
#

Wine (WineHQ,紅酒) 是從1993年發展至今的exe轉譯軟體,它將Windows exe的指令即時轉譯成Linux的系統呼叫,連3D繪圖指令都一併轉譯,讓使用者能夠在類Unix系統(Linux、FreeBSD、macOS)執行Windows程式。

Wine為自由開源軟體。名字原本為"Wine Is Not an Emulator"的縮寫,代表它不是虛擬機也不是模擬器,而是轉譯器,性能損失很小。

在Wine的加持下,諸如Microsoft Office 2016、Adobe Photoshop CC 2021、Adobe AutoCAD、俠盜獵車手V等程式,都能用Wine在Linux執行,甚至有人回報說Linux跑遊戲比Windows還順暢。

Wine具體能執行的Windows程式有哪些呢?建議到 WineDB ProtonDB看看,裡面有收錄各個Windows軟體的運作狀況,還有安裝前的小撇步。

Steam Deck也有採用Wine的技術,叫做Proton。因此有上Steam的Windows遊戲用 Linux版Steam客戶端會更容易啟動,這些遊戲已經由許多Linux系統與Steam Deck玩家測試過了。

除了官方版的WineHQ以外,Wine還有很多分支(fork),例如Steam Proton就是專為遊戲優化的,還有外國玩家維護的GE-Proton、中國人維護的Deepin-Wine等版本。本文使用的是官方版Wine。

2. 給Linux Wine新手的忠告
#

這邊我列出三點最重要的事情,免得使用者對Wine有錯誤的期待。

Wine並非萬能
#

因為Windows API黑箱的特性,軟體能不能運作要看運氣。

Wine不是虛擬機軟體,無法模擬Windows系統的全部功能,別妄想任何軟體都能用Wine解決。

如果你的軟體需要用到外接硬體設備,得安裝驅動程式,那麼高機率跑不起來,比如繪圖板、印表機。此外需要虛擬化、CUDA、Windows Store的UWP軟體也不行用Wine跑。

需要完整Windows環境又不想安裝雙系統的,請考慮安裝 Windows QEMU/KVM虛擬機

或者尋找Linux系統上同類軟體替代品: Linux電腦必裝軟體

Wine照樣有中毒風險
#

甭多說了。Windows指令一翻譯成Linux,勒索病毒照樣可以加密你硬碟的檔案。

這不是說Linux不安全,而是Windows程式的指令經由Wine翻譯成Linux之後就跟系統原生程式沒什麼兩樣了,要搞破壞照樣攔不住。

請不要從來路不明的網站下載exe。

請優先嘗試圖形化界面
#

Wine預設是要用指令操作的,這篇文章會使用大量Wine的指令。儘管對Linux用戶來說打指令並非難事,不過如果只是想簡單裝個exe軟體,用別人開發好的圖形前端操作會更簡單,他們可以大大簡化Wine安裝軟體的痛楚。

通用exe我會使用 Bottles for Linux

裝遊戲的話可以用 Steam Proton Lutris

3. 如何安裝Wine
#

你需要一台x86架構的Linux電腦。因為大部分Windows exe都是x86 (32位元) 或x64 (64位元) 架構的,Wine目前僅支援x86架構的Linux系統。ARM架構的Linux系統(如Raspberry Pi開發板)支援狀況不佳,且會涉及到異構計算的問題。

這裡我提供二種Wine的安裝方式,擇一安裝。

原生套件版
#

Ubuntu、Debian、Arch Linux、Manjaro、Fedora、Gentoo、openSUSE等常見的發行版都有收錄Wine套件。

  1. 以Ubuntu系統為例,雖然官方套件庫有收Wine套件,但是版本陳舊。 Wine官方文件建議加開發者的套件庫,取得最新版Wine。

  2. 給AMD64架構的Ubuntu系統啟用i386支援

sudo dpkg --add-architecture i386
  1. 新增WineHQ的套件庫
# 取得WineHQ的金鑰
sudo mkdir -pm755 /etc/apt/keyrings

sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key

# 加入WineHQ套件庫。注意os變數後面的版本代號,Ubuntu 24.04是為noble
os=noble

sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/$os/winehq-$os.sources

# 更新套件庫
sudo apt update
  1. 接著安裝穩定版的Wine。
sudo apt install --install-recommends winehq-stable

Flatpak版
#

Flatpak版可以透過容器機制,將Wine與主系統隔離。因為Flatpak跨發行版,比較不會遇到系統套件依賴不全的問題。

Flatpak版的Wine內建Winetricks和DXVK。

  1. 安裝 Flatpak,之後再從Flathub安裝Wine。
flatpak install flathub org.winehq.Wine
  1. Flatpak的Wine啟動指令都要加上flatpak run,因此flatpak run org.winehq.Wine等於wine指令。
flatpak run org.winehq.Wine
  1. Flatpak版所有的WINEPREFIX都會儲存在~/.var/app/org.winehq.Wine/data

4. Wine指令基本用法
#

  1. Wine的用法:
wine "exe路徑"
  1. 我們以簡單的Windows軟體「Notepad++」當例子。

  2. 如果你要執行notepad++.exenotepad++.msi,那麼使用以下指令就可以啟動程式:

wine notepad++.exe

wine notepad++.msi
  1. 等一會畫面出來就可以使用了。Notepad++執行狀況良好。

  2. 如果Windows軟體需要安裝,那麼Wine會在安裝好後幫你建立桌面捷徑。

  3. 另外Wine會自動註冊檔案關聯,你在Linux檔案管理器對exe點兩下,Wine通常會自己打開。若不想要Wine自行關聯Linux程式檔案,請用winecfg指令關閉Manage File Associations。

  4. 還請注意不是每個exe都能這樣直接開,有的需要你安裝額外的Windows套件才可以開啟。比如有許多軟體依賴.Net Framework、Visual C++ Redistributable、DirectX等等,或是需要用到中文字體,這些Wine沒有內建,你得用Winetricks安裝(後述)。

  5. 你可能會問,Wine把Windows軟體安裝到哪裡去呢?請看下一節的WINEPREFIX概念。

5. 理解WINEPREFIX虛擬C槽的概念
#

WINEPREFIX指的是Wine存放資料的目錄。

Wine初次啟動的時候,會在使用者家目錄建立~/.wine目錄存放資料,裡面的結構很像Windows的C槽,含有登錄檔、常用系統文件、字體等等。使用者的exe也是安裝到這裡。

WINEPREFIX可以理解為虛擬C槽的概念吧!如果你用wine explorer指令開啟Wine的檔案總管,就會看到(C:)槽和(Z:)槽兩個磁碟,(C:)對應的路徑是~/.wine,而(Z:)即對應整個Linux系統的根目錄了。

你可以使用WINEPREFIX環境變數,後面接路徑,用於告訴Wine資料存在哪裡。

用法是這樣,在wine指令前面加上環境變數,這樣Wine就會改成在~/.wine32建立虛擬C槽了。如果不寫WINEPREFIX,Wine資料預設儲存路徑就是~/.wine

WINEPREFIX="~/.wine32" wine notepad++.exe

此外,wine還有一個叫做WINEARCH的環境變數,指定Wine環境是32位元還是64位元。你應該知道有的程式真的沒辦法在64位元執行!

WINEARCH=win32 wine <exe>

預設情況下,Wine建立的環境都是64位元環境。你必須明確指定WINEARCH才可以用32位元跑。

不過除非是很老的程式,否則64位元的Wine環境跑32位元exe大部分時候是沒什麼問題的,不太需要指定建立純32位元環境。


那麼WINEPREFIX有何用處呢?它常常用來建立多個不同的「Wine容器」,類似多個虛擬C槽的概念。有些很機車的Windows軟體,需要改一堆登錄檔,甚至把架構改32位元才能成功執行,這樣久了Wine的C槽環境不免會亂掉。所以,利用WINEPREFIX建立多重的Wine容器,將不同用途的exe隔離就是個解決辦法。

比如,我可以用這些指令在多個Wine的容器之間切換:

# 專門跑32位元程式的容器
WINEPREFIX="/home/user/.wine32" WINEARCH=win32 wine notepad++.exe

# 專門跑Photoshop 2021的容器
WINEPREFIX="/home/user/.winephotoshop" wine photoshop.exe

6. Wine內建的輔助工具
#

Wine本體模擬了一系列Windows系統的程式,輸入指令開啟。

雖說是圖形程式,但他們也可以用指令操作來變更Windows系統設定,方便用在指令稿批次處理。詳情請參考 Wine Wiki

explorer:模擬檔案總管。啟動指令:wine explorer,下面程式以此類推。

control:模擬控制台,僅能解除安裝程式和調整網路設定

taskmgr:模擬工作管理員。值得一提的是Windows exe的行程在Linux端用htop指令也看得到。

regedit:模擬登錄檔編輯器

notepad:模擬記事本

cmd:命令提示字元,支援DOS指令。

wine-dbg:除錯工具

winecfg:調整Wine設定值。這個比較有用所以我特別講一下winecfg的功能。

應用程式 → 調整模擬的Windows系統版本

顯示 → 螢幕解析度,調整Windows程式的字體大小(DPI)

顯示 → 模擬一個虛擬桌面,可讓Windows程式跑在一個虛擬桌面的視窗。這樣你可以防止某些程式強制進入全螢幕。

桌面整合 → MIME類型,可關閉Wine與Linux系統的檔案關聯機制。

函式庫 → 這裡設定DLL覆寫,設定要使用Wine提供的DLL還是Windows程式提供的DLL。

7. 用Winetricks簡化安裝中文字體流程
#

Winetricks是一個指令稿,用於幫使用者快速安裝特定Windows軟體。

比如裝中文字體、修改登錄檔、建立容器等。有些軟體安裝後還要修改登錄檔才能被系統認到,Winetricks可以將這些操作自動化。

  1. 安裝方法:從 Winetricks的Github下載最新版,並將其移動到系統目錄。
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
chmod +x winetricks
sudo mv winetricks /usr/bin
  1. Flatpak版Wine已內建Winetricks,啟動指令為:flatpak run --command=winetricks org.winehq.Wine

  2. Winetricks的使用方法:輸入winetricks指令開啟圖形界面,按照畫面指示操作。

或者你可以直接輸入Windows套件名稱,叫Winetricks自動下載安裝。這裡的例子是告訴Winetricks,下載中文字體cjkfonts和dotnet471這二個套件並安裝。

winetricks cjkfonts dotnet471

結合我們上面講過的WINEPREFIX概念,你可以用該變數告訴Winetricks要變更哪一個Wine的容器。

WINEPREFIX=~/.wine winetricks cjkfonts dotnet471

參考資料
#

官方文件 Wine User’s Guide

相關文章

如何在Linux執行Windows exe檔,用Bottles管理多版本的Wine容器
分類   Linux系統 Linux好用軟體
標籤   Bottles for Linux Wine Steam Deck Flatpak
Linux系統以指令稿安裝Photoshop CC
分類   Linux系統 Linux好用軟體
標籤   Adobe Photoshop Wine Bottles for Linux
試著在Linux系統安裝IBM SPSS Statistics 29 (PS IMAGO PRO 9.0) 統計分析軟體
分類   Linux系統 Linux好用軟體
標籤   IBM SPSS Linux Wine

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。