快轉到主要內容

將Wine容器化,利用Flatpak版Wine在Linux執行Windows exe

· 民國114年乙巳年
·
切換繁體/簡體
分類 Linux系統 Linux好用軟體
標籤 Flatpak Wine QEMU User Mode
目錄

Wine是讓Windows exe可以在Linux執行的轉譯程式。過去,都要透過APT安裝到Linux系統才可以使用。這樣做有個缺點,就是Linux發行版套件庫收的Wine套件可能參差不齊,特定發行版可能無法下載到最新版的Wine。

在Steam Proton與Bottles這類工具出現後,我們可以發現,Wine其實不那麼依賴Linux系統的套件。它完全是能夠獨立執行的,關在容器裡也是可以的。

有人把Wine打包成Flatpak版本了,確保Wine可以安裝在大多數Linux發行版,不用依賴原生套件。

關在容器裡面執行也有好處,這能夠確保Wine生成的WINEPREFIX假C槽位被隔離在自身的目錄裡面,而不會任意讀取Linux全部的目錄。但相對的,以Flatpak版本的Wine所安裝的exe程式,與Linux桌面環境的整合度就不會那麼好,僅適合用來執行單一用途的程式。

老實說:這個版本的Wine意義不大,既然都要容器化了,不如使用Bottles或者Steam Proton,有圖形化界面比較好操作,還能任意切換Wine版本。

1. 安裝Flatpak版Wine
#

Flatpak版的Wine內建Gecko、Winetricks、DXVK。提供32位元x86函式庫。

Protontricks(修改Steam Proton環境的工具)使用的Wine並不是這個版本,所以兩者不能互通。

  1. 安裝Flatpak

  2. 之後再從Flathub安裝Wine,選取Stable分支。Flatpak版的Wine目前並非Wine開發者維護,有問題請到Github詢問。

flatpak install flathub org.winehq.Wine
  1. Flatpak的Wine啟動指令都要加上flatpak run,因此flatpak run --command=wine org.winehq.Wine等於wine指令,指令的參數加在最後面。
flatpak run --command=wine org.winehq.Wine --version
  1. 所以,要安裝exe,就是如此安裝:
flatpak run --command=wine org.winehq.Wine <exe路徑>
  1. Linux系統管理員的右鍵選單也可以用Wine開啟exe。

  2. Flatpak版所有的WINEPREFIX都會儲存在~/.var/app/org.winehq.Wine/data/目錄。這裡可以建立多個WINEPREFIX,譬如:

flatpak run --command=wine --env=WINEPREFIX=/home/user/.var/app/org.winehq.Wine/data/wine2  org.winehq.Wine winecfg
  1. Flatpak版Wine如果無法存取特定目錄,就用指令開放讀取:
flatpak override --filesystem=/home/user/Public org.winehq.Wine

2. 新增Wine桌面捷徑
#

  1. 可能是Flatpak版的技術限制,Wine安裝的exe圖示無法顯示在Linux桌面的應用程式列表,需要手動新增Desktop Entry。例如,新增Notepad++的捷徑:
vim ~/.local/share/applications/notepadplusplus.desktop
  1. 內容為執行exe的指令,路徑填寫假C槽,圖示從Wine的目錄取用
[Desktop Entry]
Categories=Application;
Exec=flatpak run --command=wine org.winehq.Wine "C:\Program Files\Notepad++\notepad++.exe"
Icon=/home/user/.var/app/org.winehq.Wine/data/icons/hicolor/256x256/apps/7ABC_notepad++.0.png
Name=Notepad++
Type=Application

3. 使用Winetricks安裝中文字型
#

我發現Wine 10.0預設無法顯示中文字型,所以要手動裝cjkfonts。

  1. Flatpak版Wine啟動Winetricks的指令為:flatpak run --command=winetricks org.winehq.Wine

  2. 選取目前容器,安裝字型,安裝cjkfonts。

  3. 如果Winetricks版本太老,參考這個Github issue自行下載新版指令稿套用。

3. Flatpak版Wine在ARM轉譯x86架構exe的可能性?
#

ARM架構的Linux要執行Wine一直是讓人頭痛的問題,究其原因在於很多exe只支援x86架構,在執行之前需要串Box64,將x86架構的Wine轉譯為ARM指令才可以泡。

那麼套用到Flatpak呢?如果在ARM架構的Linux裝置安裝Flatpak版的Wine,預設會下載到ARM架構的Wine,它只能夠執行ARM架構的Windows exe。理論上是這樣,但是撰文當下,Flatpak版Wine連ARM架構的build都沒有!

目前不知道如何在Flatpak裡面使用Box64。只知道Flatpak會在條件允許的情況下,自動調用qemu-user來轉譯x86指令,此方法雖然可行但是效率低下。

  1. 以樹莓派Debian 12為例,執行以下指令,強制在ARM架構的系統安裝x86架構的Wine
flatpak install --arch=x86_64 org.winehq.Wine
  1. 安裝QEMU套件
sudo apt install qemu-user-static qemu-system-x86_64 qemu-system-aarch64
  1. 嘗試執行Wine,我測試的時候確認可以顯示winecfg視窗,但是更複雜的exe不保證能正常執行。
flatpak --verbose run --command=winecfg --arch=x86_64 org.winehq.Wine

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

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