[awesome + dbus] variables de session dbus (résolu)

Xorg, Compiz, KDE / Gnome / Xfce / Fluxbox / e17 / fvwm ... GDM/KDM/XDM...
Avatar de l’utilisateur
vlamy
yeomen
Messages : 268
Inscription : ven. 20 juil. 2012, 15:19
Localisation : Grenoble

[awesome + dbus] variables de session dbus (résolu)

Message par vlamy »

Bonjour, j'ai un ptit problème de configuration dbus pour utiliser le client dbus du WM Awesome.

Le contexte :
  • Je veux écrire un widget Awesome, qui donne le nombre de mises à jours remonté par yaourt.

    Code : Tout sélectionner

    require("awful.remote")
    
    yaourt_info = widget({ type = "textbox" , name = "yaourtw" })
    yaourt_info.text = "-2"
    
    function yaourt_update(text)
       yaourt_info.text = text
    end
    
  • J'utilise un script joué depuis ma crontab pour passer les infos pertinentes à Awesome, le tout via dbus, c'est à dire en utilisant l'outil "awesome-client".

    Code : Tout sélectionner

    #!/bin/bash
    ###############################
    # Bash script that feeds Awesome pacman widget
    # This script is intended to be launched by cron
    ######################################################
    export TERM="xterm" ;
    
    #export DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-YFLko6muIW,guid=f107814faceb7b070592adee5084fd7c"
    #export DBUS_SESSION_BUS_PID="4500"
    #export DBUS_SESSION_BUS_WINDOWID="41943041"
    
    
    # Function that updates text of pacman Awesome widget
    update_w(){
        echo "yaourt_update(\"$1\")" | awesome-client
    }
    
    # testing connection
    if ! [ "`ping -c 1 google.com`" ]; then
        # no connection available, send red -1
        update_w "<span color=\\\"red\\\">-1</span>"
    else
        # updating pacman
        sudo pacman -Sy > /dev/null 2>&1
        
        # getting number of updates via yaourt
        #count=`yaourt -Qu | wc -l`
        export count=0
        # formating text in function of number of updates
        if [ $count -le 3 ]; then
    	update_w "<span color=\\\"white\\\">$count</span>"
        elif [ $count -gt 3 -a $count -le 6 ]; then
    	update_w "<span color=\\\"yellow\\\">$count</span>"
        elif [ $count -gt 6 -a $count -le 10 ]; then
    	update_w "<span color=\\\"orange\\\">$count</span>"
        else
    	update_w "<span color=\\\"red\\\">$count</span>"
        fi
    fi
    
Le problème :
Mon problème vient de cette erreur, qui est générée quand le script se lance avec cron :

Code : Tout sélectionner

Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.naquadah.awesome.awful was not provided by any .service files
NB : Quand je lance le script depuis ma session utilisateur (sous Awesome), tout s'exécute à merveille.

Là ou ça se complique : Ce problème est connu,il est dû à une variable dbus manquante (DBUS_SESSION_BUS_ADDRESS). Le workaround donné ici, consiste à prendre les valeurs présentes dans le dernier fichier du répertoire "/home/user/.dbus/session/". Pour info, j'ai repris les valeurs de ce fichier et je les ai directement inséré dans mon script (cf. export en commentaire).

Et donc, le workaround ne fonctionne pas :( et pire, si je décommente les exports de variable dans le script, cela ne fonctionne même plus depuis ma session en cours.
Dernier point peut être important : je viens de passer en systemd récemment.
J'en viens à penser que cela est dû à la configuration des sessions dbus, que je ne maîtrise pas.
Et c'est là que je me tourne vers vous... :D

Avec une question principalement : Pourquoi mes variables dbus ne fonctionnent pas depuis cron?


Merci d'avance, déjà pour avoir lu jusqu'ici,
V.
Dernière modification par vlamy le lun. 22 oct. 2012, 13:20, modifié 1 fois.
Avatar de l’utilisateur
vlamy
yeomen
Messages : 268
Inscription : ven. 20 juil. 2012, 15:19
Localisation : Grenoble

Re: [awesome + dbus] variables de session dbus manquantes

Message par vlamy »

J'ai trouvé une solution, je récupère les variables d'environnement du processus "awesome".

Code : Tout sélectionner

 if [[ -z "$DBUS_SESSION_BUS_ADDRESS" ]]; then # Looks like we are outside X
     eval $(tr '\0' '\n' < /proc/$(pgrep awesome | head -1 )/environ | sed -e 's/^/export /') #export all environment variables
 fi
Ce que je ne comprend pas, c'est pourquoi elle différent de celles de mon utilisateur :-?
Répondre