web-dev-qa-db-fra.com

xfconf-query, crontab, "Échec du lancement de libxfconf: impossible de lancer automatiquement un dbus-daemon sans $ DISPLAY pour X11."

J'ai Xubuntu 16.04 et j'essaie d'exécuter le script suivant à partir de crontab:

#!/bin/bash

status=$(xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-ac)
vid="/dev/video0"

if [ -z "$status" ]; then
    exit 1
fi

if [ -e "$vid" -a "$status" -gt 14 ]; then
    xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-ac -s 14
Elif [ ! -e "$vid" -a "$status" -eq 14 ]; then 
    xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-ac -s 25
fi

Il fonctionne parfaitement lorsqu'il est exécuté à partir du terminal. Cependant, de crontab j'obtiens cette erreur.

Failed to init libxfconf: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11.

Voici mon entrée crontab. Il a été modifié à l'aide de crontab -e.

*/5 * * * * (bash -x /home/brock/bin/vid-power) > /home/brock/Desktop/debug.log 2>&1

Voici la sortie complète de mon debug.log.

~/Desktop$ cat debug.log 
++ xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-ac
Failed to init libxfconf: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11.
+ status=
+ vid=/dev/video0
+ '[' -z '' ']'
+ exit 1

J'ai essayé différentes solutions, y compris le commentaire ici et celui-ci , mais aucune n'a fonctionné.

1
jbrock

J'ai fait ce qui suit, cela me permet d'invoquer xfconf-query de crontab:

Tout d'abord, obtenez la valeur de cette variable:

echo $DBUS_SESSION_BUS_ADDRESS

Vous verrez un chemin comme celui-ci:

unix:path=/run/user/1000/bus

Utilisez ensuite:

env DBUS_SESSION_BUS_ADDRESS=[path] xfconf-query ....

Je ne comprends pas le mécanisme détaillé derrière cela, mais cela fonctionne pour moi :)

1
Yan King Yin

Je vais simplement définir ce script pour qu'il s'exécute en tant qu'élément Session et démarrage> Démarrage automatique de l'application à la place.

#!/bin/bash   

vid="/dev/video0"

while true; do
    status=$(xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-ac)
    if [ -e "$vid" -a "$status" -gt 14 ]; then
        xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-ac -s 14
    Elif [ ! -e "$vid" -a "$status" -eq 14 ]; then 
        xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-ac -s 25
    fi
    sleep 5m
done
1
jbrock