Вопрос или проблема
Я пишу скрипт на 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.
Основные моменты для настройки
-
Работа с путями: Использование домашнего каталога (
~
) в файле Desktop Entry может вызвать проблемы. В данном случае рекомендуется использовать полный путь, например,/home/me/.minecraft/tlauncher.jar
. Как вы уже заметили, это не решило проблему, поэтому определение путей в полном виде остается на уровне лучших практик. -
Использование
pkexec
: Для запуска графических приложений с правами администратораpkexec
является хорошим выбором. Однако есть нюансы, связанные с тем, что вызовpkexec
из Desktop Entry может не срабатывать так, как ожидается. Для решения этой проблемы стоит использовать терминал как обертку для команды. -
Запуск через терминал: Если команда работает в терминале, но не запускается из рабочей области, следует использовать
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"
Это обеспечит корректное взаимодействие с пользователем, так как при запуске будет открыт терминал для ввода пароля.
-
Убедитесь, что у скриптов есть права на выполнение: Убедитесь, что ваш
.sh
файл или другой скрипт имеет права на выполнение. Это можно сделать, используя команду:chmod +x /path/to/your/script.sh
-
Мониторинг процесса: Если после запуска 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.