WakeOnLan hängt in Linbo fest, wenn kein Bildschirm angesteuert werden kann

Hi zusammen,
wir haben an der Schule folgendes Hardware-Layout:

Die Rechner hängen an einem Switch, der ständig mit Strom versorgt wird. Vom Rechner aus, wird ein HDMI-Switch angesteuert, der eigentlich bei Systemstart aus ist. Am HDMI-Switch hängt ein HDMI-Splitter, der dann Bild- und Ton-Signal an den Beamer und an einen Wacom-Bildschirm überträgt.

HDMI-Switch, Splitter und Wacom werden eigentlich nur bei Gebrauch per „Lichtschalter“ mit Strom versorgt. Netwerk-Switch und Computer werden ständig mit Strom versorgt.

Nun ist es die Idee, die Rechner jeden Morgen zu starten, sodass sie vor jedem neuen Schultag neu gesyncht werden. Die Rechner starten auch ganz brav, wenn sie den Wakeup-Call vom Server erhalten

# Cronjob auf dem Server
15 7 * * 1-5 /bin/bash /usr/sbin/linbo-remote -g ubuntu_2110 -b 10 -w 300

Blöderweise starten die Rechner nicht vollständig, sondern kommen bis zu „Libo - Initializing hardware“ also kurz vor die GUI. Schalte ich den „Lichtschalter“ mit HDMI-Switch, Splitter und Bildschirm an, wird der Boot-Prozess fortgesetzt. Ist er an, startet der Rechner vollständig und führt auch die Synchronisation aus.
Der Zeitpunkt des Abbruchs des Boot-Vorgangs ist geschätzt, denn wenn ich den Bildschirm anmache, entsteht das Problem nicht, schalte ich ihn zu, wird der Prozess forgesetzt, aber bis der angeht, vergeht etwas Zeit. Ich tippe also, dass irgendwo da das Problem sitzt.

Ich habe auch nach und Nach mal den Bildschrim mit Strom versorgt, mal den HDMI-Switch, mal den HDMI-Splitter, mal alle Kombinationen - es scheint wirklich so zu sein, dass alle drei Geräte eine Stromversorgung benötigen, damit der Boot-Vogang vollstädig ausgeführt wird (der Bildschirm muss nicht an sein, aber er braucht Strom).

Ich hätte gerne, dass der Rechner vollständig bootet, auch wenn HDMI-Splitter, HDMI-Switch und Wacom ausgeschalten sind, sodass morgens jeder Kollege morgens einen frisch synchronisierten Client und einen vollständig gestarteten Rechner in den Klassenzimmer vorfindet und kein unnötiger Stromverbrauch für die genannten Geräte entsteht und die Mediensteuerung vom Netz gehen kann - die hängt sich manchmal auf, da ist der Lichtschalter eine elegante Lösung für einen Reset der Mediensteuerung.

Woran könnte das liegen? Ist das ein Problem mit der Linbo-Konfiguration? Hat das ganz andere Ursachen und äußert sich nur so?

Bin für jede Hilfe dankbar.
Liebe Grüße
Patrick

Hallo Patrick,

da scheint linbo wohl während des bootens die Bildschirmconfig ab zu fragen: und wenn der Bildschirm keinen Strom hat, dann klappt das nicht, also wird die GUI nicht gestartet.
Hast du den Rechner mal eine Weile in Ruhe gelassen? Ist trotzdem nix passiert?
Kannst du in dem Zustand per linbo-ssh auf den Rechner?

Du kannst aber auch mal

linbo-remote -g ubuntu_2110  -w 60 -d -c sync:1,start:1 

-d disabled die GUI (siehe linbo-remote -h ).
-b hab ich noch nie benutzt und -w 300 find ich extrem: bei mir reicht -w 60 schon dicke …

Aber: wir können im Notfall auch noch versuchen in der grub.cfg der Gruppe die Auflösung vor zu geben, statt auto ein zu stellen.

LG

Holger

