在 Ubuntu 17.10 中的 systemd 中初始化 java.awt.Robot

在 Ubuntu 17.10 中的 systemd 中初始化 java.awt.Robot

我有一项服务,可以在以 root 身份运行时使用 API 捕获特定用户的屏幕java.awt.Robot(因为除了捕获用户屏幕之外,它还可以执行其他一些操作)。

要初始化的环境是使用环境变量(以及特定用户)java.awt.Robot在服务文件中设置的。/lib/systemd/system/screencap.service$XAUTHORITY$DISPLAY

[Unit]
Description=My Screen Capture Service (running as root)
After=syslog.target
After=network.target

[Service]
Environment="XAUTHORITY=/home/myuser/.Xauthority" "DISPLAY=:0"
WorkingDirectory=/usr/share/java/screencap
ExecStart=/usr/bin/java -jar /usr/share/java/screencap/screencap.jar
SuccessExitStatus=143
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=screencap
PrivateTmp=true
Restart=on-failure

[Install]
WantedBy=multi-user.target
WantedBy=graphical.target

它适用于除 Ubuntu 17.10 之外的所有发行版,因为它使用 wayland 而不是 x11。

当我java -jar /usr/share/java/screencap/screencap.jar从用户终端执行时,new Robot()能够在 Ubuntu 17.10 上找到 GUI 上下文并完美运行。

我不知道Environment="XAUTHORITY=/home/myuser/.Xauthority" "DISPLAY=:0"Ubuntu 17.10 的值应该是多少。不可能,XAUTHORITY=因为$XAUTHORITY在 Ubuntu 17.10 中未定义。在哪里可以找到与此对应的 Wayland?

我已经尝试过了 Environment="XDG_SESSION_TYPE=wayland" "DISPLAY=:0"Environment="WAYLAND_DISPLAY=wayland-0" "DISPLAY=:0" 但都没有用。

编辑:我无法强制我的用户切换回 X11/XORG。我希望我的服务在 Wayland 中运行。

相关内容