
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, admin
y guest
esta ú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:
Sin embargo, hay dos problemas:
- 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.
- 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)
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-wrap
se 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.