[pyar] Script python desde el inicio

Juan A. Diaz juan en linux.org.ar
Lun Ago 30 03:17:43 ART 2010


On Sun, 2010-08-29 at 23:14 -0300, Mario Colque wrote:
> Muy buenos puntos de vista!
> Vamos a comenzar...
> 
> Lo del tiempo en realidad es algo que utilice en modo de debug, ya que
> la idea es que inicie sin tener que esperar, de todas formas el time
> de espera lo configura el usuario (si lo desea) asi que es algo no
> critico.
> Lo del setuid, tenes toda la razon, no le di la importancia que
> merecía, asi que lo voy a revisar por ese lado tmb.
> La verdad que si considere lo de separar en dos partes, y lo hice,
> llegando a un script muy pequeño que finalmente funciona, pero....
> hice que este me inicie el script de la interfaz, con lo que volvi al
> problema inicial :(

Lo que necesitas son dos procesos independientes.

> El archivo simplemente me sobreescribe (cuidadosamente) algunos
> archivos del sistema y luego me muestra una ventana con información y
> los resultados de la tarea realizada, nada mas.
> La sobreescritura todo bien, ahora al mostrar la ventana... todo mal.

humm, por que sobre escribir? si yo fuera el sysadmin de una maquina
donde quieren instalar algo que me modifica la configuración on the fly
seguramente no instalaría ese programa.

> Otra cosa que pense fue: ejecuto la sobreescritura como root y desde
> ese script, en vez de iniciar el script de la interfaz (que obviamente
> lo hace como root tmb), lo inicie como usuario.
> 
> Lo que hice para probar fue ejecutar: su miUser -c
> "/path/to/script.py" pero sigue con el mismo problema.

El problema es que para poder abrir una programa gráfico en la sesión X
de un usuario en particular tenes que conocer varias cosas, entre ellas
la variable DISPLAY. Es complicado de entender, pero tu script necesita
conectarse al servidor X, y que este te autorice a utilizar ese display
para dibujar la ventana de tu aplicación. 

Cuando te recomendaba separar tu programa en dos partes me refería a dos
procesos independientes. 

Un modo simple sería compartir la información mediante logs.

El primer proceso que realiza modificaciones al sistema puede, y
debería, escribir esos cambios a un log.

Supongamos entonces que:

1) se ejecuta tu primer script al iniciar el sistema, este guarda la
información de las modificaciones realizadas en
en /var/log/pybadmodifications/pybadmodifications.log

2) Cuando el usuario inicia sesión vía el display manager (gdm, kdm,
xdm) se ejecuta tu segunda aplicación, esta lee el log (siempre que
tenga los permisos necesarios para hacerlo[0]) y toma la información, la
procesa y muestra su informe al usuario. Luego de esto se cierra y
listo.

Por lo que comentas con un esquema simple como el planteado arriba
podrías arreglarte. 

[0] Comúnmente no cualquier usuario puede leer los archivos dentro
de /var/log, pero podes crear un grupo del sistema y agregar a tu
usuario a dicho grupo. Por el nivel de modificaciones (que creo
entender) estas realizando en el sistema, crear un grupo y agregar al
usuario a este no parece ser tan grave.

> ahora, de que otra forma podría ejecutar el segundo script (interfaz)
> una vez finalizado el primero? ya no importaría el modo en que se
> ejecute.

Es necesario que se ejecute inmediatamente luego que se termino la
ejecución del primer script? O es necesario que se ejecute cuando el
usuario inicia sesión?

La aplicación que muestra la información al usuario también podría estar
ejecutándose en background y esperar alguna notificación de la
aplicación que genera la información, via dbus, o incluso monitorizar el
archivo de log vía inotify para saber cuando se modifica este. Existen
varias formas de comunicación entre procesos, lo que tenes que pensar es
que es lo que vos necesitas, y en base a eso buscar la más simple.

> De todas formas voy a estar evaluando setuid.

Esta bueno saber para que sirve setuid, pero siempre que puedas
evitalo :)


> Saludos y gracias!

Me gustaría conocer todo el problema, no solo la solución que estas
queriendo generar, cual es la necesidad de modificar en cada inicio del
sistema archivos del sistema? Que tipo de archivos son? serán conffiles?
Tu distribución base, supongo que bien abajo es Debian, no tiene una
forma de manejar el caso de uso de tu aplicación?

Si es por mi podes explayarte con lujos de detalles sobre tu aplicación,
como te decía, quizás el problema tenga incluso una solución aun más
simple y/o correcta.

Saludos

nueces...




More information about the pyar mailing list