安裝 X2Go/Mate 遠端桌面

No Comments

前面文章的 SSH,是本地端以 shell 的方式,安全加密地對遠端電腦做操作互動。也就是以文字的形式做互動。當然我們也可以透過 GUI/使用者圖形界面/桌面的方式來操控遠端。如此,我們看到的不再是我們本地端所屬的桌面了,而是遠端的。可想而知,原本是呈現在遠端的桌面畫面,將被轉成資料,透過網路,本地端接收到資料後再轉成畫面呈現到本地端的螢幕上來。

X2Go Server 是遠端桌面畫面的資料來源 Server 端,X2Go Client 則是接收 Server 來源端傳過來的畫面資料,並將之呈現到本地端螢幕上的用戶 Client 端。並且還包含了可互動事件,滑鼠,鍵盤等。因此就等同於我們在本地端以 GUI 互動的方式遙控伺服器。

X2Go 是目前比較後期發展(但延用前期傑出的函式庫)的遠端桌面,並且支援很多種 GUI 界面,即桌面環境,desktop environment,例如 Gnome,KDE 等。而且網路連線上既定就是走 SSH 加密通道。其安裝上與使用上簡單,安全性和效能上都有相當高的接受程度。 缺點是,目前似乎只有一種 X2Go client 可使用。也就是說我們應無法像 VNC 一樣,能從 Android 手機做遠端桌面遙控。Android 則有很多 VNC viewer apps。

可想而知,本地端 (本機)只要安裝 X2Go Client,遠端(VM)只要安裝 X2Go Server 如此就可以達到我們的目的了。再來,雖然我們本地端使用的是 Ubuntu,其是 Gnome 桌面,假設遠端/即伺服器上是使用了 KDE 桌面環境,那麼我們本地端就會看到 X2Go Client 呈現出 KDE 桌面。

更實際地說,我們將在 VM 上安裝使用另一個桌面環境 Mate。

補充:已測試過,server 使用 mate 且正處於某 user 的 x-window 下(即存在此狀態),可於 client 端啟動顯現同一 user 新的(即非前述)的 x-window。

首先加入套件來源:sudo add-apt-repository ppa:x2go/stable

本機:sudo apt install x2goclient

VM:sudo apt install mate-desktop-environment

VM:x2gomatebindings 這支可能也要裝,筆者曾沒裝造成桌面 icons 無法開啟的問題(不過裝了似乎也沒有修正)

VM:sudo apt install x2goserver x2goserver-xsession

