我有这个脚本并且它有效:
#!/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
注意事项:
我假设您没有以 root 身份登录(并且您的 cron 处于 root 权限之下)。
请注意,不能保证用户仍处于登录状态。如果他已注销,dbus 守护进程将不可用。
我想解释一下后台发生的事情。但是有更简单的方法可以在桌面 session 中找到进程的 PID,并从其环境中获取 dbus 地址
导出 $(
关于linux - 如何使用 cron 设置壁纸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43556589/