fix: comprehensive boot hardening — crashes, warnings, sensors, bare-metal PS/2
- firmware-loader: handle missing INIT_NOTIFY gracefully (Option<RawFd>) - driver-params: suppress ENODEV (19) on missing driver-manager scheme - compositor: add wl_seat.name + pointer capabilities for Qt6 compat - greeter: use redox QPA (libqredox.so) instead of broken Qt6 Wayland - greeter: reduce DRM wait 10s→2s, kded6 offscreen QPA to avoid crash - thermald: add CPU die temperature via MSR IA32_THERM_STATUS (Linux coretemp) - pcid: diagnostic MCFG warning with Q35 guidance, address validation - dhcpd: auto-interface detection (P0-dhcpd-auto-iface.patch wired) - procmgr: SIGCHLD EPERM→debug (kernel limitation, not a bug) - ps2d LED: warn→debug on modern hw without real PS/2 controller - ps2d mouse: 10×1s→3×250ms retry, fast-fail on unknown response - i2c RON: handle empty response from i2cd when no adapters present - base recipe: wire 6 new/improved patches - config: remove INIT_SKIP, enable all 14 previously-suppressed daemons
This commit is contained in:
@@ -219,6 +219,8 @@ const WL_KEYBOARD_KEY: u16 = 3;
|
||||
|
||||
const WL_OUTPUT_GEOMETRY: u16 = 0;
|
||||
const WL_OUTPUT_MODE: u16 = 1;
|
||||
const WL_OUTPUT_DONE: u16 = 2;
|
||||
const WL_OUTPUT_SCALE: u16 = 3;
|
||||
|
||||
const WL_CALLBACK_DONE: u16 = 0;
|
||||
|
||||
@@ -1022,13 +1024,38 @@ impl Compositor {
|
||||
push_i32(&mut msg, 60);
|
||||
let _ = stream.write_all(&msg);
|
||||
}
|
||||
// wl_output.scale and wl_output.done are required for wl_output v2+ clients to
|
||||
// treat the output as fully initialized.
|
||||
{
|
||||
let mut msg = Vec::with_capacity(12);
|
||||
push_header(&mut msg, output_id, WL_OUTPUT_SCALE, 4);
|
||||
push_i32(&mut msg, 1);
|
||||
let _ = stream.write_all(&msg);
|
||||
}
|
||||
{
|
||||
let mut msg = Vec::with_capacity(8);
|
||||
push_header(&mut msg, output_id, WL_OUTPUT_DONE, 0);
|
||||
let _ = stream.write_all(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
fn send_seat_capabilities(&self, stream: &mut UnixStream, seat_id: u32) {
|
||||
let mut msg = Vec::with_capacity(12);
|
||||
push_header(&mut msg, seat_id, WL_SEAT_CAPABILITIES, 4);
|
||||
push_u32(&mut msg, 0x3);
|
||||
let _ = stream.write_all(&msg);
|
||||
// wl_seat.name (v2) — required by Qt6 to fully initialize the seat
|
||||
{
|
||||
let mut payload = Vec::new();
|
||||
push_wayland_string(&mut payload, "seat0");
|
||||
let mut msg = Vec::with_capacity(8 + payload.len());
|
||||
push_header(&mut msg, seat_id, 1, payload.len()); // opcode 1 = wl_seat.name
|
||||
msg.extend_from_slice(&payload);
|
||||
let _ = stream.write_all(&msg);
|
||||
}
|
||||
// wl_seat.capabilities — advertise pointer so Qt creates a wl_pointer proxy
|
||||
{
|
||||
let mut msg = Vec::with_capacity(12);
|
||||
push_header(&mut msg, seat_id, WL_SEAT_CAPABILITIES, 4);
|
||||
push_u32(&mut msg, 0x1); // WL_SEAT_CAPABILITY_POINTER
|
||||
let _ = stream.write_all(&msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user