Como posso configurar a tela para que ela seja executada automaticamente sempre que um usuário fizer login usando uma interface CLI? Se já houver uma sessão de tela em execução para esse usuário, gostaria que novos logins fossem anexados a essa sessão de tela. Seria muito bom se ao anexar à sessão da tela fosse criada uma nova janela para cada novo login.
Responder1
Primeiro, para os usuários para os quais você fará isso, certifique-se de que eles ~/.screenrc
tenham a linha
shell /bin/bash
(ou qualquer outro shell que seu usuário use atualmente). Se você não tiver essa configuração definida e alterar o shell como faremos, o usuário não conseguirá fazer o login. Você também pode considerar fazer com que a mensagem de inicialização da tela desapareça com esta linha
startup_message off
Ok, agora vamos criar um script executável que se anexe à primeira sessão de tela já em execução, se ela sair e nenhuma já estiver em execução, ele inicia uma. Execute em um terminal
sudo nano /bin/screenlogin.sh
Coloque as duas linhas a seguir:
#!/bin/bash
screen -x -r || screen
Pressione Ctrl xe depois ypara salvar o arquivo. Correr
sudo chmod 755 /bin/screenlogin.sh
Por fim, execute chsh
no usuário de destino e instale /bin/screenlogin.sh
o shell quando solicitado.
Responder2
Correr screen -xR
fará basicamente o mesmo que correr screen -xr || screen
.
O problema é que, até onde eu sei, você não pode passar sinalizadores para um shell de login. Além disso, ter algo não semelhante a um shell como seu shell de login provavelmente quebraria coisas como SFTP.
Então, o que faremos é definir o bash como nosso shell de login. Em seguida, adicionaremos ao final do .bashrc (um arquivo bash é executado quando você o inicia) o código que executa a tela. A tela executará qualquer shell especificado em .screenrc
.
Faremos com que este comando seja executado apenas sob uma condição especial: Somente se a cópia atual do bash não tiver sido iniciada (possivelmente indiretamente) por outra cópia do bash. Isso fará com que se o usuário quiser o bash como seu shell, e a tela iniciar o bash dentro dele, o usuário não receberá uma explosão de bonecas russas do bash dentro da tela dentro do bash dentro da tela dentro do bash até que o computador fica sem memória.
Primeiro, altere o shell para /bin/bash, executando chsh
, digitando sua senha, digitando /bin/bash
e pressionando enter.
Em seguida, edite o .bashrc
arquivo oculto em sua pasta pessoal, adicionando o seguinte ao final:
if [ ${SHLVL} -eq 1 ]; then
((SHLVL+=1)); export SHLVL
exec screen -xR
fi
Agora, edite (crie se não sair) o arquivo oculto .screenrc
na pasta inicial. Adicione ou edite as seguintes configurações:
shell /bin/zsh
startup_message off
(Claro, se você quiser outro shell além do Zsh, vá em frente e coloque-o. Deve até funcionar com o bash.)