快轉到主要內容

如何在Linux執行Windows exe檔,用Bottles管理多版本的Wine容器

Linux系統 Linux好用軟體 Bottles for Linux Wine Steam Deck
✍ 切換正體/簡體字
目錄

本文介紹如何使用Bottles在Linux系統的電腦執行和安裝Windows exe。

例如跑WinRAR、 Photoshop CC 遊戲GTA IV 通訊軟體Line、微信、QQ、 Microsoft Office 365等Windows才有的程式。

0. Wine是什麼
#

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

Wine (WineHQ,紅酒) 是從1993年發展至今的exe轉譯技術,它將Windows exe的指令即時轉譯成Linux的系統呼叫,連3D繪圖指令都一併轉譯,讓Linux能夠跑Windows程式。

Wine原本是Wine Is Not an Emulator的縮寫,代表它不是虛擬機也不是模擬器,而是轉譯器,性能損失很小。

在Wine的加持下,諸如Microsoft Office(舊版)、Adobe Photoshop、Adobe AutoCAD、俠盜獵車手V等程式,都能用Wine在Linux執行,甚至有人回報說Linux跑遊戲比Windows還順暢。順帶一提,Steam Deck也有採用Wine的技術,叫做Proton。


WineDB ProtonDB網站有收錄Wine能執行的Windows程式,還有安裝前的小撇步,建議安裝程式前先去看看。尤其是遊戲部份,有在Steam上架的話用 Steam Proton會更容易啟動Windows平台的遊戲。

不過,Wine本身得打指令才能啟動,這個時候有個Wine的前端管理程式會比較方便。

這篇文章我採用的是義大利設計師Mirko Brombin開發的「Bottles」。

在Bottles之前已經有PlayOnLinux和 Lutris的Wine前端管理程式出現, Linux版Steam客戶端亦整合了Wine技術。

Bottles是最近幾年才出現的。

Bottles作者宣稱應選擇本程式的理由如下:

  • PlayOnLinux和Lutris所作的僅是用指令稿協助安裝Windows程式。
  • Bottles能一鍵切換Wine版本(Wine有官方原版、Valve版、中國Deepin版…等等針對不同環境特化的分支),不需頻繁打指令。
  • 一個exe程式一個酒瓶,Bottles可以輕鬆將WINEPREFIX的容器隔離,不讓環境互相污染。
  • 提供預先設定好的範本,以達成開箱即用的體驗,例如「GAMING」的環境設定好後,應可直接執行遊戲exe。
  • 可做快照進行備份完整Wine環境,程式更新後無法運作就回退至上一版。
  • 提供隔離檔案系統的功能。用Wine跑Windows程式,病毒也是照樣能傷害Linux系統。Bottles預設會利用Flatpak技術,限制Wine的程式只能存取自身的目錄,除非使用者自行開放其他目錄的權限,否則Wine無法存取。

1. 如何安裝Bottles
#

作者推薦用Flatpak技術安裝Bottles。

Flatpak是跨發行版的套件管理員,大部分的Linux發行版都支援。請參閱 Flatpak安裝方式

  1. 例如Ubuntu,開啟終端機輸入以下指令:
sudo apt install flatpak
  1. 然後加入Flatpak套件庫,重開機。
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
  1. 在那之後,安裝Bottles,輸入y確認,大約需要1GB空間 (Flatpak把應用程式的依賴套件都包在一塊因此很肥)
flatpak install flathub com.usebottles.bottles
  1. 安裝後在應用程式列表找到Bottles。

  2. 開啟後等待Bottles初始化完成。

2. 建立「酒瓶」並執行exe
#

Bottles的功用就是用來建立Wine執行環境,就像把Wine裝入酒瓶(Bottle)一樣,每個酒瓶都是一個Wine容器。

以Wine的術語來說,每個Bottles的酒瓶就是一個WINEPREFIX。

按照Bottles的設計,每個酒瓶應當只放一個Windows exe。如下圖,遊戲和一般軟體分別位於不同的酒瓶,如果某個酒瓶環境被弄亂,直接刪除即可,其他酒瓶不受影響。

讓我們實地演練:執行遊戲《Undertale》,Wine官方資料庫顯示此程式不用額外裝任何東西就能跑!

  1. 點選Bottles左上角的+號,點選新增酒瓶(Create Bottle)。輸入此酒瓶的名稱,下面環境(Environment)選取Gaming,這樣會自動裝好大多數程式需要的依賴套件。

  2. (選擇性步驟) 點選執行檔案(Run Executable…)旁邊的小齒輪,勾選在終端機執行(Run in Terminal),這樣有助於除錯。

  3. 接著按執行檔案(Run Executable…),選取Undertale的遊戲exe(若看不到exe請點一下檔案選取對話框的篩選器,將其打叉)

  4. 程式執行後會一併開啟終端機,可用於監測程式是否有異常狀況。

  5. 確認程式能正常執行後,你可以點選Add Shortcuts...建立exe捷徑,這樣之後就可以直接從應用程式列表開啟exe程式。

  6. 執行以下指令,重開Bottles,再點選Add Desktop Entry即可將程式加到桌面捷徑。

flatpak override com.usebottles.bottles --user --filesystem=xdg-data/applications

3. Bottles的資料位置
#

