如何使用cron的

问题描述:

我有这样的脚本,它的工作原理设置壁纸。如何使用cron的

没有在日志中的错误:

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 /机器ID
  • $ display_number随后被X显示一个随机数数字,这意味着$ DISPLAY(即:$ display_number或:$ display_number。$ screen_number)。

此文件(让我们指其为“DBUS文件”),存储在〜/ .dbus /会话总线 ,并包含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. 我假设你没有登录为根(和你的cron是下root权限)。

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

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

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

+0

我的'/ var/lib/dbus'目录是空的,我运行这个命令:'dbus -uuidgen>/var/lib/dbus/machine-id'但是我没有'〜/ .dbus'我的家庭目录。这是个问题吗? – DopustimVladimir

+0

我只是寻找一个快速的解决方案,而不会潜入d-bus))) – DopustimVladimir

+0

您可以将这个'echo $ DBUS_SESSION_BUS_ADDRESS>〜/ a.txt'添加到cron中吗?并告诉我在那里写什么? –

feh做通过cronie上拱以及

我使用的是一个衬里,这需要从给定文件夹的随机图像和后DISPLAY:=0地址它当前显示

#!/bin/bash file=$(find ~/Pictures/.wallpaper/ -type f | shuf -n1) && DISPLAY=:0 feh --bg-scale $file

+0

Feh无法正常工作。我不知道为什么。无声。通过终端也 – DopustimVladimir

+0

命令'feh --bg-scale path/to/example/pic.jpg'不起作用? – Revo86er

+0

是的。没有错误。没有变化 – DopustimVladimir