wavetermdev/waveterm · error
not connected: %s
Error message
not connected: %s
What it means
For WSL connections (connName prefixed with wsl://), CheckConnStatus derives the live connection status via GetWslConn(distroName).DeriveConnStatus(). This error is returned when the derived status is anything other than Status_Connected, reporting the actual status string.
Source
Thrown at pkg/blockcontroller/blockcontroller.go:440
blocklogger.Infof(ctx, "[conndebug] "+fmtStr, args...)
log.Printf(fmtStr, args...)
}
func CheckConnStatus(blockId string) error {
bdata, err := wstore.DBMustGet[*waveobj.Block](context.Background(), blockId)
if err != nil {
return fmt.Errorf("error getting block: %w", err)
}
connName := bdata.Meta.GetString(waveobj.MetaKey_Connection, "")
if conncontroller.IsLocalConnName(connName) {
return nil
}
if strings.HasPrefix(connName, "wsl://") {
distroName := strings.TrimPrefix(connName, "wsl://")
conn := wslconn.GetWslConn(distroName)
connStatus := conn.DeriveConnStatus()
if connStatus.Status != conncontroller.Status_Connected {
return fmt.Errorf("not connected: %s", connStatus.Status)
}
return nil
}
opts, err := remote.ParseOpts(connName)
if err != nil {
return fmt.Errorf("error parsing connection name: %w", err)
}
conn := conncontroller.MaybeGetConn(opts)
if conn == nil {
return fmt.Errorf("no connection found")
}
connStatus := conn.DeriveConnStatus()
if connStatus.Status != conncontroller.Status_Connected {
return fmt.Errorf("not connected: %s", connStatus.Status)
}
return nil
}
View on GitHub (pinned to a4447c1563)
Solutions
- Run `wsl --list --verbose` to confirm the distro exists and is running
- Start the distro manually (`wsl -d <distro>`) or restart the WSL service (`wsl --shutdown` then reconnect)
- Verify the meta connection value matches an installed distro name (wsl://<distroName>)
- Retry the connection; the client usually auto-reconnects once WSL is up
Example fix
// before
connName := "wsl://MyDistro"
// after (verify distro exists first)
out, _ := exec.Command("wsl", "-l", "-q").Output()
if !strings.Contains(string(out), "MyDistro") {
connName = "wsl://Ubuntu" // fall back to an installed distro
} Defensive patterns
Strategy: retry
Validate before calling
conn := wslconn.GetWslConn(strings.TrimPrefix(connName, "wsl://"))
st := conn.DeriveConnStatus()
if st.Status != conncontroller.Status_Connected { /* wait/retry */ } Try / catch
err := blockcontroller.CheckConnStatus(blockId)
if err != nil && strings.HasPrefix(err.Error(), "not connected:") {
// surface reconnect UI or retry with backoff
} Prevention
- Confirm WSL distros are installed and running before opening wsl:// terminals
- Avoid `wsl --shutdown` while wave blocks are open
- Auto-retry conn checks with backoff after system resume
When it happens
Trigger: WSL distro not started, wsl.exe unavailable or slow to start, distro name invalid/removed, WSL service shutdown while the block's connection status is polled.
Common situations: Machine resumed from sleep with WSL VM torn down; distro uninstalled while blocks referencing it are open; first connection to a distro still initializing; `wsl --shutdown` issued externally.
Related errors
- unknown status: %q
- wsl connection not found: %s
- failed to create process controller: %w
- error checking connection status: %w
- error setting up domain socket rpc client: %v
AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01).
Data as JSON: /api/errors/7f0785dbeabf0627.
Report an issue: GitHub.