slint-ui/slint · critical
Seat deactivation is not implemented
Error message
Seat deactivation is not implemented
What it means
In the Linux KMS/DRM backend with the libseat feature, the seat's Disable callback — the signal that the session lost the seat (VT switch away, session lock, DRM master being taken elsewhere) — hits `unimplemented!()` and panics instead of disabling the seat and acknowledging with seat.disable(). Any libseat session deactivation therefore crashes the process.
Source
Thrown at internal/backends/linuxkms/calloop_backend.rs:128
);
crate::renderer::try_skia_then_femtovg_then_software
}
};
#[cfg(feature = "libseat")]
let seat_active = Rc::new(RefCell::new(false));
//libseat::set_log_level(libseat::LogLevel::Debug);
#[cfg(feature = "libseat")]
let mut seat = {
let seat_active = seat_active.clone();
libseat::Seat::open(move |_seat, event| match event {
libseat::SeatEvent::Enable => {
*seat_active.borrow_mut() = true;
}
libseat::SeatEvent::Disable => {
unimplemented!("Seat deactivation is not implemented");
}
})
.map_err(|e| format!("Error opening session with libseat: {e}"))?
};
#[cfg(feature = "libseat")]
while !(*seat_active.borrow()) {
if seat.dispatch(5000).map_err(|e| format!("Error waiting for seat activation: {e}"))?
== 0
{
return Err("Timeout while waiting to activate session".to_string().into());
}
}
Ok(Backend {
context: Default::default(),
#[cfg(feature = "libseat")]
seat: Rc::new(RefCell::new(seat)),View on GitHub (pinned to a9ea814a58)
Solutions
- While the app runs, avoid VT switches/session lock/suspend — keep it the sole active session.
- Build or run without the libseat feature (direct DRM master path) if your deployment allows it.
- Use the default winit backend on general-purpose desktop sessions instead of linuxkms.
- Patch internal/backends/linuxkms/calloop_backend.rs to handle Disable (disable rendering, call seat.disable(), re-arm on Enable) instead of unimplemented!().
- Track/file the upstream issue so proper seat deactivation lands.
Defensive patterns
Strategy: fallback
Prevention
- Do not VT-switch, lock the session, or suspend while a linuxkms+libseat slint app is running.
- Consider building without the libseat feature for single-session kiosk deployments.
- Prefer the winit backend when running inside a normal desktop session.
- Carry a local patch that handles SeatEvent::Disable (ack with seat.disable()) until upstream implements it.
When it happens
Trigger: Running a slint app with the linuxkms backend + libseat (e.g. SLINT_BACKEND=linuxkms on a logind-managed seat) and then switching virtual terminals (Ctrl+Alt+F2), locking the session, suspending, or letting another compositor grab DRM master.
Common situations: Kiosk/embedded fullscreen apps launched from a seat session; testing on a desktop by VT-switching away; system suspend while the slint app holds DRM master.
Related errors
- not implemented
- The image cannot be rendered
- not implemented
- implemented type conversion {:#?}
- ItemMemberFunctionCall `{prop_name}`
AI-assisted analysis of slint-ui/slint@a9ea814a58 (2026-08-16).
Data as JSON: /api/errors/9f0462dd23f7edce.
Report an issue: GitHub.