Vous devez screen -R -d
à la fois vous attacher automatiquement à une session existante s'il en existe une et créer une session dans le cas contraire.
Assurez-vous de ne le faire que sur des shells interactifs . Bash sources ~/.bashrc
même pour les shells non interactifs lorsque son processus parent est rshd ou sshd (cela est mentionné dans la documentation, mais il est facile de le manquer). Vous pouvez dire qu'un shell est interactif car $-
contient i
.
case $- in
*i*) screen -Rd;;
esac
Cela ne vous permettra pas facilement d'exécuter différentes sessions d'écran dans différents terminaux.
Vous devrez vous détacher de l'écran, puis quitter le shell parent pour vous déconnecter. Cela peut être résolu en utilisant exec screen
au lieu de screen
.
Si vous démarrez un shell autre qu'un shell de connexion, vous serez mis à l'écran, ce qui n'est pas ce que vous voudriez la plupart du temps. Je limiterais au moins cela à lorsque vous exécutez directement dans une session ssh interactive, avec quelque chose comme ce qui suit dans votre ~/.bash_profile
:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Soyez prudent lorsque vous faites des choses complexes avec votre .bashrc
car une erreur entraînant la fermeture du shell rendrait la connexion difficile.
Ce que je recommande est de ne pas modifier vos fichiers d'initialisation du shell sur le serveur, mais d'exécuter l'écran explicitement à partir du client, comme dans
ssh -t host.example.com screen -R -d
(Vous créeriez probablement un alias shell ou un raccourci d'environnement de bureau sur le client.) De cette façon, vous pouvez facilement choisir de ne pas exécuter l'écran, spécifier un autre nom de session, etc.