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

1

Como posso definir a tela para que 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 qualquer novo log-in fosse anexado a essa sessão de tela. Seria muito bom se, ao anexar à sessão de tela, uma nova janela fosse criada para cada novo login.

    
por Azendale 08.08.2011 / 07:04

2 respostas

0

A execução de screen -xR será basicamente igual à execução de screen -xr || screen .

O problema é que, até onde eu sei, você não pode passar flags para um shell de login. Além disso, ter uma tela semelhante a não 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, vamos adicionar ao final do código .bashrc (um arquivo bash é executado quando você iniciá-lo) que executa a tela. A tela irá então executar qualquer shell especificado em .screenrc .

Faremos com que este comando seja executado somente sob uma condição especial: Somente se a cópia atual em execução 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 shell, e a tela começar a bater dentro dele, o usuário não terá uma explosão de bonecas russas de bash dentro da tela dentro do bash dentro da tela dentro do bash até 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 arquivo .bashrc oculto na 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 ele 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 algum outro shell que Zsh, vá em frente e coloque isso em vez disso. Deveria até trabalhar com bash.)

    
por Azendale 18.08.2012 / 07:39
1

Primeiro, para os usuários para os quais você fará isso, certifique-se de que ~/.screenrc tenha a linha

shell /bin/bash

(ou qualquer outro shell que seu usuário use atualmente). Se você não tiver essa configuração configurada e alterar seu shell como desejar, o usuário não poderá efetuar login. Você também pode considerar deixar a mensagem de inicialização da tela com esta linha

startup_message off

Ok, agora vamos criar um script executável que seja anexado à primeira sessão de tela já em execução se ela sair e ela já não estiver sendo executada. Correr em um terminal

sudo nano /bin/screenlogin.sh

Coloque nas duas linhas seguintes:

#!/bin/bash
screen -x -r || screen

Pressione Ctrl x e depois y para salvar o arquivo. Executar

sudo chmod 755 /bin/screenlogin.sh

Por fim, execute chsh no usuário de destino e coloque /bin/screenlogin.sh para o shell quando solicitado.

    
por Azendale 08.08.2011 / 07:20