diff --git a/graphics/vesad/src/main.rs b/graphics/vesad/src/main.rs index dee3318404..e107129af0 100644 --- a/graphics/vesad/src/main.rs +++ b/graphics/vesad/src/main.rs @@ -3,9 +3,10 @@ extern crate syscall; use driver_graphics::GraphicsScheme; use event::{user_data, EventQueue}; -use inputd::DisplayHandle; +use inputd::{DisplayHandle, VtEventKind}; use std::env; use std::fs::File; +use std::io::Write; use std::os::fd::AsRawFd; use crate::framebuffer::FrameBuffer; @@ -104,7 +105,10 @@ fn inner(daemon: redox_daemon::Daemon, framebuffers: Vec) -> ! { ) .unwrap(); - let _ = File::open("/scheme/debug/disable-graphical-debug"); + let mut disable_graphical_debug = Some( + File::open("/scheme/debug/disable-graphical-debug") + .expect("vesad: Failed to open /scheme/debug/disable-graphical-debug"), + ); libredox::call::setrens(0, 0).expect("vesad: failed to enter null namespace"); @@ -121,6 +125,16 @@ fn inner(daemon: redox_daemon::Daemon, framebuffers: Vec) -> ! { .read_vt_event() .expect("vesad: failed to read display handle") { + if let VtEventKind::Activate = vt_event.kind { + // Disable the kernel graphical debug writing once switching vt's for the + // first time. This way the kernel graphical debug remains enabled if the + // userspace logging infrastructure doesn't start up because for example a + // kernel panic happened prior to it starting up or logd crashed. + if let Some(mut disable_graphical_debug) = disable_graphical_debug.take() { + let _ = disable_graphical_debug.write(&[1]); + } + } + scheme.handle_vt_event(vt_event); } }