Linux. Cron. Executar programes gràfics


No se si mai heu intentat executar un programa gràfic amb el cron a linux, suposo que us heu trobat amb el problema que no es pot directament.

Fins ara havia trobat una solució, amb un programa anomenat Gnome Schedule, però li fa falta el PyGTK >= 2.3 i el Python, entre d'altres, no sempre disponibles.

Cercant per internet, semblava que havia de ser una cosa senzilla, tant sols haviem de crear una línia similar a:

export DISPLAY=:0.0 instrucció

Però la cosa no funcionava, i per tant no era una solució viable.

Be després d'una recerca, més intensiva, vaig trobar que feia falta una instrucció una mica més complicada, on entre d'altres hi havia:

XAUTHORITY=/var/run/gdm/auth-for-josepm-Z5TYnz/database

El problema era que el codi, que surt darrera de l'usuari, Z5TYnz, canvia cada cop que s'entra a l'usuari o es posa en funcionament l'ordinador. Així que era qüestió de veure com treure aquest valor. Al final és una manipulació d'una cadena de caràcters, i de tot plegat va sortir el següent script, en que he generalitzat amb algunes suposicions:
  • A l'ordinador hi ha tant sols un usuari connectat.
  • Si hi ha més d'un usuari s'enviarà al primer que surt de la llista amb users.
  • L'script posa en funcionament el firefox amb una pàgina web en concret, canviat això podeu obrir qualsevol altra programa.
Aquest script va junt a una línia de crontab a /etc. Editem /etc/crontab. Suposem que el volem executar a les 10 del matí cada dia i l'hem anomenat grafics i l'hem posat a dins de la carpeta scripts.

* 10 * * * root /opt/scripts/grafics

Més informació sobre el Crontab:



Ni que dir que, el fitxer grafics ha de tenir drets d'execució: chmod a+x grafics

Be tot seguit l'script, deixaré remarcada la part que es pot canviar:


###################################################################################
#!/bin/bash                                                                       #
# Script per executar un programa gràfic des del cron                             #
#                                                                                 #
# Llicència: GPL v3.0                                                             #
# Autor: Josep M Sardà.IES RAMON TURRÓ I DARDER. 
Departament d'Educació           #
# Col·laborador: David Agüera.                                                    #
# Versió: 1.0                                                                     #
# Data: 29-11-2012                                                                #
###################################################################################

# Cerquem l'usuari connectat ######################################################
export connectat=`sh -c "users"`
export connectat=${connectat%%[[:space:]]*}

# Cerquem el codi d'autorització per aquest usuari#################################
export usuari=`sudo ls /var/run/gdm/auth-* | grep $connectat`
export usuari=${usuari/:/}
export usuari="XAUTHORITY=$usuari/database"

# Executem el programa firefox i obre una web #################################

sh -c "DISPLAY=:0; $usuari; XAUTHLOCALHOSTNAME=localhost; export DISPLAY; export XAUTHORITY; export XAUTHLOCALHOSTNAME; firefox www.iesmalgrat.cat"


tecnocat.eu