Abrindo arquivos .jar com `pkexec` e usando Desktop Entries para executar comandos

Oct 19 2019

Estou escrevendo um script bash que automatiza a instalação do TLauncher (Minecraft launcher) e o gerenciamento básico de dependências em USBs executando o Lubuntu 18.04.

Parte do script bash cria uma entrada na área de trabalho /usr/share/applicationspara uma inicialização fácil a partir do menu Lubuntu.

Aqui está a entrada que estou usando:

[Desktop Entry]
Encoding=UTF-8
Exec=pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY /usr/bin/java -jar -Dswing.systemlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel ~/.minecraft/tlauncher.jar
Icon=~/.minecraft/icons/default.png
Type=Application
Terminal=false
Name=Minecraft
GenericName=minecraft
StartupNotify=false
Categories=Game

O comando funciona e inicia o TLauncher se executado no terminal. No entanto, sinto que estou perdendo algo quando coloco o comando na entrada da área de trabalho.pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY /usr/bin/java -jar -Dswing.systemlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel ~/.minecraft/tlauncher.jar

Quando tento abrir a entrada do menu Lubuntu, o cursor mostra que algo está carregando, mas nada acontece, não importa quanto tempo eu espere. Também não tenho certeza de como depurar a entrada da área de trabalho. Tentei xdg-opena entrada, mas não obtive saída no terminal e também não aconteceu nada - ou seja, o TLauncher não foi iniciado.

Tentei colocar o comando em um arquivo bash separado que se parece com:

#!/bin/bash

pkexec env DISPLAY=:0 XAUTHORITY=/home/me/.Xauthority /usr/bin/java -jar -Dswing.systemlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel ~/.minecraft/tlauncher.jar

Executar isso no terminal bash testscript.shfunciona e inicia o TLauncher.

Mas quando eu o coloco na entrada da área de trabalho, substituindo o execda entrada acima:

Exec=/bin/bash /path/to/testscript.sh

Não funciona.

Os scripts de shell têm as permissões adequadas.

Eu sinto que estou escrevendo o execvalor da Desktop Entry errado ou que pkexecnão deveria funcionar a partir de uma Desktop Entry da maneira que estou tentando fazer.

Eu gostaria de poder iniciar o TLauncher de uma entrada da área de trabalho através do menu e ter um pop-up da gui pedindo a senha para que o comando seja executado como root.

Editar:

Usar caminhos completos em vez de ~também produz o mesmo resultado - isto é, não funciona e os problemas acima permanecem.

A configuração Terminal=truenão resolve isso para mim.

Respostas

2 solidwaffle Oct 19 2019 at 07:35

Solução atual: como o comando funciona quando executado no terminal, basta fazer com que o Desktop Entry execute o comando com um terminal:

Exec=lxterminal -e "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY /usr/bin/java -jar -Dswing.systemlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel /home/me/.minecraft/tlauncher.jar"

Notas:

Acho que poderia construir a partir disso para ter certeza de que quando o iniciador é fechado, ele está realmente fechado, pois percebi ps auxque os processos não estão realmente sendo encerrados da maneira que eu esperava, causando um comportamento estranho na próxima vez que abrir o iniciador.