快轉到主要內容

「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
#

因為大部分Windows exe都是x86 (32位元) 或x64 (64位元) 架構的,Wine目前僅支援x86架構的Linux電腦。ARM架構(如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 22.04是為jammy
os=jammy
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指令基本用法
#

詳細內容請參考官方文件 Wine User’s Guide

  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 --comamnd=winetricks org.winehq.Wine

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

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

winetricks cjkfonts dotnet471

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

WINEPREFIX=~/.wine winetricks cjkfonts dotnet471

8. 安裝DXVK強化3D效能
#

DXVK是把DirectX繪圖指令轉譯成Vulkan的程式,可以有效增進遊戲相容性,並提昇遊戲效能。

它還可以測定應用程式的GPU資訊、顯示FPS。

  1. 如何安裝DXVK:到 Github Releases下載最新版zip檔,解壓縮

  2. 接著將DLL檔複製到Wine的安裝目錄(預設應為~/.wine

export WINEPREFIX=~/.wine

cp x64/*.dll $WINEPREFIX/drive_c/windows/system32

cp x32/*.dll $WINEPREFIX/drive_c/windows/syswow64
  1. 啟動winecfg
winecfg
  1. 到函式庫頁面,設定DLL覆寫,將d3d11、d3d10core、dxgi、d3d9調整為「內建先於原生」。

  2. 如何確認DXVK安裝成功:使用環境變數DXVK_HUD執行Windows 3D應用程式,看看HUD有無跑出來就知道了。

DXVK_HUD=1 wine game.exe

相關文章

Linux系統以指令稿安裝Photoshop CC 2022
Linux系統 Linux好用軟體 Wine Photoshop Bottles for Linux
試著在Linux系統安裝IBM SPSS Statistics 29 (PS IMAGO PRO 9.0) 統計分析軟體
Linux系統 Linux好用軟體 IBM SPSS Linux Wine
Bottles-cli命令行用法,將容器裡的Wine與Linux系統整合
Linux系統 Linux好用軟體 Bottles for Linux Wine

留言板

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

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

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。