我有一项服务,可以在以 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 中运行。