2017-01-04 2 views
0

У меня есть приложение для загрузки 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); 
    } 
} 
+0

Приходит ли ваше приложение Spring, когда вы вызываете его из systemd? Если вы делаете это из командной строки, вы используете «java -jar demo.jar». Почему бы вам не использовать его при использовании systemd? – jaysee

+0

Да, приложение spring запускается нормально в обоих случаях, я предпочитаю использовать systemd, потому что «java -jar demo.jar» останавливается, когда я закрываю терминал, а «nohup java -jar demo.jar» очень долгое время голодает после нескольких дней с момента запуска Это. – geogeek

+1

Когда вы запускаете программы из systemd, они выполняются, когда пользователь входит в систему. Но они не привязаны к определенному терминалу или оболочке. Представьте, что вы можете войти в систему через графический интерфейс или через ssh. Поэтому «gedit» не «знает», какой терминал использовать, и поэтому он не может работать. Это только мое предположение. Вы пытались запустить программу GUI непосредственно из systemd (т. Е. Gedit)? Просто чтобы убедиться, что это работает. – jaysee

ответ

0

systemd не очень подходит для авто-запуска GUI приложений напрямую. Как пояснил @jaysee, это не связано с особенно GUI.

Что Systemd может сделать, это запустить менеджер окон, оконный менеджер может быть установлен автоматически войти конкретный пользователь, и пользователь может использовать «автозапуск» особенность оконного менеджера, чтобы запустить приложение с графическим интерфейсом.

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

Это обычный прецедент для малины. Поэтому, если вы ищете учебники по [автосигнализации малины PI], вы должны найти ряд опций (используете ли вы малину Pi или нет). Новая Raspberry Pis использует более новую версию Debian на базе systemd, поэтому на практике она очень похожа на то, что вы хотите делать с Ubuntu 16.04.

Смежные вопросы