Hi Holger,
ich hab das ausprobiert mal mit Bildschirm an und mal mit Bildschirm aus.

linbo-remote -g ubuntu_2110  -w 60 -d -c sync:1,start:1

Mit Bildschirm an geht das, allerdings wird da auch wieder die GUI verwendet und angezeigt!!

Mit Bildschirm aus, bleibt er wieder hängen. Also hab ich auch das mal probiert:

linbo-remote -g ubuntu_2110  -w 60 -d -n -c sync:1,start:1

und das klappt auch nicht.

Wie muss ich denn an grub.cfg rumspielen, damit das hin haut? Ich poste hier mal die aktuelle grub.cfg (/srv/linbo/boot/grub/grub.cfg):

#
# default grub.cfg, pxe boot version (placed on server, don't edit!)
# thomas@linuxmuster.net
# 20210202
#

set timeout=0

set prefix=/boot/grub
set netroot="(tftp)"

# one menu entry does it all
menuentry 'Default' {

 # look for reboot grubenv pipe on server and execute it if present
 set remote_grubenv=$prefix/spool/${net_pxe_hostname}.reboot
 if [ -s "$remote_grubenv" ]; then
  echo -n Loading remote grub environment ...
  load_env -f "$remote_grubenv"
 fi

 # if grub reboot variable is not set from server
 if [ -z "$reboot_grub" ]; then

  # look for it on cache partition
  if search --set root --file /start.conf; then

   # save local root in variable
   set localroot="${root}"

   # read grub environment variables
   if [ -s /boot/grub/grubenv ]; then
    echo -n Loading local grub environment ...
    load_env
    set localboot=yes
    echo
   fi

  else
   clear
  fi

 fi

# if reboot is set try to load the os on the given partition
 if [ -n "${reboot_label}" ]; then
  search --label "$reboot_label" --set tmproot
 fi
 if [ -n "${reboot_grub}" -a -z "${tmproot}" ]; then
  set tmproot="${reboot_grub}"
 fi

 if [ -n "${tmproot}" ]; then
  terminal_output console
  echo Booting operating system ...
  echo

  if [ "$localboot" ]; then
   set reboot_grub=""
   set reboot_label=""
   save_env reboot_grub
   save_env reboot_label
  fi
  set root="${tmproot}"
  set win_efiloader="/EFI/Microsoft/Boot/bootmgfw.efi"

  if [ -e "$reboot_kernel" -a -e "$reboot_initrd" ]; then
   linux $reboot_kernel $reboot_append
   initrd $reboot_initrd
   boot
  elif [ -e /boot/vmlinuz -a -e /boot/initrd.img ]; then
   linux /boot/vmlinuz $reboot_append
   initrd /boot/initrd.img
   boot
  elif [ -e /boot/vmlinuz -a -e /boot/initrd ]; then
   linux /boot/vmlinuz $reboot_append
   initrd /boot/initrd
   boot
  elif [ -e /vmlinuz -a -e /initrd.img ]; then
   linux /vmlinuz $reboot_append
   initrd /initrd.img
   boot
  elif [ -e /vmlinuz -a -e /initrd ]; then
   linux /vmlinuz $reboot_append
   initrd /initrd
   boot
  elif [ -s /boot/grub/grub.cfg ] ; then
   configfile /boot/grub/grub.cfg
  elif [ "$grub_platform" = "pc" ]; then
   if [ -s /bootmgr ] ; then
    ntldr /bootmgr
    boot
   elif [ -s /ntldr ] ; then
    ntldr /ntldr
    boot
   elif [ -s /grldr ] ; then
    ntldr /grldr
    boot
  else
    chainloader +1
    boot
   fi
  elif [ -e "$win_efiloader" ]; then
   chainloader $win_efiloader
   boot
  fi

 fi

 # finally fallback to netboot if previous boot methods were not successful
 set root="${netroot}"

 # compute path to group specific config
 if [ "$grub_platform" = "efi" ]; then
  if [ -n "$net_efinet0_extensionspath" ]; then
   set group="$net_efinet0_extensionspath"
   set net_pxe_hostname="$net_efinet0_hostname"
  elif [ -n "$net_efinet1_extensionspath" ]; then
   set group="$net_efinet1_extensionspath"
   set net_pxe_hostname="$net_efinet1_hostname"
  elif [ -n "$net_efinet2_extensionspath" ]; then
   set group="$net_efinet2_extensionspath"
   set net_pxe_hostname="$net_efinet2_hostname"
 fi
 else
  set group="$net_pxe_extensionspath"
 fi
 set groupcfg="$prefix/${group}.cfg"
 set hostcfg="$prefix/hostcfg/${net_pxe_hostname}.cfg"

 # try host specific config from server and boot it if exists
 configfile $hostcfg

 # try group specific config from server and boot it if exists
 configfile $groupcfg

 # try local boot in the other case
 if [ -n "$localroot" ]; then
  set root="${localroot}"
  # load local custom.cfg if present
  set customcfg=$prefix/custom.cfg
  if [ -s "$customcfg" ]; then
   configfile $customcfg
  fi
 fi

 # finally try netboot linbo directly in failsafe mode
 set root="${netroot}"
 set gfxpayload=640x480x16

 # 32bit pae, non pae or 64bit kernel
 if cpuid -l; then
  set linbo_kernel=/linbo64
  set linbo_initrd=/linbofs64.lz
 elif cpuid -p; then
  set linbo_kernel=/linbo
  set linbo_initrd=/linbofs.lz
 else
  set linbo_kernel=/linbo-np
  set linbo_initrd=/linbofs-np.lz
 fi
 echo "LINBO netboot in failsafe mode"
 echo -n "Loading $linbo_kernel .."
 linux $linbo_kernel quiet netboot
 echo
 echo -n "Loading $linbo_initrd .."
 initrd $linbo_initrd
 boot
}

