É uma boa ideia colocar “screen -r” no meu .bashrc?

17

Eu gostaria de usar a tela para manter as sessões ssh ativas no meu servidor. Seria bom se eu pudesse retomar automaticamente qualquer sessão em execução para o meu usuário ao fazer o login. A maneira direta de fazer isso seria adicionar "screen -r" ao meu .bashrc, e isso parece funcionar bem. Só estou me perguntando se isso vai quebrar alguma coisa em condições que ainda não testei. Alguém com experiência aqui pode me dizer se é isso que devo fazer?

marcusw
fonte

Respostas:

20

Você precisa screen -R -dse conectar automaticamente a uma sessão existente, se houver, e criar uma sessão caso contrário.

Certifique-se de fazer isso apenas em conchas interativas . Fontes Bash ~/.bashrcmesmo para shells não interativos quando o processo pai é rshd ou sshd (isso é mencionado na documentação, mas é fácil perder). Você pode dizer que um shell é interativo porque $-contém i.

case $- in
  *i*) screen -Rd;;
esac

Isso não permitirá que você execute diferentes sessões de tela em diferentes terminais.

Você precisará se desconectar da tela e sair do shell pai para sair. Isso pode ser resolvido usando em exec screenvez de screen.

Se você iniciar um shell que não seja o de login, será exibido na tela, o que não é o que você deseja na maioria das vezes. Eu pelo menos restringiria isso quando você estiver executando diretamente em uma sessão ssh interativa, com algo como o seguinte no seu ~/.bash_profile:

case "/$(ps -p $PPID -o comm=)" in
  */sshd) screen -R -d;;
esac

Tenha cuidado ao fazer coisas complexas com você, .bashrcpois um erro que causa a saída do shell dificulta o logon.


O que eu recomendo é não modificar os arquivos de inicialização do shell no servidor, mas executar a tela explicitamente a partir do cliente, como em

ssh -t host.example.com screen -R -d

(Você provavelmente criaria um atalho de shell ou atalho do ambiente de área de trabalho no cliente.) Dessa forma, você pode optar facilmente por não executar a tela, especificar um nome de sessão alternativo e assim por diante.

Gilles
fonte
Perfeito. Deve estar na página do manual.
Marcusw
Não é melhor para o ssh rodar screen -D -Rou até mesmo screen -D -RR?
Niutech 29/01
2

Seus scripts de inicialização do servidor X geralmente iniciam um novo shell, por exemplo, se você estiver efetuando login usando o gdm usando a "Sessão Definida pelo Usuário".

Eu acho que qualquer coisa que não saia pode causar a sua inicialização do X travar. Isso incluiria screen -r.

Mikel
fonte
Os scripts de inicialização do servidor X não serão executados .bashrc. Mas há outras circunstâncias em que isso seria um problema, por exemplo, ao executar ssh host.example.com somecommand(estranhamente, o bash é executado .bashrc).
Gilles
Está em algumas distros se você escolher "Sessão definida pelo usuário". No Ubuntu, ele origina .profile explicitamente, outros chamam .xsession de dentro de um shell de logon, o que normalmente significa .bash_profile, e a maioria dos usuários origina .bashrc de dentro de seu .bash_profile.
Mikel