Musisz screen -R -d
zarówno automatycznie dołączyć do istniejącej sesji, jeśli taka istnieje, i utworzyć sesję w inny sposób.
Upewnij się, że robisz to tylko na interaktywnych powłokach . Źródła Bash ~/.bashrc
nawet dla nieinteraktywnych powłok, gdy jego proces nadrzędny to rshd lub sshd (jest to wspomniane w dokumentacji, ale łatwo go przeoczyć). Możesz powiedzieć, że powłoka jest interaktywna, ponieważ $-
zawiera i
.
case $- in
*i*) screen -Rd;;
esac
Nie pozwoli to łatwo uruchamiać różnych sesji ekranowych w różnych terminalach.
Musisz się odłączyć od ekranu, a następnie wyjść z powłoki nadrzędnej, aby się wylogować. Można to rozwiązać za pomocą exec screen
zamiast screen
.
Jeśli uruchomisz powłokę inną niż powłoka logowania, zostaniesz wyświetlony na ekranie, co nie jest tym, czego chciałbyś przez większość czasu. Ograniczę to przynajmniej do sytuacji, gdy prowadzisz bezpośrednio w interaktywnej sesji ssh, z czymś w rodzaju ~/.bash_profile
:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Zachowaj ostrożność, gdy wykonujesz skomplikowane czynności, .bashrc
ponieważ błąd, który powoduje wyjście powłoki, utrudnia zalogowanie się.
Co mogę polecić to nie modyfikować pliki inicjujące powłoki na serwerze, ale zamiast ekranu uruchamiania wyraźnie od klienta, jak w
ssh -t host.example.com screen -R -d
(Prawdopodobnie utworzyłbyś alias powłoki lub skrót środowiska pulpitu na kliencie.) W ten sposób możesz łatwo zrezygnować z uruchamiania ekranu, podać alternatywną nazwę sesji i tak dalej.