Servidor X local
Se o seu servidor X for local (isto é, conexão de soquete Unix ao invés de TCP), você poderá ser mais refinado e permitir somente esse usuário local específico:
xhost +SI:localuser:root
X sobre SSH
Se não, você pode considerar permitir que o SSH direto faça root (usando a autenticação de chave pública), com o X encaminhado através desta conexão segura, e usando isto como um substituto para sua invocação do sudo:
ssh -X -f root@localhost java -jar servermanager.jar
.Xauthority e sudo
Assumindo que root possa ler seu arquivo .Xauthority
(provavelmente, a menos que seu diretório home esteja no NFS), você pode achar que simplesmente colocar XAUTHORITY=$HOME/.Xauthority
¹ no ambiente do comando executado dentro do sudo permitirá a conexão:
XAUTHORITY="${XAUTHORITY-$HOME/.Xauthority}" \
sudo -E java -jar servermanager.jar
Se o sudo estiver configurado para não permitir a passagem de XAUTHORITY
, você poderá exportar explicitamente o token:
.Xauthority e xauth
xauth extract - $DISPLAY | sudo bash -c \
"xauth merge - && java -jar servermanager.jar"
¹ $HOME
aqui é o diretório inicial do usuário, não o do root.