diff --git a/bible-local/architecture/runtime-flows.md b/bible-local/architecture/runtime-flows.md index 06640c5..626423d 100644 --- a/bible-local/architecture/runtime-flows.md +++ b/bible-local/architecture/runtime-flows.md @@ -60,6 +60,8 @@ Rules: - Chromium opens `http://localhost/` — the full interactive web UI - SSH is independent from the desktop path - serial console support is enabled for VM boot debugging +- Default boot keeps the server-safe graphics path (`nomodeset` + forced `fbdev`) for IPMI/BMC consoles +- Higher-resolution mode selection is expected only when booting through an explicit `bee.display=kms` menu entry, which disables the forced `fbdev` Xorg config before `lightdm` ## ISO build sequence diff --git a/iso/builder/config/bootloaders/grub-pc/grub.cfg b/iso/builder/config/bootloaders/grub-pc/grub.cfg index 3d33e47..a6de856 100644 --- a/iso/builder/config/bootloaders/grub-pc/grub.cfg +++ b/iso/builder/config/bootloaders/grub-pc/grub.cfg @@ -14,6 +14,11 @@ menuentry "EASY-BEE" { initrd @INITRD_LIVE@ } +menuentry "EASY-BEE (graphics/KMS)" { + linux @KERNEL_LIVE@ @APPEND_LIVE@ bee.display=kms bee.nvidia.mode=normal net.ifnames=0 biosdevname=0 mitigations=off transparent_hugepage=always numa_balancing=disable nowatchdog nosoftlockup + initrd @INITRD_LIVE@ +} + menuentry "EASY-BEE (load to RAM)" { linux @KERNEL_LIVE@ @APPEND_LIVE@ toram nomodeset bee.nvidia.mode=normal net.ifnames=0 biosdevname=0 mitigations=off transparent_hugepage=always numa_balancing=disable nowatchdog nosoftlockup initrd @INITRD_LIVE@ @@ -24,6 +29,11 @@ menuentry "EASY-BEE (NVIDIA GSP=off)" { initrd @INITRD_LIVE@ } +menuentry "EASY-BEE (graphics/KMS, GSP=off)" { + linux @KERNEL_LIVE@ @APPEND_LIVE@ bee.display=kms bee.nvidia.mode=gsp-off net.ifnames=0 biosdevname=0 mitigations=off transparent_hugepage=always numa_balancing=disable nowatchdog nosoftlockup + initrd @INITRD_LIVE@ +} + menuentry "EASY-BEE (fail-safe)" { linux @KERNEL_LIVE@ @APPEND_LIVE@ bee.nvidia.mode=gsp-off memtest noapic noapm nodma nomce nolapic nosmp vga=normal net.ifnames=0 biosdevname=0 initrd @INITRD_LIVE@ diff --git a/iso/builder/config/bootloaders/isolinux/live.cfg.in b/iso/builder/config/bootloaders/isolinux/live.cfg.in index 4290606..3f0c11a 100644 --- a/iso/builder/config/bootloaders/isolinux/live.cfg.in +++ b/iso/builder/config/bootloaders/isolinux/live.cfg.in @@ -5,6 +5,12 @@ label live-@FLAVOUR@-normal initrd @INITRD@ append @APPEND_LIVE@ bee.nvidia.mode=normal +label live-@FLAVOUR@-kms + menu label EASY-BEE (^graphics/KMS) + linux @LINUX@ + initrd @INITRD@ + append @APPEND_LIVE@ bee.display=kms bee.nvidia.mode=normal + label live-@FLAVOUR@-toram menu label EASY-BEE (^load to RAM) linux @LINUX@ @@ -17,6 +23,12 @@ label live-@FLAVOUR@-gsp-off initrd @INITRD@ append @APPEND_LIVE@ nomodeset bee.nvidia.mode=gsp-off +label live-@FLAVOUR@-kms-gsp-off + menu label EASY-BEE (g^raphics/KMS, GSP=off) + linux @LINUX@ + initrd @INITRD@ + append @APPEND_LIVE@ bee.display=kms bee.nvidia.mode=gsp-off + label live-@FLAVOUR@-failsafe menu label EASY-BEE (^fail-safe) linux @LINUX@ diff --git a/iso/overlay/etc/systemd/system/lightdm.service.d/bee-display-mode.conf b/iso/overlay/etc/systemd/system/lightdm.service.d/bee-display-mode.conf new file mode 100644 index 0000000..530ee6f --- /dev/null +++ b/iso/overlay/etc/systemd/system/lightdm.service.d/bee-display-mode.conf @@ -0,0 +1,6 @@ +[Unit] +Wants=bee-preflight.service +After=bee-preflight.service + +[Service] +ExecStartPre=/usr/local/bin/bee-display-mode diff --git a/iso/overlay/usr/local/bin/bee-display-mode b/iso/overlay/usr/local/bin/bee-display-mode new file mode 100755 index 0000000..9fb9ee0 --- /dev/null +++ b/iso/overlay/usr/local/bin/bee-display-mode @@ -0,0 +1,54 @@ +#!/bin/sh +# Select Xorg display mode based on kernel cmdline. +# Default is the current server-safe path: keep forced fbdev. +set -eu + +cmdline_param() { + key="$1" + for token in $(cat /proc/cmdline 2>/dev/null); do + case "$token" in + "$key"=*) + echo "${token#*=}" + return 0 + ;; + esac + done + return 1 +} + +log() { + echo "bee-display-mode: $*" +} + +mode="$(cmdline_param bee.display || true)" +if [ -z "$mode" ]; then + mode="safe" +fi + +xorg_dir="/etc/X11/xorg.conf.d" +fbdev_conf="${xorg_dir}/10-fbdev.conf" +fbdev_park="${xorg_dir}/10-fbdev.conf.disabled" + +mkdir -p "$xorg_dir" + +case "$mode" in + kms|auto) + if [ -f "$fbdev_conf" ]; then + mv "$fbdev_conf" "$fbdev_park" + log "mode=${mode}; disabled forced fbdev config" + else + log "mode=${mode}; fbdev config already disabled" + fi + ;; + safe|fbdev|"") + if [ -f "$fbdev_park" ] && [ ! -f "$fbdev_conf" ]; then + mv "$fbdev_park" "$fbdev_conf" + log "mode=${mode}; restored forced fbdev config" + else + log "mode=${mode}; keeping forced fbdev config" + fi + ;; + *) + log "unknown bee.display=${mode}; keeping forced fbdev config" + ;; +esac