快轉到主要內容

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

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

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

例如跑WinRAR、Photoshop CC、Line、微信、QQ、Microsoft Office 365、Grand Theft Auto……等Windows才有的程式。

在Linux執行Photoshop CC 2021

1. Wine是什麼
#

什麼是Wine?它是一款將Windows exe轉譯成為Linux指令的技術,參閱 Wine指令使用教學

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

這篇文章我採用的是義大利設計師Mirko Brombin開發的「Bottles」,2017年推出第一個版本,至今依然不斷更新中。

在Bottles之前,已經有Wine前端管理程式出現,例如PlayOnLinux和Lutris,還有 Linux版Steam客戶端。那麼為什麼要用Bottles呢?

結合Bottles作者宣傳的項目,我認為Bottles有以下優點:

  • 界面乾淨磊落。Lutris是用yaml指令稿協助使用者安裝Windows程式。雖然設計靈活,但是使用者需要知道自己在幹嘛才能用得好。而Bottles把許多常用的東西都變成直覺的圖形界面,一鍵就能開關,讓使用者不太需要跑Winetricks。
  • 一鍵切換Wine版本。Wine有官方原版、Valve的Proton、中國Deepin版…等等針對不同環境特化的分支,Bottles能一鍵切換,不需頻繁打指令。
  • 一個exe程式一個酒瓶,Bottles可以輕鬆將WINEPREFIX的容器隔離,不讓環境互相污染。
  • Bottles提供預先設定好的範本,將常用的.Net Framework預先裝上,以達成開箱即用的體驗,例如使用「GAMING」範本後,應可直接執行遊戲exe。
  • 提供快照功能,備份完整Wine環境,程式更新後無法運作就回退至上一版。
  • 提供隔離檔案系統的功能。你要知道,用Wine跑Windows程式,病毒也是照樣能傷害Linux系統。Bottles預設會利用Flatpak技術,限制Wine的程式只能存取自身的目錄,除非使用者自行開放其他目錄的權限,否則Wine無法存取。

2. 如何安裝Bottles
#

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

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

  2. 安裝Bottles,輸入y確認

flatpak install flathub com.usebottles.bottles
  1. 建議預先開放權限,允許Bottles給Linux新增桌面捷徑
flatpak override com.usebottles.bottles --user --filesystem=xdg-data/applications
  1. 開放Bottles讀取你的常用目錄,例如「下載」目錄,避免在執行exe的時候出現權限問題
flatpak override com.usebottles.bottles --user --filesystem=xdg-download
  1. 安裝後在應用程式列表找到Bottles。

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

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

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

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

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

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

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

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

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

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

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

  6. 點選Add Desktop Entry可將程式加到Linux的桌面捷徑。

4. Bottles的資料位置
#

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

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

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

5. 自訂酒瓶環境
#

如果程式需要額外套件才能運作,就得細調酒瓶的環境,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或ProtonDB參看該程式的安裝說明。

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

快照 Snapshots
#

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

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

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

工作管理員 Task Manager
#

模擬Windows的工作管理員。

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

Wine舊版工具
#

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

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執行後無反應,可能是Flatpak權限問題導致,請一律將該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工作階段。

參考資料
#

相關文章

Flatpak版Linux Visual Studio Code安裝筆記
分類   Linux系統 Linux好用軟體
標籤   Flatpak Visual Studio Code
[2023年8月更新] 如何在Linux安裝電腦版Line
分類   Linux系統 Linux好用軟體
標籤   Wine Linux
Linux系統如何安裝Flatpak軟體套件?使用教學
分類   Linux系統 Linux好用軟體
標籤   Flatpak Linux Freedesktop Specifications

留言板

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

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

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