统信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 环境变量问题。