本文介紹如何使用Bottles在Linux系統的電腦執行和安裝Windows exe。
例如跑WinRAR、Photoshop CC、Line、微信、QQ、Microsoft Office 365、Grand Theft Auto……等Windows才有的程式。
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。
Flatpak是跨發行版的套件管理員,大部分的Linux發行版都支援。請參閱 Flatpak安裝方式
安裝Bottles,輸入y確認
flatpak install flathub com.usebottles.bottles
- 建議預先開放權限,允許Bottles給Linux新增桌面捷徑
flatpak override com.usebottles.bottles --user --filesystem=xdg-data/applications
- 開放Bottles讀取你的常用目錄,例如「下載」目錄,避免在執行exe的時候出現權限問題
flatpak override com.usebottles.bottles --user --filesystem=xdg-download
安裝後在應用程式列表找到Bottles。
開啟後等待Bottles初始化完成。
3. 建立「酒瓶」並執行exe#
Bottles的功用就是用來建立Wine執行環境,就像把Wine裝入酒瓶(Bottle)一樣,每個酒瓶都是一個Wine容器。
以Wine的術語來說,每個Bottles的酒瓶就是一個WINEPREFIX。
按照Bottles的設計,每個酒瓶應當只放一個Windows exe。如下圖,遊戲和一般軟體分別位於不同的酒瓶,如果某個酒瓶環境被弄亂,直接刪除即可,其他酒瓶不受影響。
讓我們實地演練:執行遊戲《Undertale》, ProtonDB顯示此程式不用額外裝任何東西就能跑!
點選Bottles左上角的+號,點選新增酒瓶(Create Bottle)。輸入此酒瓶的名稱,下面環境(Environment)選取Gaming,這樣會自動裝好大多數程式需要的依賴套件。
(選擇性步驟) 點選執行檔案(Run Executable…) 旁邊的小齒輪,勾選在終端機執行(Run in Terminal),這樣有助於除錯。
接著按執行檔案(Run Executable…),選取Undertale的遊戲exe。若看不到exe請點一下檔案選取對話框的篩選器,將其打叉,顯示所有格式的檔案。
程式執行後會一併開啟終端機,可用於監測程式是否有異常狀況。
確認程式能正常執行後,你可以點選
Add Shortcuts...
建立exe捷徑,這樣之後就可以從Linux的應用程式列表開啟exe程式。點選
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工作階段。