rustdesk/rustdesk · info
Closed manually by the web console
Error message
Closed manually by the web console
What it means
Raised when a message received on `hbbs_rx` (the channel from the rendezvous/signaling server) indicates this connection's id is in a list of connections to close — i.e., an operator closed the session via the web console. The error is intentional administrative termination, not a fault.
Source
Thrown at src/server/connection.rs:1286
}
},
res = self.stream.next() => {
if let Some(res) = res {
last_recv_time = Instant::now();
timeout(SEND_TIMEOUT_OTHER, forward.send(res?)).await??;
} else {
bail!("Stream reset by the peer");
}
},
_ = self.timer.tick() => {
if last_recv_time.elapsed() >= H1 {
bail!("Timeout");
}
}
Ok(conns) = hbbs_rx.recv() => {
if conns.contains(&self.inner.id) {
// todo: check reconnect
bail!("Closed manually by the web console");
}
}
}
}
}
Ok(())
}
async fn send_permission(&mut self, permission: Permission, enabled: bool) {
let mut misc = Misc::new();
misc.set_permission_info(PermissionInfo {
permission: permission.into(),
enabled,
..Default::default()
});
let mut msg_out = Message::new();
msg_out.set_misc(misc);
self.send(msg_out).await;View on GitHub (pinned to 91c9fccbb0)
Solutions
- Confirm with the admin/console operator that the session was intentionally closed
- Have the client detect this specific error and show 'session closed by administrator' instead of a generic failure
- Implement the pending 'check reconnect' TODO to auto-reconnect when appropriate
- Audit console access logs to rule out unauthorized closures
Defensive patterns
Strategy: try-catch
Try / catch
match session_result {
Err(e) if e.to_string().contains("Closed manually by the web console") =>
show_admin_closed_notice(),
other => propagate(other),
} Prevention
- Coordinate with console admins before closing sessions
- Map this error to a distinct UI message
- Audit console close actions
When it happens
Trigger: An administrator selects 'close connection' for this peer's id in the web console; the `hbbs_rx.recv()` branch receives `Ok(conns)` whose vector contains `self.inner.id`.
Common situations: IT admin terminates a user's remote session from the management console; compliance policy auto-kills sessions; mistaken closure targeting the wrong id.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
AI-assisted analysis of rustdesk/rustdesk@91c9fccbb0 (2026-09-10).
Data as JSON: /api/errors/f7f9e9aecdc3100f.
Report an issue: GitHub.