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.