Após ter dificuldades com número de sessões por usuário no
LTSP 4.2, decidi fazer uma solução paleativa para limitar o número máximo de sessões abertas por usuário no
KDE, usando o
KDM.
A solução foi criar um script que é executado quando o usuário faz login, ele deve ficar dentro de "/usr/share/xsessions", aqui ficam os arquivos referentes a sessões disponíveis no seu ambiente.
Vamos criar um novo arquivo chamado "kdeLimitUser.desktop" com o seguinte conteúdo:
[Desktop Entry]
Encoding=UTF-8
Type=XSession
Exec=/home/scripts/limitUserKde.sh
TryExec=/home/scripts/limitUserKde.sh
Name=KDE
Name[xh]=iKDE
Comment=The K Desktop Environment, a powerful Open Source graphical desktop environment
Comment[pt_BR]=Acrónimo para K Desktop Environment (ou Ambiente de Trabalho K), um poderoso ambiente de trabalho gráfico
Note os parâmetros "Exec" e "TryExec", eles deverão apontar para o script que fará o controle. Vamos então criar este script, o local pode ser escolhido a vontade, desde que ele tenha as permissões de execução para todos usuários (chmod 0755 limitUserKde.sh).
#!/bin/bash
# Scripts que limita o numero de sessões abertas por usuário no kde
# Script roda junto com o xsession /usr/share/xsessions/kdeLimitUser.desktop
# ele deve ser configurado no arquivo .dmrc no diretório do usuário.
# Numero máximo de sessões por usuário
NUMERO_MAX_SESSION_KDE=1
# Usuários sem restrição
USUARIOS_SEM_RESTRICAO="root"
# Função que envia notificação via netsend (Mensageiro do Windows deve estar ativo)
# Aqui poderia ser usado Jabber, e-mail entre outros meios.
notifica_limite_sessao (){
MSG="O usuário $USER esta tentando logar em mais de $NUMERO_MAX_SESSION_KDE sessões do KDE. "
#Rogerio
echo $MSG | smbclient -M sistema02 -I 10.1.5.50 -U "Limite de sessões KDE."
}
# Testa se e usuário sem restrição, essa opção só sera válida se todos usuários
# tiverem dentro do /home/.dmrc setado para usar kdeLimitUser.desktop, caso contrario
# sera valido o que estiver configurado.
for semLimit in $USUARIOS_SEM_RESTRICAO ; do
if [ $USER == $semLimit ]; then
#startkde
#echo "Sem restricao"
exit 0;
fi
done
# Verifica o numero de sessões abertas, permite ou não uma nova sessão
NRO_SESSION_USER=$(ps -fu $USER | grep -v grep | grep -wi "/bin/sh /usr/bin/startkde" | wc -l)
if [[ $NRO_SESSION_USER -eq $NUMERO_MAX_SESSION_KDE || $NRO_SESSION_USER -gt $NUMERO_MAX_SESSION_KDE ]]; then
#startkde
echo "-> Limite atingido"
notifica_limite_sessao
exit 0;
elif [ $NRO_SESSION_USER -lt $NUMERO_MAX_SESSION_KDE ]; then
# Caso o numero de sessões não tenha sido atingido inicia o KDE
startkde
exit 0;
fi
exit 0
Após criado, o arquivo .dmrc dentro do home de cada usuário deve ser alterado para chamar nosso verificador, logo o conteúdo do arquivo .dmrc deve ficar assim:
[Desktop]
Session=kdeLimitUser
Essa solução funcionou no meu ambiente, fica ai a sugestão. Lembrando que limita as sessões do KDE e não do terminal, para limitar o terminal use o "lts.conf" e "/etc/profile".
E também tem a brecha que se o usuário, troca a sessão pelas opções da tela de login, ou alterar o conteúdo do .dmrc, ou remover esse arquivo e ele for criado de novo como o padrão, a sessão deixa de ser controlada, e passa a valer o que estiver dentro do .dmrc.
Vale a pena remover as opções referente as sessões da janela de login, para remover exclua os arquivos do diretório "/usr/share/xsessions/" deixando apenas o referente ao KDE, para quem usa gdm, alterar "/usr/share/gdm/BuiltInSessions/default.desktop" o paramentro exec.
Verifique o "/etc/X11/xinit/Xclients" para alterar a sessão default e também deixar o .dmrc correto dentro do "/etc/skell" para que cada usuário novo criado, seja adicionado o .dmrc correto para ele.