X11転送は一部のプログラムで動作し、他のプログラムでは$ DISPLAYを無視しますか?

X11転送は一部のプログラムで動作し、他のプログラムでは$ DISPLAYを無視しますか?

2台のLinuxシステムが稼働しています。他人でつながると

ssh -X 192.168.1.6

xtermorを実行できfirefox、作業中のコンピュータでウィンドウが期待どおりに表示されます。

gnome-terminalただし、またはを実行すると、meldこれらのプログラムのウィンドウがリモートコンピュータに表示されます。

エラーメッセージが表示されないため、一般的な認証の問題はないようです。私はそのスレッドを見つけました:ヘッドレスサーバーでリモートでgnome-terminalを起動するには? (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

でご奉仕くださいgnome-terminal。しかし、それにはmeld選択の余地はありません--app-id

正しいコンピュータにウィンドウが表示されるようにする方法はありますか?

しかし、両方のシステムのLinuxバージョンは5.15.12-200.fc35.x86_64 fedoraです。

追加のスクリプトや環境ハックなしで動作させるには:

どこでもWaylandを無効にしてください! Fedora GDM ログイン画面では、ログイン画面でほとんど非表示のメニューを使用できます。後ろにログインするユーザーを選択しました。小さなギアがありますが、現在のGNOMEバージョンでは右側にあります。 「X11の下のGNOME」を選択すると、Waylandの問題を解決できます。タッチスクリーンが機能すると、フォントのレンダリングがはるかに向上し、マウスポインタ補正が完全に機能します。それらのどれもWaylandと協力しません...参考に!注:ホスト側とリモート側の両方で常にWaylandを無効にする必要があります!

ベストアンサー1

私が理解したのは、X11転送を使用するブートストラップの重要な部分は変数ですGDK_BACKEND=x11。これがないと、GNOMEアプリケーションはデフォルトでWaylandウィンドウシステムを使用します。これによりウィンドウがリモートシステムに表示されます。

これは、リモートホストの同じユーザーアカウント(そのホストのローカルセッションに関連付けられている)で実行されているか、オンデマンドD-Busセッションによって開始される可能性がある他の既存のインスタンスに接続しようとしないように--app-idするためです。 X11 転送要求の使用を認識しません。代わりに、X11転送と環境変数を使用するように特定のインスタンスにのみ通信します。gnome-terminalgnome-terminal-servergnome-terminalgnome-terminal-serverGDK_BACKEND=x11

gnome-terminalこれは実際には端末アプリケーションではない--app-idため、必要なものです。これは、D-Busを呼び出して実際の端末ウィンドウを生成する小さなクライアントアプリケーションです。区別できない回避策は次のとおりです。 「この新しい端末ウィンドウを作成するときに既に持っているデフォルトのディスプレイアレイの代わりにX11バックエンドを使用してください。」gnome-terminalgnome-terminal-servergnome-terminalgnome-terminal-server$DISPLAY$XAUTHORITY

私の理論が正しい場合は、次のようなmeld簡単なものから始めることができます。

GDK_BACKEND=x11 meld

これがうまくいけば、次の簡単なラッパースクリプトを作成できます。

#!/bin/sh
if [ "$SSH_CONNECTION" != "" ] && [ "$DISPLAY" != "" ]; then
    GDK_BACKEND=x11 /usr/bin/meld "$@"
else
    exec /usr/bin/meld "$@"
fi

実際のmeld場所があると仮定すると、/usr/bin/meldこのスクリプトに名前を付けて/ usr / binの前のディレクトリにmeld配置すると、ローカルで実行するかSSH X11転送を介して実行するかは常に正しい操作を実行します。$PATHmeld

~/.bash_profileあるいは、セッションがX11転送を介したSSH接続に関連付けられている場合は、すべてのプログラムに対して設定するために~/.profileリモートシステムに簡単なテストを追加することもできます。GDK_BACKEND=x11

if [ "$SSH_CONNECTION" != "" ] && [ "$DISPLAY" != "" ]; then
    export GDK_BACKEND=x11
fi

おすすめ記事