我希望每隔50分钟(3000秒)将我的屏幕设置为屏幕保护状态。
cat /home/rest.sh
while true;do
sleep 3000
xscreensaver-command --lock 1>/dev/null
done
sh /home/rest.sh &
可以让它运行
现在我想将它设置为守护进程。
sudo vim /etc/systemd/system/screensave.service
[Unit]
Description=screensave
[Service]
User=root
ExecStart=/bin/bash /home/rest.sh
StandardError=journal
[Install]
WantedBy=multi-user.target
设置它并启用为守护程序。
systemctl enable screensave.service
我发现该服务没有作为守护进程运行。
sudo journalctl -u screensave
Jan 24 12:16:50 user systemd[1]: Started screensave.
Jan 24 12:17:22 user bash[621]: xscreensaver-command: warning: $DISPLAY is not set: defaulting to ":0.0".
Jan 24 12:17:22 user bash[621]: No protocol specified
Jan 24 12:17:22 user bash[621]: xscreensaver-command: can't open display :0.0
如何在设置$ DISPLAY后将其作为守护进程运行?
答案 0 :(得分:0)
我没有运行linux而且现在无法检查但是守护进程的步骤是关闭stdin stdout stderr将当前工作目录更改为/并分叉两次和setsid以使当前进程成为新的会话负责人。
在开始时添加类似这样的东西,在运行之前,要检查的第一件事是exec命令用ps -Cbash -o sid,pgid,pid,ppid,comm,args
创建一个新的会话领导进程
# checking if current process is a session leader to avoid infinite call
if [[ $(ps -p $$ -osid=) != $$ ]]; then
( cd / ; exec setsid /bin/bash /home/rest.sh & ) </dev/null 1>&0 2>&0 &
exit
fi
答案 1 :(得分:0)
这是一个非常常见的常见问题解答。系统守护程序无法轻松连接到任何单个用户的X
会话。在多用户系统上,无论如何,您如何判断哪个用户的会话要连接?在单用户系统上,如果没有会话正在运行,守护进程应该做什么(因为它通常不是在守护进程启动时)?
尝试运行系统守护程序,因为任何特定用户都无法工作,并且允许单个用户访问系统守护程序是安全问题的处方。 可以完成,但解决方案很复杂,可能不是您想要自己尝试的。 (简单地说,让守护进程监听套接字上的命令;创建一个用户空间程序,它知道如何与套接字通信,并构建某种授权和身份验证,以便守护进程知道它正在与谁通话,并可以验证该用户允许连接到此显示器。)
简单明了的解决方案是从桌面环境的启动脚本中运行它。大多数桌面都有类似“会话启动项”或“登录时自动运行”的挂钩。
答案 2 :(得分:-1)
crontab -e
@reboot /bin/sh -c "while true;do sleep 3000;xscreensaver-command --lock 1>/dev/null;done"
问题已解决。