Derrubar sessão usuário ocioso [RESOLVIDO]

25. Re: Derrubar sessão usuário ocioso [RESOLVIDO]

Adriano
agavioli

(usa Outra)

Enviado em 10/09/2010 - 17:39h

Então, Ilustríssimo!

Perdoe minha ignorância se estiver falando besteira, heim!... pelo que me parece o IDLE é o tempo total da sessão, não é?


  


26. Re: Derrubar sessão usuário ocioso [RESOLVIDO]

Elder Marco
eldermarco

(usa Fedora)

Enviado em 10/09/2010 - 18:03h

Uma outra alternativa que me surgiu em enquanto lia é monitorar o próprio gnome-screensaver (considerando que se está usando ele), perguntando pelo tempo ocioso. Se for maior que um determinado valor, o script faz logout sem dó nem piedade.

Eis uma documentação do Gnome Screensaver aqui:

http://people.gnome.org/~mccann/gnome-screensaver/docs/gnome-screensaver.html

Particularmente, o método GetSessionIdleTime poderia ser útil.


27. Re: Derrubar sessão usuário ocioso [RESOLVIDO]

Guilherme Moura de Souza
Sir.Guil

(usa CentOS)

Enviado em 10/09/2010 - 18:06h

também não tenho certeza disso mas se você abrir duas TTY em uma delas você ficar apertando w e a outra deixar ociosa esta é o a opção que vai subir em um e na outra não,
no momento em que você trocar a TTY e der um w sera essa opção que ira zerar

mas axo que uma ajuda aki é bem vinda


28. Re: Derrubar sessão usuário ocioso [RESOLVIDO]

Guilherme Moura de Souza
Sir.Guil

(usa CentOS)

Enviado em 10/09/2010 - 18:30h

Creio que descobri a falha do meu script, quando você starta o X ele ocupa uma tty com o carregamento de informações diversas, essa tty fica ociosa enquanto você estiver usando o modo gráfico, obviamente o tempo dela é igual o tempo da seção, só que meu script não quer saber o que é ele mata e pronto,

vou pensar em algo com mais calma e ai lhe digo


29. Re: Derrubar sessão usuário ocioso [RESOLVIDO]

Adriano
agavioli

(usa Outra)

Enviado em 10/09/2010 - 18:54h

Firmeza, Grande Sir.Guil!

De coração, muuuito obrigado pela força!

Continuo tentando... desistir, jamais!!


30. Re: Derrubar sessão usuário ocioso [RESOLVIDO]

Elder Marco
eldermarco

(usa Fedora)

Enviado em 13/09/2010 - 12:27h

Olá meu caro, acho que a minha sugestão em relação a monitorar o gnome-screensaver não foi muito boa, já que não encontrei o método GetIdleTime no meu PC. Talvez as versão mais antigas dele tinha esse método, mas aqui no fedora não encontrei nada.

Assim, apenas por curiosidade, dei uma olhada nas bibliotecas do X11 e achei algumas funções em C que podem ajudar. Escrevi então um humilde programa que retorna o tempo de inatividade do usuário em segundos e poderia ser utilizado no script que o Sr. Guil postou pra você. Creio que já deva existir uma implementação dessa função, dada a sua simplicidade. Creio também que agora ele deverá respeitar o tempo de ociosidade (assim espero!) do usuário.
Eis o link:
http://dl.dropbox.com/u/1281922/files/software/xidle.c

As instruções de como compilar e proceder, estão no arquivo. Não posso dar certeza que ele vai funcionar em TODAS as situações, visto que não o testei nelas, mas até onde pude testar, foi beleza. Veja, por exemplo, na minha seção do gnome, um teste que fiz:

$ sleep 15 && ./xidle
15 s

$ sleep 5 && ./xidle
5 s

Então, creio que isso possa ser capturado num script e utilizado. Um problema é que esse programa deveria ser executado na seção do usuário que se quer derrubar..

Espero que tenha alguma utilidade. :-)
Depois, irei postar ele aqui no VOL para o caso de alguém precisar e fizer alguma busca pelo Google.



31. Re: Derrubar sessão usuário ocioso [RESOLVIDO]

Guilherme Moura de Souza
Sir.Guil

(usa CentOS)

Enviado em 13/09/2010 - 12:27h

Vou incomodar vocês um pouco, minha menininha esta participando "da Promoção Bebê Johnson, os bebês do calendário", se vocês puderem deem uma força lá,

http://www.bebejohnson.com.br/votar_neste/63246

agradeço a boa vontade de vocês,
e me desculpo por pedir isso aki.


32. Re: Derrubar sessão usuário ocioso [RESOLVIDO]

Adriano
agavioli

(usa Outra)

Enviado em 13/09/2010 - 13:54h

Valew, ElderMarco!

Então... Não consegui intrepretar 100% dessa rotina em C, no link aparece tudo em uma linha só (escrita corrida), gostaria de saber quis são os 3 #include no início da rotina?

Obrigado novamente!

Grande, Sir.Guil!!.. pode contar com meu voto!!.. uma graçinha sua paquitinha Giovanna!!.. saúde para ela!


33. Re: Derrubar sessão usuário ocioso [RESOLVIDO]

Guilherme Moura de Souza
Sir.Guil

(usa CentOS)

Enviado em 13/09/2010 - 13:55h

