Disparar mensaje de cron a pantalla gráfica [Solucionado]
Hola todos.
Bueno primero voy a tratar de ser más explícito que el título.
La idea que tengo, es crear una sentencia dentro del cron (de esto no hay duda), en la cual pueda disparar un alerta o mensaje que salga en la pantalla gráfica, (osea la X).
En realidad no se si esto se puede, una de las consulta sería saber si le logra hacer (lo que es obvio si alguien lo hizo).
Estuve probando con varios alternativas encontradas por la web entre ellas: 'kdialos', 'gxmessage'.
Si al comando lo ejecuto en una consola dentro de la X: Sí, se abre la ventana y muestra el mensaje. Pero si voy a 'ttyn' (Ctrl+Alt+Fn) y ejecuto lo mismo no sucede, mejor dicho, no se ve en la parte gráfica. Y tampoco se refleja desde el cron. (Esto es lo que quiero lograr!) Poder incluir en la línea del cron la orden que dispare el mensaje que salta en pantalla X.
Desde ya a todos Gracias por el tiempo dedicado y su ayuda.
PD:
Se que existen programas de alertas (Ej: knotes) que suelen hacer algo similar, pero el usuario final los puede manipular, pienso que de esta manera no es tan abierto y más seguro que se reciba el alerta.
A los administradores, incluí en esta sección del foro, porque creí lo más semejante, quedando a total criterio de Uds. en caso de tener que reubicarlo.
Gracias Yako.
- Inicie sesión o regístrese para enviar comentarios
- 1721 lecturas


Sí es en las TTY,,tendrás que usar dialog, Si es para las X ,,kdialog ,gdialog ,,zenity ,,pero asegurate de usar la variable $DISPLAY ,
Ejemplo:
15 * * * * kdialog --display :0 --passivepopup "esto es un ejemplo " 5Gracias Caliban
Paso a comentarte, que todavía no logré que funcione correctamente
Ante mi error era el paso de parámetros.
Ahora sigo pasando mal los parámetros pero pienso que es cuestion de la variable DISPLAY.
A ver te comento, para que me puedas corregir más.
Ingreso en la tty2, incluso como super usuario (no se si el cron lo puede manejar un usuario normal).
Edito el crontab -e a la siguiente orden:
* * 15 3 * kdialog --display :0 --msgbox "Mensaje prueba"
Y no sucede nada (obvio el primer '*' sería a cada minuto) y no reproduce nada.
Probe:
- cambiando la opción --display a :0.0 (esto lo vi en una consola dentro del X)
- cambiando la opción --display:0 sin espacios por su parecido a la avirable $DISPLAY=:0
- cambié las opciones e incluso la del ejemplo que proporcionasteis.
Pero aún no logro mostrar el mensaje
Lo ultimo que hice fue intentar crear y exportar la variable DISPLAY antes de llamar a kdialog ( ¡¡¡¡QUÉ BURRADA NO!!!! ), pero no le engancho la vuelta. Y orden dentro del crom quedo así:
* * 15 3 * DISPLAY=;0 | export DISPLAY | kdialog --display :0 --msgbox "Mensaje prueba"
Gracias Yako.
Las tareas de crontab ,pueden ser de cada usuario ,o del usuario root .
Edito el crontab -e a la siguiente orden:* * 15 3 * kdialog --display :0 --msgbox "Mensaje prueba"
La linea que pusiste dice que : Ejecutara la tarea el dia 15 del mes 3 ;
intenta esto :
01 * * * * kdialog -- display : 0 --passivepopup " esto es una prueba " 5El primer minuto de cada hora ,de todos los dias ,todos los meses todos los años , lanzara un popup ( cartelito ) ,quedara 5 segundos ,
Presta atencion en cron ,a los intervalos ,yo te pase un enlace que lo explica bien ,,por otra parte cuidado con la variable "display " Es :
display : 0 ( display dos puntos ,espacio cero !! )
Por cierto ,entenderás que si estas en las TTY , y lanzas algo en las X ,estando en la tty vos no lo vas a ver .(para eso deberias usar dialog )
Edito : Podes intentar un intervalo de tiempo corto asi no esperas mucho ,ejemplo :
0/1 * * * * kdialog -- dispplay : 0 -- passivepopup " algo" 5Cada minuto ,comenzando del minuto 0 ( intervalo 0/1 ))
Podrías fijarte el error que te tira ,con
$mail$man cron
$man mail
/usr/share/doc ←←←←←←←← Hay info de casi todo ,
Caliban
Disculpa la demora.
Probé con todas las alternativas y con espacios y todas las formas posibles
el final me está quedando la orden así:
22 * * * * kdialog --display :0 --passivepopup " mensaje " 5
Siguiendo tu consejos descubrí que en /var/mail/root lo siguiente:
From root@yako1.compu Thu Mar 11 14:38:01 2010
Return-path:
Envelope-to: root@yako1.compu
Delivery-date: Thu, 11 Mar 2010 14:38:01 -0300
Received: from root by Yako1.compu with local (Exim 4.71)
(envelope-from )
id 1NpmKf-0002dV-7J
for root@yako1.compu; Thu, 11 Mar 2010 14:38:01 -0300
Date: Thu, 11 Mar 2010 14:38:01 -0300
Message-Id:
From: root@yako1.compus (Cron Daemon)
To: root@yako1.compu
Subject: Cron kdialog --display :0 --passivepopup " mensaje " 5
Content-Type: text/plain; charset=ISO-8859-1
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
kdialog: cannot connect to X server :0
Bien mi demora es porque estuve buscando es ultima línea en la web y tratando de destrabar el problema.
En efecto hay algún paquete que me falta, y no lo pude descubrir
Yako
PD:
La orden dentro del crom quedó así incluso después de muchas comparaciones con otras como las tuyas y otras de la web.
En cuanto a lo del 15/3 de antes fue un error de tipeo, era la fecha de hoy 11/3.
En cuanto al tty y el resultado de kdialog en la misma tty, soy consciente, de que no se va a mostrar. Y no es lo que deseo.
No se si es un error de tipeo ,pero , es : display : 0 display dos puntos espacio cero ; lo menciono por que tal como aparece en tu linea ,falta el espacio entre los dos puntos y el cero !
[...]
kdialog: cannot connect to X server :0[...]
El display :0 "pertenece" al primer usuario que haya iniciado sesión gráfica en el sistema. Prueba lo siguiente en una sesión de terminal de ese usuario:
$ xhost +access control disabled, clients can connect from any host
... posteriormente haz las pruebas que mencionas para enviar el mensaje al entorno gráfico.
Saludos,
Sidd.
EDITO:
Si ya no deseas "prestar" el entorno gráfico entonces ejecutas:
$ xhost -access control enabled, only authorized clients can connect
en una terminal del usuario que inició sesión gráfica.
Lo separé, para asegurarme de que estaba seguro de mis pruebas anteriores e incluso de esta última.
Sigo sin poder observar el mensaje.
Y ahora el archivo /var/mail/root en su última línea aparece lo siguiente:
kdialog: cannot connect to X server :
Osea similar a lo de antes, sin el 0(cero).
Yako.
Hola Siddharta.
Gracias por responder.
Cuando encontré esa línea de error intenté buscar para solucionar mi problema. Entre las soluciones estaban las mismas órdeners que decís.
Mis resultados fueron:
- Si se dispara cualquiera de estas órdenes desde una konsola en la terminal gráfica ( X ). Obtengo los mismos resultados que describís.
- Si se dispara desde una tty, el resultado de cualquiera de ellas es: 'xhost: unable to open display ""'.
Y encontré a alguien en ubuntu que logró que funcione, estando como root se logueo como usuario normal, luego volvó a ser root y pudo ver el resultado del xhost ( no recuerdo si lo usaba en otra cosa o en un kdialog ). Y las órdenes eran:
#kdesu usuario
$xhost +
Al probarlo, lamentablemente no obtuve los mismos resultados :(
Yako
Pues no veo el inconveniente ,en todo caso fijate por las dudas
$ echo $DISPLAY ,Deberia mostrarte algo asi :
:~$ echo $DISPLAY:0.0
Y por las dudas hice algunas pruebas
$ crontab -e ←←← ( con ésto edito mi crontab de usuario ),con la siguiente linea
*/1 * * * * kdialog --display :0 -- passivepopup " prueba " 5Sin separacion entre : y 0 ,,,,,, funciona perfecto cada minuto despliega el cartel .
Bien entre a las TTY ,me identifique como mi usuario , luego edite el crontab y reprograme la tarea ,Funciona perfecto .
¿estás seguro que entras en las TTY como tu usuario ? ,
Por cierto los mail del sistema los podes ver simplemente en un terminal con
$mail& q ←←←← con ésto salis
& ←←←← con ésto listas
Se me ocurre ,y para salir del paso ,si necesitas mostrar un cartel indicativo ,con kdialog, gdialog ,zenity ,etc ,, simplemente hace un pequeño script en bash con la sentencia ,,incluyendo la variable display ,,y luego ,incluís en una tarea de cron que simplemente lance dicho script ( dale los permisos adecuados al script !! )
Edito : intentalo de otra forma
kdialog --display= :0intenta tambien :
* * * * * DISPLAY=: 0 [ tarea ]