本文示範如何在Linux系統,透過Cassowary跑Windows的軟體,例如Microsoft Office 365(Word, Excel, PowerPoint)和Adobe Creative Cloud(Photoshop, Lightroom)系列軟體。
有些Windows軟體用 Linux的Wine也跑不起來,那麼就用「Cassowary」跑吧,讓Windows軟體宛若原生應用程式一樣融入Linux系統。
1. Cassowary原理#
「Cassowary」意為鶴鴕,又稱食火雞,這是一種不會飛的鳥,攻擊性很強。不過我覺得作者casualsnek可能是想玩商業版Wine軟體「Crossover」的諧音啦。
Cassowary用的是什麼神奇技術?其實沒什麼,Cassowary的原理為在Linux系統跑一個Windows虛擬機,設定RDP遠端桌面服務,Windows程式跑在Windows虛擬機裡,Cassowary充當RDP的中介,將其整合至Linux桌面環境。
那這跟手動設定虛擬機RDP再用Remmina存取有何差別?用Cassowary可以簡化存取虛擬機應用程式的過程,Cassowary提供圖形界面開關虛擬機,能夠掃描虛擬機安裝的軟體,將其捷徑新增到Linux桌面,還能與Windows共享資料夾。並且,Cassowary能在不需要虛擬機的時候將其暫停釋放資源。
在Cassowary之前已經有類似專案,如Fmstrat做的 WinApps for Linux,但該專案沒有積極維護了。與此相比,Cassowary算是WinApps的改進版,提供圖形界面方便管理虛擬機與捷徑,並且有持續在更新。
不過同樣都是掛虛擬機在背景,Cassowary方案效能比 Looking Glass + GPU直通要差,RDP沒有硬體加速,視窗縮放也怪怪的,只適合跑簡單的文書軟體。
2. 建立Windows 11虛擬機#
在安裝虛擬機之後,將虛擬機關機。
設定開機Windows自動登入使用者,給虛擬機設定 靜態IP
設定Libvirtd以user模式執行
sudo sed -i "s/#user = \"root\"/user = \"$(id -un)\"/g" /etc/libvirt/qemu.conf
sudo sed -i "s/#group = \"root\"/group = \"$(id -gn)\"/g" /etc/libvirt/qemu.conf
sudo usermod -a -G kvm $(id -un)
sudo usermod -a -G libvirt $(id -un)
sudo systemctl restart libvirtd
- 有AppArmor的系統,需要新增以下規則
sudo ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/
wget https://gitlab.com/apparmor/apparmor/-/raw/master/profiles/apparmor.d/usr.sbin.dnsmasq -O ~/usr.sbin.dnsmasq
sudo mv ~/usr.sbin.dnsmasq /etc/apparmor.d/
sudo sed -i "s/\/usr\/libexec\/libvirt_leaseshelper m,/\/usr\/libexec\/libvirt_leaseshelper mr,/g" /etc/apparmor.d/usr.sbin.dnsmasq
- 確保連線的是本機的Libvrit服務
mkdir -p ~/.config/libvirt
echo "uri_default = \"qemu:///system\"" >> ~/.config/libvirt/libvirt.conf
- 將電腦重開機。
3. 於Windows虛擬機安裝Cassowary伺服端#
開啟Windows系統設定 → 遠端桌面,啟用遠端桌面服務
至 Github下載Cassowary伺服端,選取
cassowary-0.6-winsetup.zip
,解壓縮,對setup.bat
右鍵以系統管理員執行批次檔。虛擬機重開機。
4. 於Linux Host安裝Cassowary客戶端#
- 安裝以下套件
# Arch Linux
sudo pacman -S python3 python3-pip freerdp libvirt-python
# Ubuntu
sudo apt install python3 python3-pip freerdp-x11 libvirt-python
到 Github下載
cassowary-0.6-py3-none-any.whl
安裝wheel,並記得將
~/.local/bin
加入至PATH
pip3 install PyQt5
pip3 install cassowary*
echo "PATH=\$PATH:$HOME/.local/bin" >> $HOME/.profile
- 啟動Cassowary。請確保Windows虛擬機正在執行。
python3 -m cassowary -a
在以下欄位分別填寫虛擬機名稱、虛擬機IP(可從Virt Managet面板得知)、Windows帳號密碼(RDP預設帳密為Microsoft帳密),再點選Save Changes。
點選Reconnect to server,RDP視窗應該會跳出來。此時要切換到Virt Manager的視窗,同意遠端桌面連線。
點選Misc → Create Application menu shortcut,將Cassowary新增至Linux應用程式列表
5. 將Windows應用程式整合到Linux桌面#
切換到Cassowary的Guest APP頁面,點選要新增的應用程式,點選Add。
之後應用程式捷徑就會出現在Linux應用程式列表,您也可以把他們加到桌面。
只要點一下捷徑,應用程式就會自動開啟。
如果您使用的是KDE,您也可以對檔案按右鍵,把相關檔案格式與對應的Windows軟體相關聯。
Cassowary的Launch On Host頁面可以設定不要用虛擬機應用程式開啟的副檔名,例如設定於Linux檔案管理員點二下.docx檔或.doc檔,改以Linux的LibreOffice開啟。
以上的應用程式都是單獨視窗開啟的。如果想要存取完整Windows桌面:點選Misc → Launch Full RDP session。
點選Advacned → Enable VM suspend on inactivity讓虛擬機不用時自動暫停。
6. 共享資料夾#
進入Folder Mappings頁面,設定要共享的資料夾。
Windows → Linux是把Windows的C槽掛載至Linux上。點選Mount all,Linux即可用檔案管理員存取Windows磁碟檔案。
反之,Linux → Windows則是將Linux的目錄掛載至Windows。預設Cassowary會掛載Linux的根目錄至Windows虛擬機(Windows看到的磁碟機代號會是Z:),以便儲存用虛擬機應用程式開啟的Linux檔案。
7. 進階:遠端連線到遠端的遠端Windows虛擬機桌面#
如果帶出去的筆電跑不動虛擬機,就從外部網路連線到家中Linux電腦的虛擬機吧。
參見 用RDP+ZeroTier存取遠端Linux的Windows虛擬機的桌面設定內網穿透軟體。