Инициализация java.awt.Robot внутри systemd в Ubuntu 17.10

У меня есть служба, которая может захватывать экран конкретного пользователя, используя API-интерфейсы java.awt.Robot, при запуске от имени пользователя root (как и несколько других вещей, чем захват экрана пользователя).

Окружающая среда для инициализации 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() может найти контекст GUI на Ubuntu 17.10 и работает отлично.

Я не знаю, что должно быть значением Environment="XAUTHORITY=/home/myuser/.Xauthority" "DISPLAY=:0" для Ubuntu 17.10. Это не может быть XAUTHORITY=, потому что $XAUTHORITY не определено в Ubuntu 17.10. Он работает для всех дистрибутивов, кроме Ubuntu 17.10, потому что он использует wayland вместо x11.

Я уже пробовал Environment="XDG_SESSION_TYPE=wayland" "DISPLAY=:0" и Environment="WAYLAND_DISPLAY=wayland-0" "DISPLAY=:0", но ни один из них не работает.

EDIT: я не могу заставить своих пользователей переключиться на X11 / XORG. Я хочу, чтобы моя служба работала на пути.

1
задан 5 February 2018 в 15:11

0 ответов

Другие вопросы по тегам:

Похожие вопросы: