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.
screen -D -R
a nawetscreen -D -RR
?Skrypty uruchamiania X serwera często uruchamiają nową powłokę, np. Jeśli logujesz się przy użyciu gdm przy użyciu „sesji zdefiniowanej przez użytkownika”.
Myślę, że wszystko, co nie wychodzi, może spowodować zawieszenie się twojego X-a. To by obejmowało
screen -r
.źródło
.bashrc
. Ale są inne okoliczności, w których może to stanowić problem, na przykład podczas uruchamianiassh host.example.com somecommand
(dziwnie, wtedy bash się uruchamia.bashrc
).