私はヘッドレス VM (Ubuntu サーバー 17.04 を実行) を持っており、SSH を使用してアクセスしています。X11 転送の基本は理解しており、xterm やその仲間を問題なく転送できます。XFCE ターミナルも問題なく転送できます。
Gnome ターミナルを使いたいのですが、起動しないようです。代わりに、しばらくハングアップし、最終的に次のエラーが発生します。
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 サービスが実行されている必要があると推測していますが、それが何であるか、または完全なデスクトップ セッションのコンテキスト外でそれを起動する方法がわかりません。VM はデフォルトでヘッドレスであるため、通常はそれらを起動しません。
自分の VM 上で GUI デスクトップ セッションをローカルに開始せずに、Gnome ターミナルをリモートで動作させるにはどうすればよいか、誰か知っている人はいませんか?
答え1
それはうまくいかない。なぜならgnome-terminal
(他のgnome-thing
) は dbus への接続を試みますが、長時間応答を受信しないため失敗します。
最も簡単な回避策は、セッション用に dbus インスタンスを開始することです。
export $(dbus-launch)
gnome-terminal
もしあなたがウェイランドセッションリモートを最初に実行してからマシンが起動していない場合はexport $(dbus-launch)
、再度実行する必要があります。そうしないと、転送されたディスプレイ上の X11 インスタンスではなく、リモート ディスプレイ上gnome-terminal
の Wayland インスタンスが起動されますgnome-terminal
。
gnome-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-terminal
んが、Ubuntu 22 と Debian 11 でテストしたところ、動作しました。
ssh -X user@host gnome-terminal --disable-factory
これらのアプローチには、ターミナル コマンドのスタイルや長さ以外にも違いがあります。
元のアプローチでは、リモート マシンとのやり取り方法に応じてインスタンスdbus-launch
が起動されます。gnome-terminal
gnome-terminal-server
ただし、この--disable-factory
アプローチではインスタンスが起動されgnome-terminal
、たとえば Ubuntu 22 ドックとよりシームレスに動作します。
これら 2 つのオプションのいずれかが要件を満たしてくれることを願っています。他のアプローチもありますが、私の意見では、これらが最も簡単なので最適です。
答え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
答え4
X 経由でアプリを起動すると、非常に遅くなる可能性があります。
私は世界中の顧客システムで SSH 経由で VNC をトンネリングすることに成功しました。
リモート マシンで、tigervnc などの VNC サーバーをインストールし、デーモンを起動します。(yum install -y tigervnc-server ; vncserver :3 - または使用する任意のポート)。パスワードを設定するように求められます。
ローカルマシンにVNCクライアントをインストールします(yum install -y tigervnc)。「exec /usr/bin/gnome-terminal」を~/.vnc/xstartupファイルに追加します。次に、次のコマンドを実行します:ssh -L 5903:localhost:5903 -N -f -l user remote-server-IP-or-hostnameここでのポート番号は59で、選択したポート番号になります。
別のターミナルで次を実行します: vncviewer :3
サーバーに設定されているパスワードの入力を求められます。