github.com/oweisse/u-root@v0.0.0-20181109060735-d005ad25fef1/cmds/xinit/xinit.go (about) 1 // Copyright 2018 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "fmt" 9 "log" 10 "os" 11 "os/exec" 12 "path/filepath" 13 "time" 14 ) 15 16 func x11(n string, args ...string) error { 17 cmd := exec.Command(n, args...) 18 cmd.Env = append(os.Environ(), "DISPLAY=:0") 19 cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr 20 if err := cmd.Run(); err != nil { 21 return fmt.Errorf("X11 start %v %v: %v", n, args, err) 22 } 23 return nil 24 } 25 26 func setup() error { 27 if err := os.Symlink("/usr/local/bin/bash", "/bin/bash"); err != nil { 28 return err 29 } 30 if err := os.Symlink("/lib/ld-linux-x86-64.so.2", "/lib64/ld-linux-x86-64.so.2"); err != nil { 31 return err 32 } 33 go func() { 34 cmd := exec.Command("Xfbdev") 35 cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr 36 if err := cmd.Run(); err != nil { 37 log.Fatalf("X11 startup: %v", err) 38 } 39 }() 40 for { 41 s, err := filepath.Glob("/tmp/.X*/X?") 42 if err != nil { 43 return err 44 } 45 if len(s) > 0 { 46 break 47 } 48 time.Sleep(time.Second) 49 } 50 for _, f := range []string{"wingo", "flwm", "chrome"} { 51 log.Printf("Run %v", f) 52 go x11(f) 53 } 54 55 // we block on the aterm. When the aterm exits, we do too. 56 return x11("aterm") 57 } 58 59 func main() { 60 if err := setup(); err != nil { 61 log.Fatal(err) 62 } 63 }