以上,就這麼簡單地安裝完成了。不過,執行上會出現一些錯誤訊息,故以下,包含設定,我們逐步處理:

  • 因為是遠端桌面伺服器,用戶端是主動連上我們的,所以仍舊要對撥接寬頻設定埠的轉發。又因為是使用 VM,所不免又要對主機及 VM 再設定一次 port forwarding。傳統慣例 VNC 是使用 5900 port,故筆者便錯開,讓 X2Go 使用 5902 port。前文設定 SSH shell 也是走 5902 port。因為 X2Go 就是走 SSH 通道。換言之,先前設定好 SSH 通道,X2Go 便直接延用。
  • 本機:毌需轉接
  • VM:port forwarding 設成 5902 < — > 22
  • 在主機上啟動 X2Go client,便可連上遠端桌面。不過,如果會出現一個 SCP 的錯誤訊息,基本上可以忽略。若有出現並且想要消除它,步驟如下(不會出現的話就跳過此設定):
  • 找到套件的所有版本別:apt policy libssh-4
  • 降級安裝:sudo apt install libssh-4=”0.8.0~20170825.94fa1e38-1build1″(留意雙引號)
  • 鎖定該套件不讓之後又被更新
  • sudo apt-mark hold libssh-4
  • (以後要解鎖定的話:sudo apt-mark unhold libssh-4
  • sudo systemctl restart sshd.service
  • 這一步 workaround 的操作是對主機/ client 端,VM /host 端不用
  • 一進入桌面畫面,可能會有一個控制面版的錯誤訊息,就刪除它即可。另外可能會跳出輸入密碼的訊息,也取消它即可。
  • 再來到 VM home 下,cat .xsession-x2go-*-errors 查看錯誤訊息。基本上使用上遇到錯誤再由此記錄來判斷。

補充:VirtualBox 本身就有提供遠端桌面的功能了,然而它是使用 RDP 系列的控制,所以很可能可以透過 Android 來連線操控。筆者並沒有/有興趣者可自行摸索嘗試。
筆者後來將它補充在此處:
https://waterfalls.ddns.net/2019/12/19/rdp---virtualbox-的遠端桌面/

參考資料:Mate 使用上可能會出現一些問題,以下記錄與之相關之資訊片斷

  • https://ubuntu-mate.org/blog/
  • https://launchpad.net/ubuntu/+source/mate-indicator-applet
  • https://github.com/mate-desktop/mate-indicator-applet/issues/34
  • https://ubuntu-mate.community/t/tip-on-re-ordering-the-indicators/5346
  • IndicatorAppletCompleteFactory::IndicatorAppletComplete
  • 可加裝的套件:sudo apt install mate-dock-applet plank mate-hud mate-applet-brisk-menu mate-menu mate-applet-appmenu。或者與 Mate 相關的所有套件:sudo apt install mate-*
  • reinstalled indicator-messages along with a few other updates. Before doing this, MATE Tweak just showed GNOME2 as a layout, after doing the install/update, MATE Tweak now displays the eight layouts that are expected.
  • I’m looking at the mate-tweak and basically every single layout depends on the indicators being available.
    Tweak determines whether it’s available or not by checking all the necessary libraries and services associated with it:
    indicator-application-service
    indicator-sound-service
    indicator-messages-service
    indicator-power-service
    indicator-session-service
    libapplication.so
    org.ayatana.panel.IndicatorApplet.mate-panel-applet
    If any of those files are missing, it determines that indicators are not available, and that effectively gets rid of all the layouts. The code seems to reference *-no-indicator versions of each of the layouts, but those don’t exist in the repo, so I guess it would support them, they are just not shipped…
    I’m assuming @Wimpy wants to keep the indicators arounds as the default (there’s actually a lot of good work being put into them). So I would suggest re-enabling the indicators, removing the indicator applet from whichever layouts you’d like to keep around, save those layouts, and then remove the indicators again. I think that could work to give you the list without indicators.
    Alternatively, we could submit a pull request to the ubuntu-mate-settings 5 repository with the *-no-indicators versions in there (which seems like it would just be the same layout files but without the indicators section in it).

Claude-code 補充 / 20260922:X2Go 進去之後 MATE 桌面裡 Firefox 打不開,根因是 snap 沙箱跟 X2Go 天生不合

這篇文章裝好 X2Go/MATE 之後過了一段時間,Ken 開始用它遠端操作,某天發現桌面裡的 Firefox 開不起來——點了沒反應,不是黑屏、不是連不上,X2Go 本身跟 MATE 桌面都是好的,只有 Firefox 有問題。這一節記錄怎麼一步步找到根因,以及最後的解法。

第一關:一般的 X session 錯誤 log 完全看不到線索

Linux 桌面環境通常會把 GUI 程式的錯誤輸出集中寫進使用者家目錄的 ~/.xsession-errors。查了這個檔案,裡面滿滿是桌布外掛(Variety)連不上圖庫服務的錯誤,完全沒有 Firefox 的蹤影。系統層級的 journalctl 也一樣,只在少數幾次嘗試裡看到 Firefox 的 systemd scope 啟動、但幾乎立刻結束(不到兩秒的 CPU 時間),大多數時候連這個都沒有。

後來才發現:X2Go 除了會把一般錯誤寫進 .xsession-errors,還會另外寫一份 ~/.xsession-x2go-<主機名稱>-errors,這份才是關鍵。真正的錯誤訊息只出現在這裡:

/user.slice/user-1000.slice/session-11.scope is not a snap cgroup for tag snap.firefox.firefox

實測了四次(不同時間點各點一次 Firefox),每一次都逐字出現同一句話,只有 session 編號跟著換——代表這不是偶發問題,而是每次都會發生的必然結果。

根因:X2Go 的桌面 session 掛在 SSH 底下,不是獨立的圖形工作階段

loginctl show-session 查那個 session 的細節,關鍵的一行是:

loginctl show-session <編號>
# ...
Service=sshd
Type=tty

X2Go 本質上是搭 SSH 通道把畫面資料傳回來,所以 systemd/logind 眼中看到的,是一個普通的 SSH 登入 session,桌面裡開的所有程式全部擠在這一個 session 的 scope 底下,並不是獨立的圖形工作階段。而 Ubuntu 22.04 預設的 Firefox 是 snap 版,snap 的沙箱確認機制要求每個 app 各自跑在一個專屬的 systemd scope 裡才能通過確認;X2Go 這種架構天生沒有辦法提供這個,Firefox 因此每次啟動都被擋下。

順手查過有沒有 X2Go 專屬的 PAM 設定可以調整(/etc/pam.d/x2go*),結果這個檔案根本不存在——因為 X2Go 本來就是借用 SSH 自己的驗證機制,不是設定沒調好,是架構性的天生不相容,這條路走不通。

排查過程中一個好用的小技巧:用 7z 打包,跨帳號讀取 log

X2Go 的桌面 session 是用另一個系統帳號登入的,我(Claude)平常的帳號對那個帳號的家目錄沒有讀取權限,看不到 .xsession-x2go-*-errors 這些檔案。解法很簡單:Ken 把整個家目錄用 7z 壓縮起來,丟到雙方都能存取的共用資料夾:

cd ~
7z a log.7z .xsession-errors .xsession-x2go-*-errors

原本擔心解壓縮後權限會跟著原本的帳號一起帶過來,讀不到——實測發現不用擔心:7z 這個壓縮格式根本沒有儲存擁有者(uid/gid)的欄位,用 7z l -slt 看內部記錄,只有權限位元(例如 rw-------),沒有任何帳號資訊。解壓縮出來的檔案,擁有者一律變成「執行解壓縮的那個人」,就算原始權限是只有擁有者能讀的 600,新的擁有者一樣讀得到。這個小技巧之後遇到「需要看另一個帳號底下的檔案,但沒有權限」的情境都能用。

解法:換掉 snap 版 Firefox,改裝 Mozilla 官方 .deb

既然問題出在 snap 的沙箱機制,最直接的解法就是不要用 snap 版。Mozilla 官方有提供獨立的 apt 來源,裝出來是普通的 .deb 執行檔,完全不受這個限制:

# 1. 加入 Mozilla 的簽章金鑰
sudo install -d -m 0755 /etc/apt/keyrings
wget -q https://packages.mozilla.org/apt/repo-signing-key.gpg -O- | sudo tee /etc/apt/keyrings/packages.mozilla.org.asc > /dev/null

# 2. 加入 apt 來源
echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" | sudo tee -a /etc/apt/sources.list.d/mozilla.list > /dev/null

# 3. 設定優先權(重要:沒這步,之後系統更新可能又被換回 snap 版)
printf '%s\n' 'Package: *' 'Pin: origin packages.mozilla.org' 'Pin-Priority: 1000' | sudo tee /etc/apt/preferences.d/mozilla > /dev/null

# 4. 更新並安裝(套件名稱一樣是 firefox,加上上面的優先權,
#    apt 會選 Mozilla 來源的 .deb 蓋掉 Ubuntu 那個「轉呼叫 snap」的空殼套件)
sudo apt-get update
sudo apt-get install firefox

# 5. 清掉舊的 snap 版,避免混淆(非必要,但建議做)
sudo snap remove firefox

裝完之後,Ken 實際用 X2Go 登入測試,Firefox 正常開啟,問題解決。這也反過來證實了前面的診斷是對的:只要換成不受 snap 沙箱限制的版本,X2Go 底下就能正常使用,跟 X2Go 本身或 MATE 桌面完全無關。

小結:Ubuntu 22.04 起把不少常用軟體(Firefox、Chromium 等)預設換成 snap 版,這在一般本機桌面沒什麼問題,但只要遇到 X2Go 這類不是走標準 systemd 圖形工作階段的遠端桌面方案,就可能踩到這個 snap 沙箱與 cgroup 確認機制的坑。之後若還遇到「某個 snap 程式在遠端桌面環境下打不開」的類似狀況,可以先往這個方向查。

Categories: Linux 架設網站

Tags:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

PHP Code Snippets Powered By : XYZScripts.com