我有这个脚本,它有效:
#!/bin/bash
xfconf-query -c xfce4-desktop \
-p /backdrop/screen0/monitor0/workspace0/last-image \
-s /home/user/Pictures/wallpaper.png
但 cronie 不想执行它( notify-send 效果很好)。
日志中有错误:
CMDOUT (Failed to init libxfconf: Using X11 for dbus-daemon autolaunch was disabled at compile time, set your DBUS_SESSION_BUS_ADDRESS instead.)
我尝试在 .bashrc 中使用export $(dbus-launch)
,但这并没有解决问题。
答案 0 :(得分:1)
我通过Arch上的cronie feh
来做这件事
我正在使用一个衬垫,它会从给定的文件夹中随机拍摄照片并使用DISPLAY:=0
将其显示到当前显示
#!/bin/bash
file=$(find ~/Pictures/.wallpaper/ -type f | shuf -n1) && DISPLAY=:0 feh --bg-scale $file
答案 1 :(得分:0)
使用cron和访问X显示/ cookie文件时存在一些问题。
有一个名为“$ machine_id- $ display_number”的文件,其中
该文件(我们将其称为“dbus文件”)存储在〜/ .dbus / session-bus中 并包含有关DBUS_SESSION_BUS_ADDRESS和DBUS_SESSION_BUS_PID(它是文本文件)的信息。
您需要从文件中导出这两个变量。
dbus_session_file=~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-0
if [ -e "$dbus_session_file" ]; then
. "$dbus_session_file"
export DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID
xconf-query ...
fi
注意:
我假设您没有以root身份登录(并且您的cron具有root权限)。
请注意,不能保证用户仍然登录。如果他已注销,则dbus守护程序将不可用。
我想解释一下后台会发生什么。但是有更简单的方法可以在桌面会话中找到进程的PID,并从其环境中获取dbus地址
export $(< / proc / $ pid / environ tr \ 0 \ n | grep -E'^ DBUS_SESSION_BUS_ADDRESS =')