xfconf-query,crontab,“无法初始化 libxfconf:无法在没有 X11 的 $DISPLAY 的情况下自动启动 dbus 守护进程。”

xfconf-query,crontab,“无法初始化 libxfconf:无法在没有 X11 的 $DISPLAY 的情况下自动启动 dbus 守护进程。”

我有 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

xfconf-query我做了以下操作,它允许我从中调用crontab

首先,获取这个变量的值:

echo $DBUS_SESSION_BUS_ADDRESS

你会看到这样的路径:

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

然后在执行的脚本中使用crontab

export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus
xfconf-query ...

信用:https://bbs.archlinux.org/viewtopic.php?pid=1706208#p1706208

答案2

我只需将此脚本设置为作为会话和启动>应用程序自动启动项运行。

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

答案3

为了使xfconf-query命令在环境下工作,cron您需要在 bash 脚本中包含以下内容,例如:

# set today's wallpaper; first set one env variable for xfconf-query
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorVGA-0/workspace0/last-image -s "${filename}"

信用:https://bbs.archlinux.org/viewtopic.php?pid=1706208#p1706208

相关内容