Mostrar un cuadro de diálogo después de un período de inactividad

Mostrar un cuadro de diálogo después de un período de inactividad

Pronto tendré que migrar un laboratorio de computación completo (alrededor de 50 PC) de Windows 7 a Ubuntu 14.04 LTS. Como es una universidad, el 99% del tiempo (si no el 100%) será utilizada por estudiantes. No existe una base de datos central de cuentas de usuario y credenciales, por lo que cada PC tendrá solo dos cuentas, adminy guestesta última estará configurada para iniciar sesión automáticamente (además de algunas personalizaciones segúneste tutorial).

Cuando las PC están encendidas y la cuenta de invitado inicia sesión automáticamente, lo primero que se muestra después de cargar el administrador de ventanas es este cuadro de diálogo:

ingrese la descripción de la imagen aquí

Sin embargo, hay dos problemas:

  1. La primera persona que se siente frente a la computadora a las 9 a. m. verá el cuadro de diálogo, hará clic en Aceptar, usará la PC, abandonará, no finalizará la sesión ni bloqueará la pantalla (porque son usuarios), y el segundo usuario en adelante no verá el mensaje.
  2. Hay información más relevante que me gustaría transmitir a los usuarios del laboratorio (reglas del laboratorio, etc.).

Entonces, con este escenario en mente, lo que quiero lograr es tener un cuadro de diálogo muy similar a este (pero con un texto diferente, configurado por mí) que aparezca cada vez que una computadora no se use durante, digamos, 15 minutos. (A los efectos de esta pregunta, supongamos que "no utilizado" significa que no hay actividad del teclado o del mouse).

me han dirigido a ¿Cómo determina ubuntu la inactividad antes de suspender? y ¿Cómo puede un script detectar el tiempo de inactividad de un usuario? y uso scripts Ruby o Sheel, pero no sé codificar.

¿Existe una manera más sencilla de lograr lo que necesito?

Respuesta1

Usarxautolock

xautolock -time 15 -locker notify-send -t time "Title" "message_here" -i "path/to/icon"

o utilice zenity o cualquier diálogo que desee.

Verhttp://manpages.ubuntu.com/manpages/trusty/man1/xautolock.1.html

Editar: después de editar la pregunta, el OP optó por zenity

xautolock -time 15 -locker "zenity --text='<text here>' --warning"

Respuesta2

Si ejecuta el siguiente script en segundo plano, comprobará el tiempo de inactividad cada 5 segundos. Si el tiempo de inactividad excede una determinada cantidad de tiempo (en minutos), aparecerá un mensaje definido en un archivo de texto. (a través de una ventana de 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)

ingrese la descripción de la imagen aquí

Cómo utilizar

  • instalar xprintidle:

    sudo apt-get install xprintidle
    
  • Copie el script en un archivo vacío, establezca el tiempo de inactividad ( t) en minutos y establezca la ruta al archivo de texto que contiene el texto de su mensaje. Guárdalo comoset_warning.py

  • Ejecútelo con el comando

    python3 /path/to/set_warning.py
    

Notas

  • Por razones de comodidad (y para tener control sobre el diseño del texto), el texto se toma de un archivo de texto externo. Las devoluciones, etc. se copiarán exactamente desde el archivo de texto a su mensaje. Dado que --no-wrapse utiliza la opción de zenity, ustednecesidadutilizar las devoluciones, o de lo contrario su mensaje será excesivamente amplio.
  • La forma en que aparece el mensaje se puede "modificar" con otras opciones de zenity.

Respuesta3

Esto es lo que terminé haciendo:

xautolock -time 15 -locker "zenity --text='<text here>' --warning"

Agregué esa línea como una entrada en las aplicaciones de sesión de la cuenta a la que está vinculada de forma suave /etc/guest-session/skel, por lo que se ejecutará cada vez que comience la sesión de invitado.

información relacionada