package main import ( "fmt" "log" "os" "os/exec" "github.com/BurntSushi/xgb" "github.com/BurntSushi/xgb/xproto" ) const ( width = 1920 height = 1080 ) func main() { conn, err := xgb.NewConn() if err != nil { log.Fatal(err) } defer conn.Close() screen := xproto.Setup(conn).DefaultScreen(conn) window, err := xproto.NewWindowId(conn) if err != nil { log.Fatal(err) } values := uint32(xproto.CwBackPixel | xproto.CwEventMask) xproto.CreateWindow(conn, screen.RootDepth, window, screen.Root, 0, 0, width, height, 0, xproto.WindowClassInputOutput, screen.RootVisual, values, []uint32{screen.BlackPixel, xproto.EventMaskExposure}) xproto.MapWindow(conn, window) conn.Sync() // XFCE owns the actual fullscreen policy; use its existing wmctrl helper. _ = exec.Command("wmctrl", "-i", "-r", fmt.Sprintf("0x%08x", window), "-b", "add,fullscreen").Run() gc, err := xproto.NewGcontextId(conn) if err != nil { log.Fatal(err) } xproto.CreateGC(conn, gc, xproto.Drawable(window), xproto.GcForeground|xproto.GcBackground, []uint32{screen.WhitePixel, screen.BlackPixel}) font := xproto.Font(window) xproto.OpenFont(conn, font, uint16(len("fixed")), "fixed") xproto.ChangeGC(conn, gc, xproto.GcFont, []uint32{uint32(font)}) draw := func() { xproto.ClearArea(conn, false, window, 0, 0, width, height) message := "Brak polaczenia WFB" xproto.ImageText8(conn, byte(len(message)), xproto.Drawable(window), gc, 32, 56, message) conn.Sync() } draw() for { event, err := conn.WaitForEvent() if err != nil { if os.IsTimeout(err) { continue } return } if _, ok := event.(xproto.ExposeEvent); ok { draw() } } }