From 0f0f12fb1231abeb812caf7ee3735dfa66a8a445 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Thu, 19 Feb 2026 21:49:21 +0100 Subject: [PATCH] graphics/vesad: Fix multi-monitor support --- drivers/graphics/vesad/src/main.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/graphics/vesad/src/main.rs b/drivers/graphics/vesad/src/main.rs index bf605cfe9a..ac87e0b9db 100644 --- a/drivers/graphics/vesad/src/main.rs +++ b/drivers/graphics/vesad/src/main.rs @@ -4,6 +4,7 @@ extern crate syscall; use driver_graphics::GraphicsScheme; use event::{user_data, EventQueue}; use inputd::DisplayHandle; +use std::collections::HashMap; use std::env; use std::os::fd::AsRawFd; @@ -57,9 +58,17 @@ fn daemon(daemon: daemon::Daemon) -> ! { let mut framebuffers = vec![unsafe { FrameBuffer::new(phys, width, height, stride) }]; //TODO: ideal maximum number of outputs? + let bootloader_env = std::fs::read_to_string("/scheme/sys/env") + .expect("failed to read env") + .lines() + .map(|line| { + let (env, value) = line.split_once('=').unwrap(); + (env.to_owned(), value.to_owned()) + }) + .collect::>(); for i in 1..1024 { - match env::var(&format!("FRAMEBUFFER{}", i)) { - Ok(var) => match unsafe { FrameBuffer::parse(&var) } { + match bootloader_env.get(&format!("FRAMEBUFFER{}", i)) { + Some(var) => match unsafe { FrameBuffer::parse(&var) } { Some(fb) => { println!( "vesad: framebuffer {}: {}x{} stride {} at 0x{:X}", @@ -71,7 +80,7 @@ fn daemon(daemon: daemon::Daemon) -> ! { eprintln!("vesad: framebuffer {}: failed to parse '{}'", i, var); } }, - Err(_err) => break, + None => break, }; }