$ DISPLAYを正しく(再)設定する方法は?

$ DISPLAYを正しく(再)設定する方法は?

MobaXTermを使用して、SSHを介してWindows PCからLinux PCに接続します。

SSHセッション内には、いくつかのウィンドウとウィンドウを持つtmuxセッションがあります。

sshセッションは、数時間アクティビティがないと接続が切断されることがよくあります(MobaXTermで同様の接続を維持しようとしましたが、成功しませんでした)。

最初の問題:新しいSSHセッションを開始した後既存のtmuxセッションに再接続する$DISPLAY変数が「間違って」に設定されることがあります。つまり、X-Windows(Firefoxなど)を使用してGUIを起動すると、「ディスプレイを開けません」というエラーメッセージが表示されます。たとえば、

$ firefox &
[1] 23077
$ Unable to init server: Broadway display type not supported: localhost:11.0
Error: cannot open display: localhost:11.0

[1]+  Exit 1                  firefox
$ echo $DISPLAY
localhost:11.0

通常私がオープンしたとき新しい端末と私は更新された/正しい値を取得します$DISPLAY。その端末でX-Windowを使用してGUIを正常に起動できます。

$DISPLAY質問:動的に「更新」する方法はありますか?既存の端末(つまり、SSH接続が切断されるまでアクティブになる端末)?つまり、インポートされた/検出された新しい値に対してのみ新しい端末を起動したくありません$DISPLAY

私はそれが何を意味するのか実際には理解していません$DISPLAY。したがって、誰かがそれが何を意味し、説明された文脈で何をしているのかを説明できれば幸いです。

答え1

tmuxが接続されると、デフォルトではDISPLAYセッション環境で更新されますが、新しいウィンドウにのみ適用できます。既存のウィンドウに適用するには、次のことができる必要があります。

eval "$(tmux showenv -s DISPLAY)"

答え2

DISPLAYXクライアント(アプリケーション)は、接続する対応するXサーバーを見つけるために使用されます。形式ですが、hostname:displaynr.screennr一般的にはこのような内容だけを見ることができます:0。これは、最初のディスプレイで実行されるXサーバーを意味しますlocalhost

Xプロトコルが暗号化されていないため、ホスト名を使用すると安全ではありません。したがって、sshX転送はこのモードを使用して利用可能なディスプレイ番号(通常10以上)を見つけ、そのディスプレイ番号からXサーバーであるかのように偽装します。ただし、実際には、SSH接続を介してXプロトコルをSSHクライアントを呼び出すホスト上で実行されているXサーバーに転送します。

そのため、DISPLAY再接続すると何か別の結果が得られますssh。各接続はsshこの変数を異なる値に設定します。

この新しい正しい値が表示されます。今後tmuxに接続します。新しい端末を開くときにも見ることができます。新しい端末は新しく設定された変数をコピーしますが、古い端末はすでに持っている変数を保持しているDISPLAYからです。DISPLAY

DISPLAYしたがって、tmuxに追加するのではなく、読み込み、tmuxに追加してから既存のセッションに設定するスクリプトを直接作成した場合は、DISPLAY実行する必要がある作業を自動化できます。

しかし、tmuxを使ってこれを行うのは簡単ではないようです。ここあなたに効果があるかもしれないしないかもしれないこれを行う方法についていくつかの提案が含まれているもう一つの質問です。

答え3

ネットワークにログインするときは-X;(以前)を使用してください。ssh -X [email protected]

この-X通知によりsshブラウザが表示されることがあります。

関連情報