Открытие .jar файлов с помощью pkexec и использование файлов значков для выполнения команд

Вопрос или проблема

Я пишу скрипт на bash, который автоматизирует установку TLauncher (лаунчер Minecraft) и управление базовыми зависимостями на USB-накопителях с Lubuntu 18.04.

Часть скрипта на bash создает запись рабочего стола в /usr/share/applications для удобного запуска из меню Lubuntu.

Вот запись, которую я использую:

[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

Команда pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY /usr/bin/java -jar -Dswing.systemlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel ~/.minecraft/tlauncher.jar работает и запускает TLauncher, если выполнить её в терминале. Однако мне кажется, что я что-то упускаю, когда помещаю команду в запись рабочего стола.

Когда я пытаюсь открыть запись из меню Lubuntu, курсор показывает, что что-то загружается, но затем ничего не происходит, независимо от того, как долго я жду. Я также не уверен, как отладить запись рабочего стола. Я пытался использовать xdg-open для записи, но не получил никаких данных в терминале, и ничего не произошло – т.е. TLauncher не запустился.

Я пытался поместить команду в отдельный bash-файл, который выглядит так:

#!/bin/bash

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

Запуск этого в терминале bash testscript.sh работает и действительно запускает TLauncher.

Но когда я вставляю его в запись рабочего стола, заменяя exec из вышеуказанной записи следующим образом:

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

Это не работает.

Скрипты оболочки имеют правильные разрешения.

Мне кажется, что я либо неправильно пишу значение exec в записи рабочего стола, либо pkexec не должен работать из записи рабочего стола так, как я пытаюсь это сделать.

Я хотел бы иметь возможность запускать TLauncher из записи рабочего стола через меню и чтобы появлялся графический интерфейс для ввода пароля, чтобы команда выполнялась от root.

Редактировать:

Использование полных путей вместо ~ также дает тот же результат – т.е. это не работает, и вышеуказанные проблемы остаются.

Установка Terminal=true не решает эту проблему для меня.

Текущее решение: Поскольку команда работает при запуске в терминале, просто дайте записи рабочего стола запустить команду в терминале:

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"

Заметки:

Я думаю, что могу построить на этом, чтобы убедиться, что когда лаунчер закрывается, он действительно закрывается, так как я заметил через ps aux, что процессы не убиваются так, как я ожидаю, что вызывает странное поведение в следующий раз, когда я открываю лаунчер.

Ответ solidwaffle работает, но вы можете упростить это до:

Exec=pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY /path/to/application.

Это просто графически запросит sudo, без каких-либо оставшихся терминалов.

Ответ или решение

Чтобы успешно открыть .jar файл с использованием pkexec и создать рабочие столы (Desktop Entries) для запуска команд, необходимо учитывать несколько аспектов, связанных с взаимодействием системных утилит и графического интерфейса в Linux дистрибутивах, таких как Lubuntu 18.04. Ваша цель — автоматизировать процесс установки TLauncher, и правильная настройка рабочего стола поможет пользователям запускать его непосредственно из меню Lubuntu.

Основные моменты для настройки

  1. Работа с путями: Использование домашнего каталога (~) в файле Desktop Entry может вызвать проблемы. В данном случае рекомендуется использовать полный путь, например, /home/me/.minecraft/tlauncher.jar. Как вы уже заметили, это не решило проблему, поэтому определение путей в полном виде остается на уровне лучших практик.

  2. Использование pkexec: Для запуска графических приложений с правами администратора pkexec является хорошим выбором. Однако есть нюансы, связанные с тем, что вызов pkexec из Desktop Entry может не срабатывать так, как ожидается. Для решения этой проблемы стоит использовать терминал как обертку для команды.

  3. Запуск через терминал: Если команда работает в терминале, но не запускается из рабочей области, следует использовать lxterminal или другой терминал. Это позволяет отображать графическое окно для ввода пароля. Например:

    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"

    Это обеспечит корректное взаимодействие с пользователем, так как при запуске будет открыт терминал для ввода пароля.

  4. Убедитесь, что у скриптов есть права на выполнение: Убедитесь, что ваш .sh файл или другой скрипт имеет права на выполнение. Это можно сделать, используя команду:

    chmod +x /path/to/your/script.sh
  5. Мониторинг процесса: Если после запуска TLauncher процессы продолжают работать в фоновом режиме, возможно, стоит рассмотреть возможность добавления автоматического завершения фоновых процессов после закрытия приложения. Это можно узнать с помощью команды ps aux для диагностики оставшихся процессов и создания соответствующих скриптов.

Создание Desktop Entry

Полный файл Desktop Entry должен выглядеть следующим образом:

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=Minecraft
GenericName=minecraft
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"
Icon=/home/me/.minecraft/icons/default.png
Type=Application
Terminal=false
StartupNotify=false
Categories=Game;

Эти настройки обеспечивают корректную работу приложения через графический интерфейс.

Заключение

Правильное использование pkexec в сочетании с Desktop Entry позволяет запускать приложения с повышенными привилегиями, сохраняя при этом удобство для пользователей. Интеграция терминала для отображения запроса пароля является оптимальным решением, которое делает процесс запуска TLauncher более гладким и интуитивно понятным. Надеюсь, что данная информация окажется полезной и поможет в дальнейшем улучшении вашего скрипта и интеграции TLauncher в Lubuntu.

Оцените материал
Добавить комментарий

Капча загружается...