今天要分享的軟體叫做WinBoat,它能讓你在Linux執行Windows程式。
要在Linux跑Windows軟體,最穩定的方法便是透過虛擬機,譬如Virt Manager + QEMU/KVM跑Windows虛擬機。但是透過Virt Manager視窗來操作Windows顯得有些不便,所以有許多開發者提出了透過RDP遠端桌面的方式,讓虛擬機內的程式與Linux桌面更好的整合,讓Windows程式的視窗繪製在Linux桌面上。
例如在Linux桌面,開啟Microsoft Office視窗。宛如原生應用程式一樣的操作。
類似WinBoat的軟體有WinApps和Cassowary。WinBoat跟WinApps的差別在於,它是在Docker裡面跑Windows 11虛擬機,而非直接透過Libvirt(WinApps允許你選取Docker或Libvirt作為後端,彈性較高,能GPU直通),不過它還是有用到KVM。
WinBoat界面比較漂亮,設定過程比較直覺,只要裝好Docker與KVM的前置依賴套件,這個圖形程式就會自動幫你建立Windows虛擬機,在虛擬機內部安裝與Linux溝通的伺服器程式winboat_guest_server。並且會自動將Linux家目錄掛載到Windows檔案總管,共享資料夾。
不過,WinBoat本質上是跑一個Windows虛擬機,目前無法GPU直通,圖形效能低落,只適合跑文書程式。
我覺得比較有趣的是作者使用的發行版。試想:Steam Deck可以不裝Windows系統,也能跑Windows exe程式嗎?比如說Office 365?WinBoat作者是用Bazzite測試的,這個是專為Steam Deck設計的玩遊戲系統。既然這種immutable distro都能裝了,一般Linux發行版更不用說。
1. 安裝前置依賴#
跑WinBoat建議電腦要有8GB RAM,因為要分配給虛擬機至少4GB RAM。再考慮到Windows 11的吃資源程度,分配8GB RAM最為保險。否則用起來會很卡。
以Ubuntu來說,需要安裝:
sudo apt install freerdp3-x11
- 設定開機載入iptables模組
echo -e "ip_tables\niptable_nat" | sudo tee /etc/modules-load.d/iptables.conf
- 重開機。
2. 安裝WinBoat#
到Github下載AppImage,點二下執行。如果不能開啟,嘗試安裝.deb或.rpm版本。
初次開啟,確認已經符合前置條件
選取安裝Windows 11系統,安裝Windows的時候只有英文和簡體中文,稍後可以到系統設定自行下載語言套件改成繁體中文。
設定Windows帳號和密碼,這裡是離線帳號,不用輸入Microsoft帳號
建議分配2核心以上CPU與4GB以上RAM
等待安裝完成。安裝的時候可以在瀏覽器輸入
http://127.0.0.1:8006/
檢視Windows畫面。WinBoat安裝後的Windows非啟用狀態?需要用Microsoft Acitvation Scripts。
WinBoat內部能夠設定Windows的縮放。目前的比例有點太大了,建議維持100%就好。
3. 視窗操作邏輯#
在Apps列表會看到Windows所有的程式。這個界面也允許你自訂exe啟動捷徑。
預設模式下是一個程式一個視窗,透過FreeRDP控制。中文輸入法不能使用Linux端的,只能用Windows的。
需要完整Windows桌面的,點選「Windows Desktop」就行。在瀏覽器輸入http://127.0.0.1:8006
也能透過noVNC登入Windows。在開啟Windows桌面的時候,其餘的RDP視窗會被關閉。
有時候RDP視窗沒有關乾淨,用指令強制殺掉。
killall xfreerdp
有時候虛擬機不能從WinBoat的界面關閉,用指令關
docker ps
docker stop WinBoat
WinBoat建立的Windows虛擬機容器會在Linux開機後自動啟動,可能會佔用一部分宿主機資源。不用的話記得關掉。
4. 共享資料夾#
在Windows檔案總管 → 網路 → host.lan → Data ,可以看到Linux家目錄的檔案,檔案可以直接複製貼上。
當然,你也可以用SSHFS或者SAMBA的方式,與Linux宿主機共享檔案。