Como posso ter uma sessão de tela por usuário e defini-la como shell de login?

Como posso ter uma sessão de tela por usuário e defini-la como shell de login?

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 ~/.screenrctenham 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 chshno usuário de destino e instale /bin/screenlogin.sho shell quando solicitado.

Responder2

Correr screen -xRfará 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/bashe pressionando enter.

Em seguida, edite o .bashrcarquivo 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 .screenrcna 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.)

informação relacionada