Foro de elhacker.net

Sistemas Operativos => GNU/Linux => Mensaje iniciado por: SnakeDrak en 24 Octubre 2010, 19:02 pm



Título: Ejecutar desde PHP una aplicación GUI
Publicado por: SnakeDrak en 24 Octubre 2010, 19:02 pm
Hola,

Mi pregunta es cómo puedo decirle al servidor X que ejecute un programa desde un usuario por consola.

Usuario en concreto: www-data
Usuario con el servidor X: snake

Al programa le puedo pasar el display: programa :0.0, pero esto no funciona:

Código
  1. programa: could not open display ":0.0", aborting.
  2.  

También probé con export DISPLAY (que es lo mismo que pasarle el display al programa) y tampoco. Es posible que no entienda bien como funciona eso de los displays...

Un saludo y muchas gracias por su colaboración.


Título: Re: Ejecutar desde PHP una aplicación GUI
Publicado por: Foxy Rider en 24 Octubre 2010, 21:20 pm
Seguramente estarás usando xauth .. con este método cuando se establece una sesión en X, se usa una "cookie" para autentificarse al servidor, y como ese otro usuario no dispone de la cookie ... no puede hacerlo ... copiá  .Xauthority del usuario con la sesión en X (snake) cuidando los respectivos permisos al home del usuario el cual quieras lanzar aplicaciones gráficas (sería www-data) y listo ^^

Para más info :
http://en.wikipedia.org/wiki/X_Window_authorization#Cookie-based_access
http://www.xs4all.nl/~zweije/xauth-6.html

Saludos.


Título: Re: Ejecutar desde PHP una aplicación GUI
Publicado por: SnakeDrak en 24 Octubre 2010, 23:05 pm
Hola,

Muchas gracias como siempre Alex :3.

Aquí explico la solución, yo había leído sobre xhost y claro como bien dijiste después de xhost queda xauth. Copié el fichero .Xauthority al directorio home de www-data (/var/www), le cambie el usuario y grupo por www-data, accedí desde consola y funciona sin problemas.

Pero desde PHP con la función exec no se ejecutaba, entonces como bien pone en la documentación que me pasaste, le dije donde se encontraba el fichero .Xauthority porque desde PHP no lo tomaba.. con lo cual quedó:

Código
  1. exec("export XAUTHORITY=/var/www/.Xauthority; programa :0.0");

Como se observa tuve que poner:
Código
  1. export XAUTHORITY=/var/www/.Xauthority

Muchas gracias de nuevo por tu ayuda y saludos!