gpt4 book ai didi

linux - 尝试在 systemd 下运行访问 X 服务器的服务

转载 作者:数据小太阳 更新时间:2023-10-29 03:41:01 24 4
gpt4 key购买 nike

我正在使用带有 systemd 的 manjaro linux(基于 arch)。我想制作一个在后台运行的守护进程服务,并以随机间隔截取我的屏幕截图,最多间隔 10 分钟。

我正在使用 Go,我有一个程序,如果我构建它并从命令行运行它,它就可以正常工作(见下文)。我为该服务制作了一个 .service 文件(见下文),并使用 systemctl start screenshot 启动它,并使用 systemctl is-active screenshot 确认它正在运行。但是,它不起作用。没有屏幕截图被保存,就像我从命令行运行它一样。

出于兴趣,我尝试使用 nohup ./screenshot & 运行它,但它遇到了与我的守护程序尝试相同的问题。

在后台使用日期包有什么问题吗?或者它可能是屏幕截图库?

截图.go

package main

import (
"fmt"
"image/png"
"math/rand"
"os"
"time"

"github.com/coreos/go-systemd/daemon"
"github.com/vova616/screenshot"
)

func main() {
daemon.SdNotify(false, "READY=1")
i := 0
for {
r := rand.Intn(10)
time.Sleep(time.Duration(r) * time.Minute)
t := time.Now()
year, month, day := t.Date()
date := fmt.Sprintf("%d-%s-%d", year, month.String(), day)
img, err := screenshot.CaptureScreen()
if err != nil {
fmt.Println(err)
continue
}
hour, min, sec := t.Clock()
stamp := fmt.Sprintf("%d:%d:%d", hour, min, sec)
fmt.Printf("Taking screenshot %s\n", stamp)
f, err := os.Create(fmt.Sprintf("/home/dave/screenshot/%s/%s.png", date, stamp))
if err != nil {
fmt.Println(err)
continue
}
err = png.Encode(f, img)
if err != nil {
fmt.Println(err)
continue
}
err = f.Close()
if err != nil {
fmt.Println(err)
continue
}
i++
daemon.SdNotify(false, "WATCHDOG=1")
}
}

这是服务文件

[Unit]
Description=Random Screenshot Service

[Service]
Type=notify
ExecStart=/home/dave/screenshot/screenshot
WatchdogSec=30s
Restart=on-failure

[Install]
WantedBy=multi-user.target

最佳答案

根据 Flimzy 对我的问题的评论,我明白了。正如他所说,你不能从 systemd 运行依赖于 X 的东西,所以我从我的 .i3/config 文件自动运行它(我使用 I3 窗口管理器)。再次感谢 Flimzy 帮助我。

关于linux - 尝试在 systemd 下运行访问 X 服务器的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48863670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com