linux - 如何使用 cron 设置壁纸

标签 linux cron archlinux xfce

我有这个脚本并且它有效:

#!/bin/bash
xfconf-query -c xfce4-desktop \
-p /backdrop/screen0/monitor0/workspace0/last-image \
-s /home/user/Pictures/wallpaper.png

但是亲信不想执行(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),但这并没有解决问题。

最佳答案

使用 cron 和访问 X 显示/cookie 文件存在一些问题。

有一个名为“$machine_id-$display_number”的文件,其中

  • $machine_id 是存储在/var/lib/dbus/machine-id 中的随机数
  • $display_number 是 X Display 编号,表示 $DISPLAY(即 :$display_number 或 :$display_number.$screen_number)。

这个文件(我们称它为“dbus 文件”)存储在 ~/.dbus/session-bus 并包含有关 DBUS_SESSION_BUS_ADDRESS 和 DBUS_SESSION_BUS_PID 的信息(这是一个文本文件)。

您需要从文件中导出这 2 个变量。

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. 我想解释一下后台发生的事情。但是有更简单的方法可以在桌面 session 中找到进程的 PID,并从其环境中获取 dbus 地址

    导出 $(