利用Docker建置Linux遠端桌面,隨時隨地用瀏覽器遠端存取。
1. Webtop特點#
LinuxServer Webtop是在Docker裡跑裝好桌面環境的Linux容器,啟動KasmVNC,讓你能從瀏覽器存取Linux桌面,音訊會自動傳輸過來。
Webtop界面針對行動裝置提供了一些便捷操作,可以方便你用客戶端的輸入法打字,也能夠使將客戶端的麥克風透傳到遠端Linux桌面,或是上傳檔案到遠端。
Webtop不是讓你存取現有Linux桌面的遠端桌面軟體,而是在Docker裡面開VNC遠端桌面,方便從瀏覽器登入桌面開始工作,因此很適合headless的Linux伺服器安裝。
那 KasmVNC有什麼特別的呢?先介紹點背景:KasmVNC是Kasm公司推出的現代化VNC解決方案,主打網頁原生,授權條款為GPLv2,可以獨立安裝作為VNC伺服器。雖然叫做VNC,不過他們拋棄了RFB協定以適應現代化的串流環境,除了指令跟vncserver很像以外其他地方跟傳統VNC差異很大。KasmVNC不是x11VNC那樣給一般電腦用的遠端桌面,而是設計給伺服器使用的。我個人覺得KasmVNC就是整合了各種前人方案的綜合體,也就是TigerVNC + noVNC + VirtualGL,並且比Apache Guacamole更容易安裝,瀏覽器操作十分順暢。但最賤的就是他們沒有把音訊串流技術開源出來,而是包含在他們的商業產品 Kasm Workspaces,與他們的後台管理系統整合在一起。
至於LinuxServer的Webtop專案,可以說是丐版的Kasm Workspaces吧,沒有後台管理界面,但是全開源,同樣使用KasmVNC,並包含了音訊串流技術。如果你很在意授權條款問題,沒有要管理日理萬機的多人Linux伺服器的話,用Webtop搭配 Portainer管理Docker容器就夠了,不需用到Kasm Workspaces!
2. 部署Webtop#
根據
LinuxServer官方文件,預設的映像檔linuxserver/webtop:latest
為Alpine Linux + XFCE桌面,容量很小。LinuxServer還有打包其他的發行版映像檔,我們就使用比較常見的Ubuntu + XFCE吧,名稱為linuxserver/webtop:ubuntu-xfce
。
如果你有自訂系統映像檔的需求,請參照官方文件的步驟用docker自行build。
撰寫docker-compose.yml
如下,注意註解。由於KasmVNC可以使用客戶端輸入法打字,故不用在容器裡裝輸入法。
---
services:
webtop:
image: linuxserver/webtop:ubuntu-xfce # 使用Ubuntu XFCE映像檔
container_name: webtop
security_opt:
- seccomp:unconfined # 新版Docker執行某些程式system call會出錯,故關閉安全機制
environment:
- PUID=1000 # 以一般使用者身份執行
- PGID=1000
- TZ=Asia/Taipei # 時區
- LC_ALL=zh_TW.UTF-8 # 容器裡面的語言
- DOCKER_MODS=linuxserver/mods:universal-package-install
- INSTALL_PACKAGES=fonts-noto-cjk # 在啟動時用APT安裝中文字體
- SUBFOLDER=/ # 網址
- TITLE=Webtop # 網頁標題
- CUSTOM_USER=user # 設定網頁登入帳號
- PASSWORD= # 設定網頁登入密碼
- DRINODE=/dev/dri/renderD128 # GPU加速,Nvidia閉源驅動不可使用DRI3
volumes:
- ./config:/config # 容器資料儲存目錄
- /var/run/docker.sock:/var/run/docker.sock # 讓容器可以存取Docker狀態
- /home/user/Downloads/:mnt/ # 與容器共享宿主機目錄
ports:
- 3000:3000 # http通訊埠,用不到的話可以刪除
- 3001:3001 # https通訊埠,有加密比較安全
devices:
- /dev/dri:/dev/dri # GPU加速,Nvidia閉源驅動不可使用DRI3
shm_size: "1gb" # 容器共享RAM大小
restart: unless-stopped
3. 連線至Webtop桌面#
建議使用Chromium系瀏覽器,Firefox的KasmVNC支援度不太好的樣子。
啟動Docker容器,輸入
https://Linux的IP:3001
連線登入點選左邊的選單,可以啟用客戶端輸入法,以及調整串流品質
上方的選單則是上傳檔案、開啟音訊串流、將客戶端的麥克風透傳給Linux桌面使用
4. Webtop容器資料儲存問題#
請不要在容器使用APT安裝套件,因為每次容器重新啟動都是直接載入原本的映像檔,安裝的套件會消失。
只有使用者家目錄(/home
)下的檔案會儲存到config
Docker volume所在的目錄。
故,如果要安裝自訂程式並在重啟容器後保留,請善用LinuxServer提供的 proot-apps機制安裝程式:
proot-apps install chromium
rootless的 Flatpak也是可以考慮的選項。