func (st *initState) startXpraServer() { if st.user == nil { st.log.Warning("Cannot start xpra server because no user is set") return } workdir := path.Join(st.user.HomeDir, ".Xoz", st.profile.Name) st.log.Info("xpra work dir is %s", workdir) xpra := xpra.NewServer(&st.profile.XServer, uint64(st.display), workdir) p, err := xpra.Process.StderrPipe() if err != nil { st.log.Warning("Error creating stderr pipe for xpra output: %v", err) os.Exit(1) } go st.readXpraOutput(p) xpra.Process.Env = []string{ "HOME=" + st.user.HomeDir, } xpra.Process.SysProcAttr = &syscall.SysProcAttr{} xpra.Process.SysProcAttr.Credential = &syscall.Credential{ Uid: uint32(st.uid), Gid: uint32(st.gid), } st.log.Info("Starting xpra server") if err := xpra.Process.Start(); err != nil { st.log.Warning("Failed to start xpra server: %v", err) st.xpraReady.Done() } st.xpra = xpra }
func (st *initState) startXpraServer() { if st.user == nil { st.log.Warning("Cannot start xpra server because no user is set") return } workdir := path.Join(st.user.HomeDir, ".Xoz", st.profile.Name) st.log.Info("xpra work dir is %s", workdir) spath := path.Join(st.config.PrefixPath, "bin", "oz-seccomp") xpra := xpra.NewServer(&st.profile.XServer, uint64(st.display), spath, workdir) //st.log.Debug("%s %s", strings.Join(xpra.Process.Env, " "), strings.Join(xpra.Process.Args, " ")) if xpra == nil { st.log.Error("Error creating xpra server command") os.Exit(1) } p, err := xpra.Process.StderrPipe() if err != nil { st.log.Error("Error creating stderr pipe for xpra output: %v", err) os.Exit(1) } go st.readXpraOutput(p) xpra.Process.Env = []string{ "HOME=" + st.user.HomeDir, } groups := append([]uint32{}, st.gid) if gid, gexists := st.gids["video"]; gexists { groups = append(groups, gid) } if st.profile.XServer.AudioMode != "" && st.profile.XServer.AudioMode != oz.PROFILE_AUDIO_NONE { if gid, gexists := st.gids["audio"]; gexists { groups = append(groups, gid) } } xpra.Process.SysProcAttr = &syscall.SysProcAttr{} xpra.Process.SysProcAttr.Credential = &syscall.Credential{ Uid: st.uid, Gid: st.gid, Groups: groups, } st.log.Info("Starting xpra server") if err := xpra.Process.Start(); err != nil { st.log.Warning("Failed to start xpra server: %v", err) st.xpraReady.Done() } st.xpra = xpra }