使用 Xpra 執行遠端伺服器上的 GUI 應用程式

使用 Xpra 執行遠端伺服器上的 GUI 應用程式

目錄

雖然 VNC 或 RDP 可以用來遠端存取 GUI 應用程式,但它們通常需要完整的桌面環境,消耗大量系統資源與頻寬,容易出現延遲與畫質不佳的問題。相比之下,Xpra 是一個更輕量級的解決方案,能讓你在遠端伺服器上執行單一 GUI 應用程式,並將畫面顯示在本地機器或瀏覽器中,無需整個桌面環境。

快速開始

以下將介紹如何在 Ubuntu/Debian 伺服器上安裝與啟動 Xpra,並透過 SSH 隧道安全地將應用程式畫面轉發到本地端。

1. 在伺服器上安裝 Xpra

sudo apt update
sudo apt install xpra

2. 啟動 Xpra 伺服器並綁定 GUI 應用程式

請根據需求設定顯示器號碼、應用程式與本地端口:

DISPLAY=:100           # 指定顯示器號碼 (建議 :100 或更高)
GUI_APP=gedit          # 你要執行的 GUI 應用程式
DISPLAY_PORT=10000     # 本地端口 (可自訂)
xpra start $DISPLAY --start=$GUI_APP --bind-tcp=0.0.0.0:$DISPLAY_PORT --html=on

3. 建立 SSH 隧道連接

由於 Xpra 在伺服器上建立的端口會是在本地網路中,為了安全的在遠端存取,我們需要透過 SSH 隧道將該端口轉發到公網: (可以參考中華電信固定 IP 的申請及設定免費取得公網 IP)

DISPLAY_PORT=10000     # 本地端口 (需與上面設定相同)
USER=<user-name>       # 伺服器使用者名稱,用於 SSH 連線
HOST=<ip-address>      # 伺服器 IP 位址或域名,用於 SSH 連線
SSH_PORT=22            # SSH 連接埠 (預設 22)
ssh -L $DISPLAY_PORT:localhost:$DISPLAY_PORT $USER@$HOST -p $SSH_PORT

在本地端瀏覽器存取

打開瀏覽器,輸入 http://localhost:10000(或你設定的端口),即可直接操作遠端的 GUI 應用程式。

常用管理指令

若已啟動 Xpra 會話,可用下列指令管理:

xpra stop $DISPLAY      # 停止會話
xpra restart $DISPLAY   # 重新啟動會話
xpra info $DISPLAY      # 查詢會話狀態
xpra list               # 列出所有會話

進階用法:直接用 Xpra 客戶端連線

上述方法每次都需要登入伺服器啟動 xpra 後再建立 SSH 隧道,較為繁瑣,所以我通常會在本地端安裝 Xpra 客戶端,然後直接用 Xpra 連線到遠端伺服器。

在本地安裝 Xpra 後,使用以下指令直接連線:

xpra start ssh:$USER@$HOST:$DISPLAY --ssh="ssh -p $SSH_PORT" --start-child=$GUI_APP --html=on

這樣 Xpra 會自動處理 SSH 連線與轉發,無需手動設置隧道。結束時可以使用以下指令來停止會話:

xpra stop ssh:$USER@$HOST:$DISPLAY --ssh="ssh -p $SSH_PORT"
標籤 :
分享 :

相關文章

如何解決 git ssh key permission denied (publickey) 的錯誤

如何解決 git ssh key permission denied (publickey) 的錯誤

最近在設定 git ssh-key 時發生了 Permission denied (publickey) 的問題。雖然網路上有很多相關的解決方案,但是都沒有解決我的問題。因此在這邊紀錄一下我遇到的問題及解決方案。 已經確認 .ssh 資料夾裡面已經有 key 了,也在 GitHub 上正確設定了,在其他電腦運作都沒問題。但是在這台電腦上卻一直出現 Permission denied (publickey) 的錯誤。

閱讀更多
如何在 Windows 使用 WSL2 建立 Linux 開發環境

如何在 Windows 使用 WSL2 建立 Linux 開發環境

隨著微軟提供 WSL2,越來越多工作環境都轉移到 WSL2 下使用 Linux 進行開發,因此記錄一下純指令在 Windows 上安裝 WSL2 並且建立 Linux 開發環境的流程。 並且附上我習慣的預設設定讓 WSL2 更加好用。

閱讀更多
使用 asdf 工具有效管理 Elixir、Erlang、Python 和 Node.js 等多種程式語言的版本

使用 asdf 工具有效管理 Elixir、Erlang、Python 和 Node.js 等多種程式語言的版本

在軟體開發領域中,維持團隊成員工具版本的一致性是非常關鍵的。這正是 asdf 版本管理工具發揮作用的時刻。 asdf 讓你能在一個文件( .tool-versions )裡面指定所有工具的版本,並且將該文件加入到 Git 倉庫中與團隊共享,這樣就能保證每個人都在使用相同版本的工具。

閱讀更多