package main import ( "os" "os/exec" _ "embed" "github.com/getlantern/systray" ) //go:embed icon/shield.png var activeIcon []byte //go:embed icon/shield-off.png var inactiveIcon []byte func main() { systray.Run(onReady, onExit) } func onReady() { systray.SetIcon(inactiveIcon) connect := systray.AddMenuItem("Connect", "") quit := systray.AddMenuItem("Quit", "") var cmd *exec.Cmd for { select { case <-quit.ClickedCh: if cmd != nil { cmd.Process.Kill() } systray.Quit() case <-connect.ClickedCh: if cmd == nil { cmd = exec.Command("ssh", "-N", "proxytray") systray.SetIcon(activeIcon) connect.SetTitle("Disconnect") cmd.Stderr = os.Stdout cmd.Stdout = os.Stdout cmd.Stdin = os.Stdin cmd.Start() go func() { cmd.Wait() systray.SetIcon(inactiveIcon) connect.SetTitle("Connect") cmd = nil }() } else { cmd.Process.Kill() } } } } func onExit() { }