crontab脚本执行时缺少X11$DISPLAY,手动执行不报错

统信UOS linux系统

因最近想要实现通过定时执行脚本,修改熄屏时间的功能(原本需在图形界面系统设置中手动修改)遇到以下疑问:

查到可通过命令gsettings set com.deepin.dde.power line-power-lock-delay 0来执行修改,可针对当前用户成功设置。

于是将其写为脚本,该脚本在图形界面登录A用户,终端命令行中sh执行时,可以生效

在init3的tty2命令行界面登录B用户,也可以针对B用户手动执行成功。

但当写作定时任务时 令该脚本以A用户在每日某时刻执行,却报错:无法在没有X11 $DISPLAY的情况下自动启动 D-bus.

以为是环境变量问题,在/etc/profile 在A的~/.bashrc中各种查找也未找到相关的变量引入。

请问需要加载哪些环境变量才可以在定时任务里正常执行? 谢谢!

或者请问如何实现我的需求呢?(比如如何设置一个定时任务,让它在已经登录A的图形界面弹出执行该脚本,那么应该≈在A的图形界面手动执行吧) 万分感谢


#!/bin/bash
# 将当前用户的锁定延迟设置为 0

# 获取用户名
user=$(whoami)

# 获取用户的 文件路径
xauth_file=$(find /tmp -name ".Xauthority-${user}-*" | head -n 1)

#使用gsettings将锁定延迟设置为0
DISPLAY=:0 XAUTHORITY=${xauth_file} gsettings set com.deepin.dde.power line-power-lock-delay 0

然后,你可以在crontab中使用如下命令来设置定时任务:

0 0 * * * /path/to/your/script.sh


这将在每天的0点0分执行该脚本。记录crontab时,要以当前用户身份运行crontab,以确保以当前用户身份执行脚本。

定时任务运行的环境缺失了X11的环境变量$DISPLAY。

如果要在定时任务里正常执行,将执行脚本的代码放入如下形式的脚本中:

#!/bin/bash
export DISPLAY=:0
gsettings set com.deepin.dde.power line-power-lock-delay 0

确保该脚本有可执行权限,通过chmod +x script.sh 命令授予可执行权限

在定时任务中通过crontab执行脚本,以修改息屏时间,并且在执行脚本时缺少 X11 $DISPLAY 环境变量。

解决方案1:在执行脚本时加载 X11 环境变量。
在crontab脚本的开头添加如下代码:

export DISPLAY=:0

这将显式地将 X11 $DISPLAY 环境变量设置为 :0,它是本地图形界面的默认值。

解决方案2:在图形界面上手动执行脚本。
这可以通过在脚本中添加启动图形应用程序的代码,例如:

#!/bin/bash
gnome-terminal -x bash -c "gsettings set com.deepin.dde.power line-power-lock-delay 0;exec bash"

这将打开一个新的终端窗口,并在其中运行 gsettings 命令,从而避免 X11 $DISPLAY 环境变量问题。