Acho que resolvi o problema de uma forma simples,
se funcionar me avisa que vou publicar este também
________________________________________________________________________


#!/bin/bash

###################################################
# #
# Script para matar conexoes ociosas #
# #
# Nome: LIMPANDO_CONEXAO_ESPECIFICA Versao 0.1 #
# by Guilherme Moura de Souza #
# Colaboradores: agavioli #
# #
# Necessario criar o diretorio /u/log #
# #
# Recomendo rodar atraves do cron do root da #
# seguinte forma: */1 * * * * "caminho do script" #
# #
###################################################

LOG=/u/logs/"LIM_CON-"`date +%m%d`

LIMPANDO_CONEXAO() {
# Digite na frente do "=" o limete de tempo que sera permitido que a
# conexao fique ociosa "EM MINUTOS"

LIMITE=1

#Definindo o PTS/* ou TTY*
PTSocioso=tty7

#Buscando o tempo OCIOSO
Tempocioso=`w -h | grep "$PTSocioso" | tr -s " " | cut -d " " -f5`

#Verificando se alguma conexao esta acima do limite
H1=$(echo $Tempocioso | grep "m")
S=$(echo $Tempocioso | grep "s")
if [ -z $H1 ]; then
if [ -z $S ]; then
M=$(echo $Tempocioso | cut -d ":" -f1)
if [ $M -gt $LIMITE ]; then
skill -kill -v $PTSocioso >> $LOG
fi
fi; else
H2=$(echo $H1 | cut -d ":" -f1)
H3=$(echo $H1 | cut -d ":" -f2 | cut -d "m" -f1)
H=`awk 'BEGIN {print '$H2'*60+'$H3'}'`
if [ $H -gt $LIMITE ]; then
skill -kill -v $PTSocioso >> $LOG
fi
fi
}
# Iniciando Rotina e gerando LOGS
echo " ==================================== " >> $LOG
echo " Inicio da Varredura as "`date +%H:%M:%S` >> $LOG
LIMPANDO_CONEXAO
echo " Fim da Varredura as "`date +%H:%M:%S` >> $LOG


34. Re: Derrubar sessão usuário ocioso [RESOLVIDO]

Guilherme Moura de Souza
Sir.Guil

(usa CentOS)

Enviado em 13/09/2010 - 15:15h

Agradeço o voto agavioli,

eldermarco, eu não entendo muito de programação, principalmente em c
então não estou conseguindo interpretar seu código,
mas acho que ele em shell rodaria legal com meu script,
que me dar uma ajuda para passar ele para shell


35. Opa,

Elder Marco
eldermarco

(usa Fedora)

Enviado em 13/09/2010 - 16:57h

Então, baixem o programa porque não era para ele aparecer somente em uma única linha. Tá indentado bonitinho.. A menos que tenha feito isso no Windows. O final de linha do Windows é diferente do formato usado no Unix. =). Façam assim:

$ wget http://dl.dropbox.com/u/1281922/files/software/xidle.c

e daí creio que estará tudo certo. Se não, eis o código em um pastebin da vida: http://c.pastebin.com/XPkwzqR0 . Compilem conforme instruções no próprio arquivo.

@agavioli, Então, esses includes são bibliotecas que são necessárias para que se possa usar determinadas funções ou variáveis. No caso, precisei da estrutura 'XScreenSaverInfo', das funções 'XScreenSaverAllocInfo()', 'XScreenSaverQueryInfo()' e 'Xfree()', onde eu poderia obter as informações referentes ao tempo ocioso em uma sessão do X, além de outras que estão declaradas nos arquivos de cabeçalho 'X11/extensions/scrnsaver.h' e 'X11/Xlibint.h'. Se eu não adicionar isso, o compilador não irá saber de que função eu estou falando. Além do que, existe o clássico arquivo de cabeçalho 'stdio.h' que me permite usar a função 'printf' e 'fprintf'.

@Sr. Guil, depois de compilado e com o programa no PATH, você pode pode apenas acessar ele como um comando qualquer do sistema:

---------------------------------
$ sleep 5 && xidle
5 s
---------------------------------

O sleep eu só coloquei para simular uma inatividade. No script, você chama direto o comando xidle e pega o primeiro campo para tirar aquele 's' de lá:

xidle | cut -f 1 -d' '

Note que se você fazer isso pelo terminal direto, sempre vai obter um 0 como resposta, já que acabou de dar um ENTER para executar o programa..

Como eu disse, deve já existir alguma maneira implementada de monitorar uma sessão ociosa do X e tudo mais, mas como não achei, escrevi esse programa como quebra galho.

=)


36. Re: Derrubar sessão usuário ocioso [RESOLVIDO]

Elder Marco
eldermarco

(usa Fedora)

Enviado em 13/09/2010 - 17:18h

Ah, fiz uma pequena alteração no programa que não muda nada na saída dele, mas libera a memória que ele aloca para a estrutura display no programa. Se eu não me engano, quando o programa se encerra, o SO já libera diretamente essa memória, mas é sempre bom fazer isso explicitamente no programa.
Eis o novo link no pastebin: http://c.pastebin.com/nA6q2aeV

O link no dropbox continua o mesmo, mas o arquivo foi alterado com isso:
http://dl.dropbox.com/u/1281922/files/software/xidle.c






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts