无法从systemd服务启动GUI程序

时间:2017-01-04 08:33:14

标签: spring spring-boot ubuntu-16.04 systemd

我有一个Spring启动应用程序,我通过Ubuntu中的systemd服务执行它,在使用sudo startkde启动X服务器之后,我无法使用gedit等命令行从应用程序启动GUI程序同时它使用sudo java -jar demo.jar启动应用程序时,我尝试将gedit命令放在shell脚本中,但问题仍然存在。

是否有任何解决方案可以使用该服务并启动GUI程序,或者使用其他可以解决问题的服务启动spring boot。

这是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);
    }
}

1 个答案:

答案 0 :(得分:0)

systemd不适合直接自动启动GUI应用。正如@jaysee所解释的那样,它与特别是GUI没有联系。

systemd 可以做的是启动窗口管理器,窗口管理器可以设置为自动登录特定用户,该用户可以使用窗口管理器"#34 ;自动启动"功能,以启动GUI应用程序。

我试图独自使用systemd走同一条道路,另一条路线就是我发现的工作。

这是Raspberry Pis的常见用例。因此,如果您搜索有关[Raspberry PI自动启动信息亭]的教程,您应该找到许多选项(无论您是否使用Raspberry Pi)。较新的Raspberry Pis使用较新的基于systemd的Debian版本,因此在实践中它与您想要使用的Ubuntu 16.04非常相似。