Bottles模擬的假C槽位於~/.var/app/com.usebottles.bottles/data/bottles/bottles/<酒瓶名稱>/drive_c

進入該酒瓶主畫面。點選右上角Browse Files...即可開啟Bottles建立的虛擬C槽。

你的檔案管理器應該會自動開啟,這個就是Bottles建立的假C槽了。

4. 自訂酒瓶環境
#

如果程式需要額外套件才能運作,就得細調酒瓶的環境,幸而Bottles將過去要用指令調整的東西都圖形化了。

在酒瓶的主選單有以下選項,個別介紹。

Settings 設定值
#

Runner選項用於切換Wine版本,預設為Valve開發的soda。如果程式執行發生問題,可以切換成原版sys-wine試試看。

還有圖形設定,是否要使用DXVK (將DirectX指令轉成Vulkan)之類的設定。這邊通常不用動。

滑到最下面,Compatibiity處可設定要模擬的Windows版本和系統語言。通常用Windows 10就夠了。

Snapshots則是設定是否自動製作Wine環境的快照,防止程式一更新就無法運作。

Graphics裡面的Screen Scaling設定,可縮放Windows程式的字體大小(DPI)。

Dependencies 相依項目
#

此處是用於安裝依賴套件的,類似Winetricks的效果。

例如很多中文程式需要安裝cjkfonts字體否則會亂碼;有些程式要安裝vcredist (Visual C++ Redistributable) 才能運作。

程式具體需要哪些套件,請至WineDB參看該程式的安裝說明。

有些Windows依賴套件並無列在Bottles的Dependencies選單,若有需求請向作者 回報

Snapshots 快照
#

應用程式可能因為更新後便無法啟動,適時按右上角+號新增快照,輸入註解後即可新增。

點選快照後即會自動將酒瓶的Wine環境回退至該版本。

酒瓶的主畫面右上角尚提供完整備份Full Backup的功能,可將酒瓶環境匯出為壓縮檔。這樣重裝Bottles主程式後便能快速復原。

Task Manager 工作管理員
#

模擬Windows的工作管理員。

如果此處無法中止程式,也可以點選酒瓶主畫面右上角的Force Stop All Processes強制中止所有處理程序。

Wine舊版工具
#

酒瓶主畫面最下面的是Wine本身的工具,包含登錄檔(Registry)、命令提示字元(cmd)、控制台(Control Panel)、設定畫面(wiencfg)等。

5. 進階用法:使用Bottles-cli命令行工具
#

參考 Bottles-cli文章了解如何使用指令操作Bottles容器,並將Bottles的Wine整合到你的系統。

6. 解決Bottles相關問題
#

如何用指令執行Bottles的酒瓶

如下使用flatpak run,執行「Undertale」酒瓶裡面的Undertale.exe

/usr/bin/flatpak run --command=bottles-cli com.usebottles.bottles run -p Undertale -b Undertale -- %u

exe執行後沒有反應

exe執行後無反應,請一律將該exe和相關程式檔案放到Bottles的C槽 (~/.var/app/com.usebottles.bottles/data/bottles/bottles/<酒瓶名稱>/drive_c)

並勾選"Run in Terminal"後執行,再看終端機輸出的訊息判讀錯誤來源。

exe的檔案管理員看不到其他硬碟檔案

假設你有二個硬碟,而Bottles執行exe時看不到第二個硬碟的檔案,這是Flatpak的檔案系統隔離所致。

跟上面建議執行程式的時候把exe直接放到Bottles的假C槽的理由一樣。因為從其他硬碟讀取exe,很容易發生無法讀取dll等各種奇怪狀況。

如果你堅持要從另一個硬碟執行exe,那請開啟終端機,輸入以下指令開放存取exe所在目錄的權限:

flatpak override --user --filesystem="目錄" com.usebottles.bottles

例如要存取第二個硬碟上的Pictures目錄:

flatpak override --user --filesystem="/run/media/user/HDD/Pictures" com.usebottles.bottles

再重啟Bottles。

module:import_dll Loading library xxx.dll (which is needed by…

同上,使用指令開放該目錄的讀取權限

Unhandled exception: page fault on read…

  • 關掉DXVK
  • 嘗試切換Wine版本
  • 檢查該程式是否有依賴套件未安裝
  • 試試該程式的32位元版
  • 將該程式放到Bottles的C槽再執行

程式文字變成方塊

請安裝cjkfonts字體。

或手動下載Windows字型,將檔案放到Bottles假C槽的/windows/Fonts/ 目錄。

你還可以設定 fontconfig調整字體優先級別。

Wayland閃退、卡頓

Wine的應用程式可能不支援Wayland,它會用XWayland下去跑,導致效能降低。

如果遇到應用程式黑螢幕,嘗試關閉酒瓶設定的「使用獨立顯示卡」選項。

或者回退到X11工作階段。

延伸閱讀
#

相關文章

[2023年8月更新] 如何在Linux安裝電腦版Line
Linux系統 Linux好用軟體 Wine Linux
如何在Linux系統跑Windows軟體,三種方法不同的思路
Linux系統 Linux好用軟體 Wine QEMU Windows Linux
經典音樂播放器 ~ Linux安裝foobar2000
Linux系統 Linux好用軟體 Music Player Wine

留言板

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

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

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