▼VNCを使い、リモートから GNOME のデスクトップ画面を出す・GDMログイン画面を出す▼

[VNCでGDMログイン画面]

理屈の上では、ssh の X forwarding でログインしたうえで

remote$ /usr/bin/gnome-session
すれば GNOMEのデスクトップが出そうなんですが、 実際はうまくいきません。 以下、Ubuntu 18.04 での実例ですが、GNOME 3 を使っている環境であれば 当てはまると思います。

$Keywords: GNOME remote desktop, remote GDM login screen, VNC $

$Id$


VNCでGNOMEデスクトップを出す

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 へのオプションと思われて エラーになります。
この状態で、手元の端末のVNCクライアントを使い、 :1 (リモート端末側のlocalhost:5901番ポート)に接続してみます。 素の xterm が1枚だけ出ている画面に接続できれば成功です。 xterm で exit とすればセッションが終了します。

次に、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 へのオプションと思われてエラーになります。
VNCクライアントで :1 (リモート端末側のlocalhost:5901番ポート)に接続してみます。 GNOMEのデスクトップ画面が出れば成功です。


VNCでGDMのログイン画面を出す

/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 のログイン画面が出れば成功です。


トラブルシューティング

Xtigervncがリセットされてしまう

-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 で文法エラーがあった場合でも 接続が切断されてしまいます。


かべ@sra-tohoku.co.jp