理屈の上では、ssh の X forwarding でログインしたうえで
remote$ /usr/bin/gnome-sessionすれば GNOMEのデスクトップが出そうなんですが、 実際はうまくいきません。 以下、Ubuntu 18.04 での実例ですが、GNOME 3 を使っている環境であれば 当てはまると思います。
$Keywords: GNOME remote desktop, remote GDM login screen, VNC $
$Id$
gnome-session は接続するDISPLAYの全画面を取得したいがためか、
X forwarding した ssh から /usr/bin/gnome-session しても
うまくいきません。
--debug
をつけて起動してもあまり手掛かりなし。
仕方がないので、リモート側でVNCサーバを起動して、そこに接続します。
Ubuntu 18.04 では VNCサーバとしては tightvncserver (Xtightvnc)と tigervnc-standalone-server (Xtigervnc) が提供されていますが、 tigervnc-standalone-server をインストールしてください。 Xtightvnc には gnome-session に必要な何かが足りないようで、 途中で gnome-session が終了してしまいます。
remote# apt update remote# apt-get install tigervnc-standalone-server
xinit での動作チェックのため、xterm もインストールしておきます。
remote# apt-get install xterm
まず素の xinit で、VNC環境のチェックをします。 リモートへの localhost:5901 に対する ssh のPort Forwarding のチェックです。
remote$ xinit -- /usr/bin/Xtigervnc :1 -geometry 800x600 -SecurityTypes None -localhost/usr/bin/Xtigervnc はフルパスで入力してください。 "Xtigervnc" だけだとデフォルトサーバの Xorg へのオプションと思われて エラーになります。
次に、gnome-session での GNOME デスクトップを試してみます。
remote$ xinit /usr/bin/gnome-session -- /usr/bin/Xtigervnc :1 -geometry 800x600 -SecurityTypes None -localhost/usr/bin/gnome-session はフルパスで入力してください。 "gnome-session" だけだと xterm へのオプションと思われてエラーになります。
/etc/gdm3/PostLogin/Default に何か細工を仕込んだので動作確認したい、 等の場合、 上の xinit /usr/bin/gnome-session では GDM (GNOME Display Manager) が関与していないので、細工は実行されません。 確認するには、何とかして GDM のログイン画面を出す必要があります。
GDMから直接 Xtigervnc を起動させる方法が編み出せなかったので、 GDM を XDMCP に対応するよう設定変更し、 Xtigervnc -query localhost で XDMCP を使ってログイン画面を出させます。
まずリモート側の /etc/gdm3/custom.conf を編集し、[xdmcp] セクションに Enable=true を書き加えます。
[xdmcp] Enable=true ←追加次に、Waylandを無効にします。GDMは、Waylandが有効になっていると XDMCP に応答してくれないようです。
[daemon] # Uncoment the line below to force the login screen to use Xorg WaylandEnable=false ←コメントを外す最後に、GDMを再起動します。systemctl restart を使います。 systemctl reload ではうまく設定が反映されません。
remote$ sudo systemctl restart gdm # gdm3.service は gdm.serviceへのシンボリックリンク
Xwayland を無効にすると、この時点で ローカル画面の Xserver は Xwayland から Xorg :0 に切り替わります。
udp/177 番ポート(XDMCP)で待ち受けがあることを確認します。
remote$ ss -nap | grep :177 udp UNCONN 0 0 *:177 *:*
XDMCP は UDP プロトコルを使っているため、 ssh でポートフォワードさせることができません。
この状態から、リモートで直接 Xtigervnc を起動します。
remote$ /usr/bin/Xtigervnc :1 -geometry 800x600 -SecurityTypes None -localhost -query localhost -noreset手元の端末のVNCクライアントを使い、 :1 (リモート端末側のlocalhost:5901番ポート)に接続してみます。 GDM のログイン画面が出れば成功です。
-query localhost
でlocalhostの XDMCP に接続しようとしても
remote$ /usr/bin/Xtigervnc :1 -geometry 800x600 -SecurityTypes None -localhost -query localhost Xvnc TigerVNC 1.7.0 - built Dec 5 2017 09:25:01 Copyright (C) 1999-2016 TigerVNC Team and many others (see README.txt) See http://www.tigervnc.org for information on TigerVNC. Underlying X server release 11905000, The X.Org Foundation Mon Sep 21 20:11:45 2020 vncext: VNC extension running! vncext: Listening for VNC connections on local interface(s), port 5901 vncext: created VNC server for screen 0 しばらく間があったのち Warning: VNC extension does not support -reset, terminating instead. Use -noreset to prevent termination.
原因:おそらく、/etc/gdm3/custom.conf で WaylandEnable=false が有効になっていない。
/etc/gdm3/custom.conf で WaylandEnable=true (デフォルト) になっていると、 [xdmcp] セクションで Enable=true になっていても GDM は XDMCP に応答してくれません。
なお、 /etc/gdm3/PostLogin/Default で文法エラーがあった場合でも 接続が切断されてしまいます。