回答:
screen -R -d
既存のセッションが存在する場合は自動的に接続し、存在しない場合はセッションを作成する必要があります。
対話型シェルでのみこれを行うようにしてください。~/.bashrc
親プロセスがrshdまたはsshdである場合、非対話型シェルの場合でもBashソース(これはドキュメントに記載されていますが、見落としがちです)。が$-
含まれてi
いるため、シェルがインタラクティブであることがわかります。
case $- in
*i*) screen -Rd;;
esac
これにより、異なる端末で異なる画面セッションを簡単に実行できなくなります。
画面からデタッチし、親シェルを終了してログアウトする必要があります。これはのexec screen
代わりに使用することで解決できますscreen
。
ログインシェル以外のシェルを起動すると、画面に表示されますが、これはほとんどの場合に必要なものではありません。私は少なくとも、これを対話型sshセッションで直接実行している場合に制限します~/.bash_profile
。
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
.bashrc
シェルを終了させるエラーによりログインが困難になるため、複雑な操作を行う場合は注意してください。
私がお勧めするのは、サーバー上のシェル初期化ファイルを変更せず、代わりにクライアントから画面を明示的に実行することです。
ssh -t host.example.com screen -R -d
(おそらく、クライアント上でシェルエイリアスまたはデスクトップ環境のショートカットを作成します。)そうすれば、画面を実行しない、別のセッション名を指定するなどを簡単に選択できます。
screen -D -R
か、でもscreen -D -RR
?
Xサーバーの起動スクリプトは、多くの場合、新しいシェルを起動します。たとえば、「ユーザー定義セッション」を使用してgdmを使用してログインしている場合です。
終了しないものがあると、Xの起動がハングする可能性があると思います。それには含まれますscreen -r
。
.bashrc
。しかし、これが問題になる他の状況があります。たとえば、実行中ですssh host.example.com somecommand
(奇妙なことに、bashは実行されます.bashrc
)。