@@ -442,11 +442,23 @@ fn run_udev(extern_name: Option<String>, startup: Option<StartupOverride>) {
442442 if let Err ( e) = crate :: ipc:: init_hackerland_ipc ( & loop_handle) {
443443 warn ! ( "HackerLand control socket failed to start: {e}" ) ;
444444 }
445- // sde-ipc / extern_ipc is disabled for now (see ipc/mod.rs's note) —
446- // `extern_name` still selects which config.hk / HackerLand socket
447- // this session uses (see config.rs, hackerland_ipc.rs), it just
448- // doesn't also open a second sde-ipc socket until that protocol
449- // gets a proper design pass.
445+ // `--extern-<name>` control socket (the protocol `--extern-hacker-mode`/
446+ // `--extern-cybersecurity-mode`/`--extern-penetration-mode` sessions are
447+ // actually driven over — see `src/ipc/extern_ipc.rs` and
448+ // `src/ipc/protocol.rs`). Only opened for an `--extern-*` session, same
449+ // as `extern_name` itself already only being `Some` in that case — a
450+ // plain default session has no `--extern-<name>` client to serve this
451+ // socket to, so there's nothing to open. Not fatal if it fails: a
452+ // session that fails to expose this socket still has a perfectly usable
453+ // Wayland compositor underneath it, just without external process
454+ // control (e.g. `hacker-mode-session`'s `hacker-mode-ipcctl launch`)
455+ // able to reach it — same "warn, don't exit" treatment already given to
456+ // `init_hackerland_ipc` and the EIS socket below.
457+ if let Some ( name) = extern_name. clone ( ) {
458+ if let Err ( e) = crate :: ipc:: init_extern_ipc ( & loop_handle, name) {
459+ warn ! ( "extern-ipc control socket failed to start: {e}" ) ;
460+ }
461+ }
450462
451463 // EIS input-emulation socket — see input_emulation module doc for
452464 // scope. Not fatal if it fails (e.g. no writable XDG_RUNTIME_DIR in
@@ -565,11 +577,16 @@ fn run_winit(extern_name: Option<String>, startup: Option<StartupOverride>) {
565577 if let Err ( e) = crate :: ipc:: init_hackerland_ipc ( & loop_handle) {
566578 warn ! ( "HackerLand control socket failed to start: {e}" ) ;
567579 }
568- // sde-ipc / extern_ipc is disabled for now (see ipc/mod.rs's note) —
569- // `extern_name` still selects which config.hk / HackerLand socket
570- // this session uses (see config.rs, hackerland_ipc.rs), it just
571- // doesn't also open a second sde-ipc socket until that protocol
572- // gets a proper design pass.
580+ // `--extern-<name>` control socket — see `run_udev`'s identical block
581+ // above for the full explanation; nested (winit) sessions need this
582+ // exactly as much as bare-metal ones do (e.g. a developer running
583+ // `hacker-mode-session` from inside an existing desktop session for
584+ // testing — the same `--extern-hacker-mode` client either way).
585+ if let Some ( name) = extern_name. clone ( ) {
586+ if let Err ( e) = crate :: ipc:: init_extern_ipc ( & loop_handle, name) {
587+ warn ! ( "extern-ipc control socket failed to start: {e}" ) ;
588+ }
589+ }
573590
574591 // EIS input-emulation socket — see input_emulation module doc for
575592 // scope. Not fatal if it fails (e.g. no writable XDG_RUNTIME_DIR in
0 commit comments