Это мой случай. У меня есть .war, который я запускаю с помощью java, и он работает только внутри своей папки:
компакт-диск /opt/myappdir/
Java -jar myapp.war
Примечание. Это не работает так:
Java -jar /opt/myappdir/myapp.war
Я создал bash-скрипт (sudo /opt/myappdir/run.sh
), чтобы запустить эту команду
#!/usr/bin/env bash
компакт-диск /opt/myappdir/
Java -jar myapp.war
Пока все работает. Теперь проблема:
Я хочу запустить его с ярлыка на рабочем столе. Это мой ярлык на рабочем столе для запуска myapp war
[Вход на рабочий стол]
Кодировка=UTF-8
Версия=1.0
Имя=Мое Приложение
Комментарий=Запустить MyApp
Тип = Приложение
Exec=/opt/myappdir/run.sh
Icon=/opt/myappdir/myapp.ico
Путь=/opt/myappdir/
Терминал=ложь
Но с тех пор myapp.war
необходимо запустить с помощью sudo и внутри myappdir
я изменил свой запустить.ш
скрипт следующим образом
#!/usr/bin/env bash
компакт-диск /opt/myappdir/
dir=$(dirname $(readlink -m $BASH_SOURCE))
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY QT_X11_NO_MITSHM=1 java -jar myapp.war
Почему линия с dir=$(dirname $(readlink -m $BASH_SOURCE))
?
потому что мне нужно убедиться myapp.war
работает внутри myappdir
Почему линия с pkexec
?
потому что при двойном щелчке ярлыка на рабочем столе Ява
нужно запустить с судо
вне:
Ошибка: невозможно получить доступ к jarfile myapp.war
кто то Здесь предлагает решение аналогичного вопроса, но это не сработало для меня. (Изменение предложения:)
#!/usr/bin/env xdg-открыть
[Вход на рабочий стол]
Версия=1.0
Тип = Приложение
Терминал=ложь
Exec=java -jar 'myapp.war'
Путь=/opt/myappdir/
Имя = мое приложение
Комментарий=myapp
Icon=/opt/myappdir/myapp.ico
как я могу исправить мой запустить.ш
скрипт для запуска myapp.war
с судо
внутри myappdir
, и вызвать его с ярлыка на рабочем столе? Спасибо
Обновлять
Согласно тому, что кто-то объясняет ЗДЕСЬ, pkexec
не запускается в том же каталоге (я думаю, это причина, по которой он не может найти myapp.war
файл). Таким образом, решение может состоять в том, чтобы запустить команду, которая заставит ее войти в каталог для запуска java, но я попытался и потерпел неудачу.