Hallo Patrick,

das war die falsche grub.cfg, du mußt die .cfg in besagtem Ordner nehmen, also ubuntu_2110.cfg

Da drin steht:
set gfxmode=auto
set gfxpayload=keep

Da müssen sinnige Werte rein.
Vielleicht sowas:
set gfxpayload=1920x1080x16

Ich weiß nicht, was mit dem „auto“ passieren muss: da mußt du rumprobieren, auch mal Zeile auskommentieren, oder/und Internet fragen: www.ecosia.org zum Beispiel.

Denk aber dran: wenn du die .cfg editierst, werden die Änderungen durch einen linuxmuster-import-devices lauf überschrieben, wenn du nicht die Zeile in der Datei die managed by linuxmuster heißt editierst.
Ich mach immer ein
NOT managed by linuxmuster
drauf (KOmmentarzeichen erhalten: einfach nur NOT einfügen)

LG

Holger

Hi Holger,
probiere ich gleich aus, danke! Mach ich dann mit der Option -d was falsch, oder funktioniert der bei linbo-remote (noch) nicht mit der neuen GUI?
LG Patrick

Hi Holger,
ich hab mich heute mal ne Stunde hingesetzt und PCs beim booten zugesehen, obwohl se nix anzeigen :sob:. Entschleunigt ungemein…
ABER… es funktioniert. Ich hab die grub.cfg folgende Zeilen abgeändert:

set gfxmode=1920x1080x16
set gfxpayload=1920x1080x16

Ich habs mit beiden linbo-remote-Befehlen mehrfach getestet:

linbo-remote -g ubuntu_2110 -w 80 -d -c start:1
linbo-remote -g ubuntu_2110 -w 80 -d -c sync:1,start:1

LG Patrick

Hi nochmal,

ich hab das heute mal in Produktion auf 15 Clients getestet - Sonntags is ja keiner in der Schule. 4 davon sind trotzdem hängen geblieben. Witzigerweise auch der auf dem ich getestet hatte -.-

Scheint nach wie vor ein Glücksspiel zu sein. Ich bin offen für Vorschläge :slight_smile:

LG Patrick