快轉到主要內容

將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

相關文章

如何在Linux執行Windows exe檔,用Bottles管理多版本的Wine容器
分類   Linux系統 Linux好用軟體
標籤   Bottles for Linux Wine Steam Deck Flatpak
如何在Linux安裝電腦版Line,使用Bottles管理Wine容器
分類   Linux系統 Linux好用軟體
標籤   Wine Linux Waydroid
Linux系統如何安裝Flatpak軟體套件?使用教學
分類   Linux系統 Linux好用軟體
標籤   Flatpak Linux Freedesktop Specifications

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

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