私は screen を使用して、サーバ上で ssh セッションを維持したいと考えています。ログイン時に、ユーザの実行中のセッションを自動的に再開できれば便利です。これを行う最も簡単な方法は、.bashrc に「screen -r」を追加することです。これで問題なく動作するようです。まだテストしていない状況で、これによって何かが壊れるかどうかが気になっています。経験のある方で、これが実行すべきことかどうか教えていただける方はいらっしゃいますか?
答え1
screen -R -d
既存のセッションが存在する場合は自動的にそのセッションに接続し、そうでない場合はセッションを作成する必要があります。
必ず対話型シェルでのみこれを行う. 親プロセスが rshd または sshd の場合、非対話型シェルでも Bash~/.bashrc
ソースが提供されます (これはドキュメントに記載されていますが、見落としがちです)。 . が$-
含まれているかどうかで、シェルが対話型であることがわかりますi
。
case $- in
*i*) screen -Rd;;
esac
これでは、異なる端末で異なる画面セッションを簡単に実行することはできません。
ログアウトするには、画面からデタッチし、親シェルを終了する必要があります。exec screen
の代わりにを使用すると、この問題を解決できますscreen
。
ログイン シェル以外のシェルを起動すると、screen が表示されますが、これはほとんどの場合、望ましい動作ではありません。少なくとも、対話型 ssh セッションで直接実行している場合にのみ、これを制限し、 に次のような内容を入力します~/.bash_profile
。
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
.bashrc
シェルが終了するようなエラーが発生するとログインが困難になるため、複雑な操作を実行するときは注意してください。
私が推薦するサーバーのシェル初期化ファイルを変更するのではなく、クライアントからscreenを明示的に実行します。
ssh -t host.example.com screen -R -d
(おそらく、クライアント上にシェル エイリアスまたはデスクトップ環境のショートカットを作成します。) こうすることで、screen を実行しないことや、別のセッション名を指定することなどを簡単に選択できます。
答え2
X サーバーの起動スクリプトは、多くの場合、新しいシェルを起動します。たとえば、「ユーザー定義セッション」を使用して gdm でログインしている場合などです。
存在しないものはすべて、X の起動をハングさせる原因になると思います。これには以下が含まれますscreen -r
。