Inicializando java.awt.Robot dentro do systemd no Ubuntu 17.10

1

Eu tenho um serviço que pode capturar a tela de um usuário em particular usando java.awt.Robot APIs enquanto é executado como root (como acontece com várias outras coisas além de capturar a tela do usuário).

O ambiente para inicializar java.awt.Robot é definido no arquivo de serviço /lib/systemd/system/screencap.service usando as variáveis de ambiente - $XAUTHORITY e $DISPLAY do usuário específico.

[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

Funciona para todas as distros, exceto o Ubuntu 17.10, porque ele usa wayland ao invés de x11.

Quando executo java -jar /usr/share/java/screencap/screencap.jar do terminal do usuário, new Robot() é capaz de encontrar o contexto da GUI no Ubuntu 17.10 e funciona perfeitamente.

Eu não sei qual deve ser o valor de Environment="XAUTHORITY=/home/myuser/.Xauthority" "DISPLAY=:0" para o Ubuntu 17.10. Não pode ser XAUTHORITY= porque $XAUTHORITY é indefinido no Ubuntu 17.10. Onde posso encontrar o equivalente a este caminho?

Eu já tentei Environment="XDG_SESSION_TYPE=wayland" "DISPLAY=:0" e %código% mas nenhum deles funciona.

EDIT: Eu não posso impor meus usuários para voltar ao X11 / XORG. Quero que meu serviço funcione no caminho.

    
por PC. 05.02.2018 / 10:43

0 respostas