Wine是讓Windows exe可以在Linux執行的轉譯程式。過去,都要透過APT安裝到Linux系統才可以使用。這樣做有個缺點,就是Linux發行版套件庫收的Wine套件可能參差不齊,特定發行版可能無法下載到最新版的Wine。
- 相關文章:Linux 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並不是這個版本,所以兩者不能互通。
flatpak install flathub org.winehq.Wine
- Flatpak的Wine啟動指令都要加上
flatpak run
,因此flatpak run --command=wine org.winehq.Wine
等於wine
指令,指令的參數加在最後面。
flatpak run --command=wine org.winehq.Wine --version
- 所以,要安裝exe,就是如此安裝:
flatpak run --command=wine org.winehq.Wine <exe路徑>
Linux系統管理員的右鍵選單也可以用Wine開啟exe。
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
- Flatpak版Wine如果無法存取特定目錄,就用指令開放讀取:
flatpak override --filesystem=/home/user/Public org.winehq.Wine
2. 新增Wine桌面捷徑#
- 可能是Flatpak版的技術限制,Wine安裝的exe圖示無法顯示在Linux桌面的應用程式列表,需要手動新增Desktop Entry。例如,新增Notepad++的捷徑:
vim ~/.local/share/applications/notepadplusplus.desktop
- 內容為執行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。
Flatpak版Wine啟動Winetricks的指令為:
flatpak run --command=winetricks org.winehq.Wine
選取目前容器,安裝字型,安裝cjkfonts。
如果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指令,此方法雖然可行但是效率低下。
- 以樹莓派Debian 12為例,執行以下指令,強制在ARM架構的系統安裝x86架構的Wine
flatpak install --arch=x86_64 org.winehq.Wine
- 安裝QEMU套件
sudo apt install qemu-user-static qemu-system-x86_64 qemu-system-aarch64
- 嘗試執行Wine,我測試的時候確認可以顯示winecfg視窗,但是更複雜的exe不保證能正常執行。
flatpak --verbose run --command=winecfg --arch=x86_64 org.winehq.Wine