Es necesario screen -R -d
que ambos se adjunten automáticamente a una sesión existente si existe y, de lo contrario, cree una sesión.
Asegúrese de hacer esto solo en shells interactivos . Fuentes de Bash ~/.bashrc
incluso para shells no interactivos cuando su proceso padre es rshd o sshd (esto se menciona en la documentación, pero es fácil pasarlo por alto). Se puede decir que un shell es interactivo porque $-
contiene i
.
case $- in
*i*) screen -Rd;;
esac
Esto no le permitirá ejecutar fácilmente diferentes sesiones de pantalla en diferentes terminales.
Deberá desconectarse de la pantalla y luego salir del shell principal para cerrar sesión. Esto se puede resolver usando en exec screen
lugar de screen
.
Si inicia un shell que no sea un shell de inicio de sesión, aparecerá en la pantalla, que no es lo que desea la mayor parte del tiempo. Al menos restringiría esto a cuando se ejecuta directamente en una sesión ssh interactiva, con algo como lo siguiente en su ~/.bash_profile
:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Tenga cuidado cuando hace cosas complejas con su, .bashrc
ya que un error que hace que el shell se cierre dificultará el inicio de sesión.
Lo que recomiendo es que no modifique sus archivos de inicialización de shell en el servidor, sino que ejecute la pantalla explícitamente desde el cliente, como en
ssh -t host.example.com screen -R -d
(Probablemente crearía un alias de shell o acceso directo de entorno de escritorio en el cliente). De esa manera, puede elegir fácilmente no ejecutar la pantalla, especificar un nombre de sesión alternativo, etc.
screen -D -R
o inclusoscreen -D -RR
?Los scripts de inicio del servidor X a menudo inician un nuevo shell, por ejemplo, si inicia sesión con gdm mediante la "Sesión definida por el usuario".
Creo que cualquier cosa que no salga puede hacer que su inicio de X se cuelgue. Eso incluiría
screen -r
.fuente
.bashrc
. Pero hay otras circunstancias en las que esto sería un problema, por ejemplo, cuando se ejecutassh host.example.com somecommand
(extrañamente, bash se ejecuta.bashrc
entonces).