diff --git a/cmd/tailscale/cli/web.go b/cmd/tailscale/cli/web.go index f59905510..909979a45 100644 --- a/cmd/tailscale/cli/web.go +++ b/cmd/tailscale/cli/web.go @@ -91,12 +91,18 @@ func runWeb(ctx context.Context, args []string) error { hasPreviewCap := st.Self.HasCap(tailcfg.CapabilityPreviewWebClient) cliServerMode := web.LegacyServerMode + var existingWebClient bool + if prefs, err := localClient.GetPrefs(ctx); err == nil { + existingWebClient = prefs.RunWebClient + } if hasPreviewCap { cliServerMode = web.LoginServerMode - // Also start full client in tailscaled. - log.Printf("starting tailscaled web client at %s:5252\n", st.Self.TailscaleIPs[0]) - if err := setRunWebClient(ctx, true); err != nil { - return fmt.Errorf("starting web client in tailscaled: %w", err) + if !existingWebClient { + // Also start full client in tailscaled. + log.Printf("starting tailscaled web client at %s:5252\n", st.Self.TailscaleIPs[0]) + if err := setRunWebClient(ctx, true); err != nil { + return fmt.Errorf("starting web client in tailscaled: %w", err) + } } } @@ -115,7 +121,7 @@ func runWeb(ctx context.Context, args []string) error { case <-ctx.Done(): // Shutdown the server. webServer.Shutdown() - if hasPreviewCap && !webArgs.cgi { + if hasPreviewCap && !webArgs.cgi && !existingWebClient { log.Println("stopping tailscaled web client") // When not in cgi mode, shut down the tailscaled // web client on cli termination.