Usar dbus desde un script como otro usuario

monon
#1 por monon el 26/10/2014
Hasta ahora usaba un script (homemade) para poder lanzar automaticamente jack al encender la interface firewire.
No es mas que un script llamado por una regla de udev, (osea que es root el que lo ejecuta ) y basicamente hace:

export DISPLAY=:0.0
sudo -u $MIUSUARIO jack_control start

jack_control no es mas que una interface del servicio dbus de jack
Bien podria usar:

qdbus org.jackaudio.service /org/jackaudio/Controller org.jackaudio.JackControl.StartServer

Y me ha funcionado bien siempre, tanto en Debian Wheezy como en Ubuntu 12.04, pero no se por que razon cuando lo he intentado implementar en Debian Jessi y tambien en Ubuntu 14.04 simplemente me devuelve este mensaje:

Could not connect to D-Bus server: org.freedesktop.DBus.Error.NoServer: Failed to connect to socket /tmp/dbus-zEXZYei7zC: Conexión rehusada

¿Alguien tiene alguna idea al respecto?
Subir
OFERTASVer todas
  • -8%
    Behringer X Air XR18
    645 €
    Ver oferta
  • beyerdynamic DT-770 Pro
    138 €
    Ver oferta
  • -21%
    Zoom H4n Pro Black
    158 €
    Ver oferta
monon
#2 por monon el 27/10/2014
Aunque aun no he descubierto la razon por la cual ha cambiado el comportamiento del (nuevo) sistema, he encontrado una solucion.

Se busca el PID de un proceso que el usuario este ejecutando. En este caso lo mejor es buscar la sesion grafica abierta

SESSIONPID=$(ps -u ${USUARIO} -o pid,comm | grep -e 'xfce4-session$\|gnome-session$' | cut -d" " -f2)

y exportamos todas sus variables de entorno para que root las pueda usar ($DBUS_SESSION_BUS_ADDRESS y $DISPLAY) con el siguiente comando:

eval $(tr '\0' '\n' < "/proc/${SESSIONPID}/environ" | sed -e 's/^/export /')

A partir de ese momento tan solo hace falta usar la llamada a jack_control tal y como estaba en el anterior script usando su :

su $USUARIO -c "jack_control start"
Subir
vagar
#3 por vagar el 27/10/2014
Sí, dbus es un demonio que se lanza al iniciar la sesión y es un poco lioso hablar con él desde otro sitio que no sea esa sesión. Aquí se explica un poco el asunto y da un método alternativo para inicializar la variable de entorno:

http://unix.stackexchange.com/questions/28463/run-a-dbus-program-in-crontab-how-to-know-about-the-session-id

Otra opción es meter en algún script de inicio tipo ~/.Xclients o similar un programa que periódicamente monitorice /proc/asound/cards.
Subir
monon
#4 por monon el 31/10/2014
Gracias Luis.
Pude cumplir bien con lo indicado en el segundo post.

Pero me queda la duda de "ese cambio de comportamiento".

Salud
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo