linux 如何使用cron设置壁纸

bogh5gae  于 2023-02-15  发布在  Linux
关注(0)|答案(3)|浏览(169)

我有这样的脚本,它的工作:

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

2admgd59

2admgd591#

使用cron和访问X display/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权限)。
1.请注意,不能保证用户仍处于登录状态。如果用户注销,dbus守护程序将不可用。
1.我想解释一下后台发生了什么,但是有更简单的方法可以在桌面会话中找到进程的PID,并从其环境中获得dbus地址
导出$(〈/proc/$pid/环境文件\0\n|grep-E '^数据库总线会话总线地址=')

vojdkbi0

vojdkbi02#

我也通过Arch上的Cronie使用feh
我使用的是一个单行程序,它从给定文件夹中随机获取一张图片,并使用DISPLAY:=0将其寻址到当前显示器
#!/bin/bash file=$(find ~/Pictures/.wallpaper/ -type f | shuf -n1) && DISPLAY=:0 feh --bg-scale $file

4dc9hkyq

4dc9hkyq3#

在bash脚本中执行以下操作(以便在crontab中成功):

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

来自www.example.comhttps://bbs.archlinux.org/viewtopic.php?pid=1706208#p1706208

相关问题