如何使用cron设置壁纸

时间:2017-04-22 07:36:32

标签: linux cron archlinux xfce

我有这个脚本,它有效:

#!/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),但这并没有解决问题。

2 个答案:

答案 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”的文件,其中

  • $ machine_id是存储在/ var / lib / dbus / machine-id
  • 中的随机数
  • $ display_number是X显示数字,表示$ DISPLAY($ display_number或:$ display_number。$ screen_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

注意:

  1. 我假设您没有以root身份登录(并且您的cron具有root权限)。

  2. 请注意,不能保证用户仍然登录。如果他已注销,则dbus守护程序将不可用。

  3. 我想解释一下后台会发生什么。但是有更简单的方法可以在桌面会话中找到进程的PID,并从其环境中获取dbus地址

    export $(< / proc / $ pid / environ tr \ 0 \ n | grep -E'^ DBUS_SESSION_BUS_ADDRESS =')