ヘッドレスサーバーでリモートでgnome-terminalを起動するには? (X11転送では起動できません)

ヘッドレスサーバーでリモートでgnome-terminalを起動するには? (X11転送では起動できません)

SSHを使用してアクセスするヘッドレス仮想マシン(Ubuntu Server 17.04を実行)があります。私はX11配信の基本をよく知っており、xtermと友達をうまく伝えることができます。 XFCE端末もOKを渡します。

Gnome Terminalを使いたいのですが起動しないようです。代わりにしばらく停止し、最終的にエラーが発生します。

Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Error calling StartServiceByName for org.gnome.Terminal: Timeout was reached

興味深いことに、私のVMでローカルデスクトップセッションを実行すると(startxを介して開始)、gnome-terminalはX11を介してリモートで動作します。

一種のGnomeサービスを実行する必要があるようですが、それが何であるか、デスクトップセッション全体のコンテキストの外でサービスを開始する方法がわかりません。仮想マシンは基本的にヘッドレスなので、通常は起動しません。

私の仮想マシンでローカルでGUIデスクトップセッションを開始せずにGnome Terminalがリモートで動作するようにするにはどうすればよいか知っていますか?

答え1

これはうまくいきません。gnome-terminal(他のようにgnome-thing)はdbusに接続しようとしますが、応答を受け取らずに長い時間後に失敗します。

最も簡単な解決策は、セッションのdbusインスタンスを起動することです。

export $(dbus-launch)
gnome-terminal

始めるとウェイランド会議時間:離れて初めて実行したので、export $(dbus-launch)もう一度実行する必要があります。それ以外の場合は、gnome-terminal渡されたモニターのX11インスタンスの代わりにWaylandインスタンスがリモートモニターから起動されます。gnome-terminal

この場合の別の回避策は、X11を明示的に実行することです。 X11gnome-terminal-serverは、X11を使用する最後のウィンドウが閉じた後に終了します。例:

#! /bin/bash
ID=foo.bar$RANDOM
GDK_BACKEND=x11 /usr/libexec/gnome-terminal-server --app-id "$ID" &
sleep .4        # yuck
gnome-terminal --app-id "$ID"
wait

答え2

これは、バニラのUbuntuまたはDebianで次のコマンドを使用して実行できます。

ssh -X user@host dbus-launch gnome-terminal

私のメモにはいくつかの共通記号がありますdbus-launch--exit-with-x11--exit-with-session

残りの問題は、ロードに時間がかかることです。

gnome-terminal私はビューにはローカル対リモート会話のようですgnome-terminal-server。コードをインポートして修正する必要がありますが、かなり単純なソフトウェアであり、あまりにも単純です。

編集:また、x11-dbusパッケージなしでこれを行うことができます(Ubuntuでは非常に小さいですが、デフォルトでは使用できません)。

これはすべてのバージョンでは機能しませんが、gnome-terminalUbuntu 22とDebian 11でテストした結果は機能します。

ssh -X user@host gnome-terminal --disable-factory

端末コマンドのスタイル/長さに加えて、これらの方法には違いがあります。

最初の方法は、リモートコンピュータと対話する方法でインスタンスを起動dbus-launchします。gnome-terminalgnome-terminal-server

ただし、この方法ではUbuntu 22ドックなどとシームレスに動作するインスタンスが--disable-factory起動します。gnome-terminal

これら2つのオプションのうちの1つがあなたの要件を満たしていることを願っています。他の方法もありますが、私の考えでは、この方法が簡単すぎるので、これは最善です。

答え3

単一セッションでX11を渡す簡単な場合は、次を参照してください。 https://askubuntu.com/a/1279065/463121

ログイン後:

$ dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY

これにより、gnome-terminalが高速になり、X11を介して渡すことができます。

エラーが発生し始めると、プライベート dbus デーモンが中断された可能性があります。すべてのユーザープロセスを終了して再度ログインできる場合は問題ありません。

編集:またはさらに:

$ dbus-update-activation-environment --all

~からhttps://unix.stackexchange.com/a/243696/139357

答え4

X経由でアプリケーションを起動するのは非常に遅いかもしれません。
私はSSHを介して世界中のクライアントシステムにVNCトンネルを確立することに多くの成功を収めました。

リモートコンピュータにVNCサーバー(TigerVNCなど)をインストールし、デーモンを起動します。 (yum install -y Tigervnc-server ; vncserver :3 - または使用するポート)。パスワードを設定するように求められます。

ローカルコンピュータにVNCクライアントをインストールします(yum install -y Tigervnc)。 ~/.vnc/xstartup ファイルに「exec /usr/bin/gnome-terminal」を追加できます。次に、次を実行します。ssh -L 5903:localhost:5903 -N -f -l user remote-server-IP-or-hostnameここで、ポート番号は59で、目的のポート番号になります。

他の端末で実行:vncviewer:3

サーバーに設定されたパスワードの入力を求められます。

関連情報