chore(display): support multiple screenshot tools

This commit is contained in:
2025-10-21 22:17:15 +02:00
parent c7547c22ee
commit 4771a56164
+13 -5
View File
@@ -4,6 +4,7 @@ import (
"bytes" "bytes"
"errors" "errors"
"fmt" "fmt"
"log/slog"
"net" "net"
"os" "os"
"os/exec" "os/exec"
@@ -73,12 +74,19 @@ func KeyboardInput(key int) error {
func TakeScreenshot() (string, error) { func TakeScreenshot() (string, error) {
tempFilePath := filepath.Join(os.TempDir(), fmt.Sprintf("screenshot_%d.png", time.Now().Unix())) tempFilePath := filepath.Join(os.TempDir(), fmt.Sprintf("screenshot_%d.png", time.Now().Unix()))
cmd := exec.Command("gnome-screenshot", "-f", tempFilePath) cmds := []*exec.Cmd{
commandOutput := RunShellCommand(cmd) exec.Command("gnome-screenshot", "-f", tempFilePath),
if commandOutput.ExitCode != 0 { exec.Command("xfce4-screenshooter", "-f", "-s", tempFilePath),
return "", errors.New(commandOutput.Stderr) exec.Command("spectacle", "--fullscreen", "--background", "--output", tempFilePath),
} }
return tempFilePath, nil for _, cmd := range cmds {
commandOutput := RunShellCommand(cmd)
if commandOutput.ExitCode == 0 {
return tempFilePath, nil
}
slog.Warn("Screenshot error", "error", commandOutput.Stderr)
}
return "", errors.New("no screenshot utility found or all failed")
} }
func RunShellCommand(cmd *exec.Cmd) CommandResponse { func RunShellCommand(cmd *exec.Cmd) CommandResponse {