在 Ubuntu 18.04 LTS 上跑 Xpra server

Xpra 是一個可以讓你在遠端機器跑視窗的好用工具,
我也是(後知後覺地)昨天才發現它。

有點長的前情提要


最近因為某些因素把 10 年前的 EeePC 拿出來讓他繼續工作,
沒想到連 Google Search 的搜尋結果都跑不太動啊……,
到底一個頁面裡面塞多少 JS code 才開心?
雖然也是有試過用 googler 在本機端以文字界面搜尋,
再用 links 開,但某些筆記環境的 web applications 這樣搞實在太克難啦,
只好到 Google Cloud Platform 租一台台灣的主機跑跑遠端桌面試試。

至於為什麼沒有使用 TightVNC,一方面他不支援 sound forwarding,
一方面覺得我從大學就看 VNC 看到現在也沒啥新東西出現,
就心血來潮去論壇尋找「VNC alternative remote desktop for Linux」,
忘記在哪一頁看到一堆人在說「你一定是沒用過 TightVNC 吧!(英文)Give it a try!」
心想馬德原貼文者就說不想再用 VNC 了你們是瞎了嗎?

於是就到 Wikipedia 的 Comparison of remote desktop software 去大海撈針(?),
我需要的遠端桌面環境有幾個條件:


  • 本身可以是個 service

  • 授權最好是開源系的(MIT / GPL / …)

  • 支援 Sound Forwarding(這樣要是要遠端看影片至少可以克難用一下啊)


最後撈出 Xpra 跟 X2Go。雖然 X2Go 超級好用且令人感動,
但不知道是什麼 bug 導致我用的第二天 X2Go 就再起不能,
一直卡在 x2gocleansessions 這個程序中,
連 reboot 大法也無法解決,最後去看 strace… 我看不懂啊皇上!
於是回來跟 Xpra 搏鬥。

(不過目前我也還沒找出讓 Ubuntu Xpra 支援 speaker forwarding 的方式就是了)

回到主題


而由於 Ubuntu 提供的 package 無法正確啟動 Xpra,
也沒有在 stderr 看出什麼有用的資訊,
在 /usr/lib/python2.7/dist-packages/ 裡面看 xpra 的 code,
跟目前 xpra trunk 的 code 有一些不同,
推測大概是主版本編號雖然一致,release version 卻還沒跟上吧,
只好下載原始碼自己 build 看看。

$ wget https://xpra.org/src/xpra-2.3.2.tar.xz
$ tar xJvf xpra-2.3.2.tar.xz
$ cd xpra-2.3.2.tar.xz

接下來看 README 的步驟安裝,
發現在 setup 時還是缺少了一些東西,
加上後來就算成功跑起來了還是不支援某些 encoding,
反覆測試跟看 log 之後,
整理出我安裝的 packages 是這些:

$ sudo apt install cython pkg-config libx11-dev libxtst-dev \
libxcomposite-dev libxkbfile-dev libxdamage-dev python-gobject-2-dev \
python-gtk2-dev xvfb cython libx264-dev libswscale-dev \
libavcodec-dev libvpx-dev libavformat-dev python-numpy python-avahi

# 再來是安裝與執行
$ ./setup.py install –home=install
$ ./install/bin/xpra start :100 #DISPLAY port 可自訂

Client 端用 apt 安裝一般的 xpra 後執行以下指令應該就可以 attach 了

$ xpra attach ssh:$USERNAME@$SERVER_IP:100 –encoding=h264

如果都已經啟動成功,可以在 server 端試試這個來看看 client 端會不會出現視窗

$ DISPLAY=:100 x-terminal-emulator & # 或其他 server 上有的 GUI 程式
裝完之後再裝自己喜歡的桌面環境跟瀏覽器,
就可以用 h.264 編碼爽爽的在 GCP 的 VM 上面用 YouTube 看影片了。
網路速度夠快的話延遲感還蠻低的,
(是說 X2Go 跑得順利的時候連聲音都有呢,GCP 太威啦!)

放在 AwesomeWM 裡面還可以跟 local 端的視窗並排,
以我目前的特殊狀況來說,這個功能我頗需要的。

遺憾的是


X2Go 除了不能像 Xpra 那樣把本機遠端視窗混合之外,
其實沒什麼可以挑剔的點,
剛灌好時跑得很順,顏色很鮮艷,速度也很快,壓縮也正常,影音表現也不賴,
還可以跟 VMWare 一樣 host / client 共享資料夾,
可是為什麼卡住的原因我要之後再來好好研究一下,
一開始以為是哪個 session 的資料存在硬碟中害他卡住,
後來家目錄的 .x2go 也移除了也是沒有解決,不懂到底是卡在哪……

另外就是 Xpra 雖然畫面可運行,可沒有辦法進行 speaker forwarding 的部份,
目前只確定是 server 端問題,
ps 有看到 Xpra 有順利 PulseAudio 程序,可是 log 卻看到一行

/run/user/1001/xpra/pulse-:100/pulse/native 沒有此一檔案

類似這樣的東西,可是我本機明明就有這個檔案啊 XD
好像是因為這樣沒有能啟動 Speaker Forwading 的功能,
這個也是待下回分曉了。