
Em breve terei que migrar um laboratório de informática inteiro (cerca de 50 PCs) do Windows 7 para o Ubuntu 14.04 LTS. Por se tratar de uma universidade, 99% das vezes (senão 100%) será utilizada por estudantes. Não existe um banco de dados central de contas e credenciais de usuários, portanto cada PC terá apenas duas contas, admin
e guest
, com esta última configurada para login automático (além de algumas personalizações conformeeste tutorial).
Quando os PCs são ligados e a conta de convidado faz login automaticamente, a primeira coisa mostrada após o carregamento do gerenciador de janelas é esta caixa de diálogo:
No entanto, há dois problemas:
- A primeira pessoa que sentar no computador às 9h verá a caixa de diálogo, clique em OK, use o PC, saia, sem encerrar a sessão ou bloquear a tela (por causa dos usuários), e o segundo usuário em diante não verá a mensagem
- Há informações mais relevantes que gostaria de transmitir aos usuários do laboratório (regras do laboratório, etc.).
Então, com esse cenário em mente, o que eu quero alcançar é ter uma caixa de diálogo realmente semelhante a esta (mas com um texto diferente, definido por mim) para aparecer sempre que um computador não for usado por, digamos, 15 minutos. (Para efeitos desta questão, vamos supor que "não usado" significa nenhuma atividade de teclado ou mouse).
eu fui direcionado para Como o Ubuntu determina a inatividade antes de suspender? e Como um script pode detectar o tempo ocioso de um usuário? e uso scripts ruby ou sheel, mas não sei como codificar.
Existe uma maneira mais simples de conseguir o que preciso?
Responder1
Usarxautolock
xautolock -time 15 -locker notify-send -t time "Title" "message_here" -i "path/to/icon"
ou use o zenity ou qualquer diálogo que desejar.
Verhttp://manpages.ubuntu.com/manpages/trusty/man1/xautolock.1.html
Editar: Após a edição da pergunta, o OP foi zenity
xautolock -time 15 -locker "zenity --text='<text here>' --warning"
Responder2
Se você executar o script a seguir em segundo plano, ele verificará o tempo ocioso a cada 5 segundos. Caso o tempo ocioso ultrapasse um determinado tempo (em minutos), aparecerá uma mensagem, definida em um arquivo de texto. (através de uma janela Zenity).
#!/usr/bin/env python3
import subprocess
import time
#########################################
t=15
textfile = "/path/to/message_textfile"
#########################################
with open(textfile, "r") as text:
message = text.read()
while 1!=0:
get_idle = subprocess.Popen(["xprintidle"], stdout=subprocess.PIPE)
result = get_idle.communicate()[0].decode("utf-8")
if int(result)/60000>t:
if warning_given == "yes":
pass
else:
subprocess.Popen(["zenity", "--warning", "--no-wrap", "--text="+message, ])
warning_given = "yes"
else:
warning_given = "no"
time.sleep(5)
Como usar
instalar
xprintidle
:sudo apt-get install xprintidle
Copie o script em um arquivo vazio, defina o tempo ocioso (
t
) em minutos e defina o caminho para o arquivo de texto que contém o texto da sua mensagem. Salve comoset_warning.py
Execute-o pelo comando
python3 /path/to/set_warning.py
Notas
- Por razões de conveniência (e para ter controle sobre o layout do texto), o texto é retirado de um arquivo de texto externo. As devoluções etc. serão copiadas exatamente do arquivo de texto para sua mensagem. Como a
--no-wrap
opção do zenity é usada, vocêprecisarusar as devoluções, caso contrário sua mensagem será excessivamente ampla. - A forma como a mensagem aparece pode ser “ajustada” com outras opções do zenity.
Responder3
Aqui está o que acabei fazendo:
xautolock -time 15 -locker "zenity --text='<text here>' --warning"
Eu adicionei essa linha como uma entrada nos aplicativos de sessão da conta que está vinculada de forma flexível /etc/guest-session/skel
, para que ela seja executada sempre que a sessão de convidado for iniciada.