{"record":{"id":"3949ff2ca29ade41","repo":"rustdesk/rustdesk","slug":"display-display-is-no-longer-in-the-service","errorCode":null,"errorMessage":"display {display} ({}) is no longer in the service's list; the video service will rebuild against the fresh topology","messagePattern":"display (.+?) \\((.+?)\\) is no longer in the service's list; the video service will rebuild against the fresh topology","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/server/drm_capturer.rs","lineNumber":569,"sourceCode":"            let _ = tx.send(Err(err));\n            return;\n        }\n        None => {\n            let _ = tx.send(Err(anyhow!(\"timed out waiting for DrmDisplayList\")));\n            return;\n        }\n    };\n    // Our monitor's index IN THIS CONNECTION'S LIST; `display` indexes the CLIENT's. Measured on a\n    // T2: a woken 2880x1800 panel re-enters ahead of the Touch Bar, flipping index 0.\n    let wire_idx = match &expected {\n        Some(e) => {\n            match displays\n                .iter()\n                .position(|d| d.device == e.device && d.name == e.name)\n            {\n                Some(i) => i,\n                None => {\n                    let _ = tx.send(Err(anyhow!(\n                        \"display {display} ({}) is no longer in the service's list; \\\n                         the video service will rebuild against the fresh topology\",\n                        e.name\n                    )));\n                    return;\n                }\n            }\n        }\n        None => {\n            let _ = tx.send(Err(anyhow!(\n                \"display {display} is not in the advertised list; not guessing a monitor for it\"\n            )));\n            return;\n        }\n    };\n    // (device, crtc_id) survives a topology change; list indices do not.\n    let bound_to = displays\n        .get(wire_idx)","sourceCodeStart":551,"sourceCodeEnd":587,"githubUrl":"https://github.com/rustdesk/rustdesk/blob/91c9fccbb0f7bfe5f11644d5fbdec9b23fa10540/src/server/drm_capturer.rs#L551-L587","documentation":"The client requested a display by index into the client's list, but the service's freshly received DrmDisplayList no longer contains a matching (device, name) entry. recv_thread refuses to proceed and reports that the video service should rebuild against the new topology.","triggerScenarios":"The expected display (identified by device and name) disappeared from the service's advertised list between the request and the handshake — monitor unplugged, service re-enumerated outputs, or the panel went to sleep and dropped out of the list.","commonSituations":"Hot-unplug or power-off of a monitor (e.g. T2 panel sleeping) during connection setup; topology change racing a capture-session start.","solutions":["Rebuild the capturer against the current display list and pick a valid display (the video service does this automatically)","Verify the target monitor is connected, awake, and listed by the service","Retry after displays settle following a topology change"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"// confirm the requested display still exists in the service's list before new()\nlet listed = service_display_list()?.iter()\n    .any(|d| d.device == expected.device && d.name == expected.name);\nif !listed { /* rebuild display list / pick another display */ }","typeGuard":null,"tryCatchPattern":"match DrmCapturer::new(...) {\n    Err(e) if e.to_string().contains(\"no longer in the service's list\") => {\n        expected = resolve_display_against_fresh_topology()?;\n        capturer = DrmCapturer::new(...)?;\n    }\n    r => r,\n}","preventionTips":["Re-resolve display identity (device, name) after any topology event","Wait for display enumeration to settle after plug/unplug before capture","Wake sleeping panels before session setup"],"tags":["rust","drm","topology","display-list"],"backgroundTag":"entity-not-found","analyzedSha":"91c9fccbb0f7bfe5f11644d5fbdec9b23fa10540","analyzedAt":"2026-09-10T19:53:44.083Z","contentChangedAt":"2026-09-10T19:53:44.083Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}