У меня есть приложение для загрузки Spring, я запускаю его через службу systemd в Ubuntu, после запуска X-сервера с sudo startkde
, я не могу запускать программы GUI из приложения с помощью командной строки, например gedit
. тем временем он работает, когда я запускаю приложение, используя sudo java -jar demo.jar
, я попытался поставить gedit
commande внутри сценария оболочки, но проблема не устранена.Не удается запустить GUI-программы из службы systemd
Есть ли какие-либо решения для использования сервиса и запуска программ GUI или запускать весеннюю загрузку с помощью других услуг, которые могли бы решить проблему.
вот Systemd служба:
[Unit]
Description=demo
After=syslog.target
[Service]
User=ubuntu
ExecStart=/home/ubuntu/demo.jar --logging.file=logfile.log
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
вот код весной загрузки:
@RestController
@EnableAutoConfiguration
@SpringBootApplication
public class DemoApplication {
@RequestMapping("/")
String home() {
ProcessBuilder builder = new ProcessBuilder("gedit");
builder.redirectErrorStream(true);
try {
final Process process = builder.start();
try {
process.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Приходит ли ваше приложение Spring, когда вы вызываете его из systemd? Если вы делаете это из командной строки, вы используете «java -jar demo.jar». Почему бы вам не использовать его при использовании systemd? – jaysee
Да, приложение spring запускается нормально в обоих случаях, я предпочитаю использовать systemd, потому что «java -jar demo.jar» останавливается, когда я закрываю терминал, а «nohup java -jar demo.jar» очень долгое время голодает после нескольких дней с момента запуска Это. – geogeek
Когда вы запускаете программы из systemd, они выполняются, когда пользователь входит в систему. Но они не привязаны к определенному терминалу или оболочке. Представьте, что вы можете войти в систему через графический интерфейс или через ssh. Поэтому «gedit» не «знает», какой терминал использовать, и поэтому он не может работать. Это только мое предположение. Вы пытались запустить программу GUI непосредственно из systemd (т. Е. Gedit)? Просто чтобы убедиться, что это работает. – jaysee