Mostrar uma caixa de diálogo após um período de inatividade

Mostrar uma caixa de diálogo após um período de inatividade

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, admine 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:

insira a descrição da imagem aqui

No entanto, há dois problemas:

  1. 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
  2. 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)

insira a descrição da imagem aqui

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-wrapopçã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.

informação relacionada