web-dev-qa-db-ja.com

xfconf-query、crontab、「libxfconfの初期化に失敗しました:X11の$ DISPLAYなしでdbus-daemonを自動起動できません。」

Xubuntu 16.04があり、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

ターミナルから実行すると完全に機能します。ただし、crontabからこのエラーが発生します。

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

これが私のcrontabエントリです。 crontab -eを使用して編集されました。

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

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

ここのコメントこれ を含むさまざまなソリューションを試しましたが、どれも機能しませんでした。

1
jbrock

私は次のことをしました、それは私をxfconf-query from crontab

まず、この変数の値を取得します。

echo $DBUS_SESSION_BUS_ADDRESS

次のようなパスが表示されます。

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

次に使用します:

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

私はその背後にある詳細なメカニズムを理解していませんが、私にとってはうまくいきます:)

1
Yan King Yin

代わりに、このスクリプトをSession and Startup> Application Autostartアイテムとして実行するように設定します。

#!/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