[gelost] grub timeout ohne interrupt
[gelost] grub timeout ohne interrupt
Hallo Gemeinde
ich bin gerade dabei debian auf meinen tablet einzurichten.. es laeuft ganz gut
Es ist debian testing installiert und ich habe in der /etc/default/grub datei die werte GRUB_TIMEOUT=10 und GRUB_RECORDFAIL_TIMEOUT=10 hinzugefuegt.
Was ist eigentlich das Problem
Ich habe einen dualboot in grub windows/debian. Noch ist windows voreingestellt. Wenn ich nun boote wird der countdown gestartet und nach 5 sek windows gebootet.
Wenn ich nun mit meinen seiten tasten des tablets up/down etwas anderes auswaehle bricht der countdown ab und ich muss eine externe tastatur anschliessen um enter zu druecken
Gibt es irgentwie eine moeglichkeit eine art GRUB_TIMEOUT_FORCE_NO_INTERUPT anzulegen ich habe leider nur GRUB_RECORDFAIL_TIMEOUT gefunen und das greift leider nicht...
mfg mentore
ich bin gerade dabei debian auf meinen tablet einzurichten.. es laeuft ganz gut
Es ist debian testing installiert und ich habe in der /etc/default/grub datei die werte GRUB_TIMEOUT=10 und GRUB_RECORDFAIL_TIMEOUT=10 hinzugefuegt.
Was ist eigentlich das Problem
Ich habe einen dualboot in grub windows/debian. Noch ist windows voreingestellt. Wenn ich nun boote wird der countdown gestartet und nach 5 sek windows gebootet.
Wenn ich nun mit meinen seiten tasten des tablets up/down etwas anderes auswaehle bricht der countdown ab und ich muss eine externe tastatur anschliessen um enter zu druecken
Gibt es irgentwie eine moeglichkeit eine art GRUB_TIMEOUT_FORCE_NO_INTERUPT anzulegen ich habe leider nur GRUB_RECORDFAIL_TIMEOUT gefunen und das greift leider nicht...
mfg mentore
Zuletzt geändert von Mentore am 22.10.2017 16:55:23, insgesamt 1-mal geändert.
Re: grub timeout ohne interrupt
Meines Wissens gibt es das nicht.
Das einzige was es afaik gibt ist die Möglichkeit unter Debian vor dem Herunterfahren festzulegen was gebootet werden soll (grub-set-default). Nachdem das in »/boot/grub/grubenv« gespeichert wird, solltest du dasselbe gegebenenfalls auch unter Windows machen können, zumindest wenn die Datei auf einem Dateisystem liegt, das Windows lesen kann und jemand hat zu dem Zweck offensichtlich sogar ein grafisches Programm geschrieben, das sowohl unter GNU/Linux als auch Windows läuft:
http://de.mcbf.net/david/grubchoosedefault/
Das einzige was es afaik gibt ist die Möglichkeit unter Debian vor dem Herunterfahren festzulegen was gebootet werden soll (grub-set-default). Nachdem das in »/boot/grub/grubenv« gespeichert wird, solltest du dasselbe gegebenenfalls auch unter Windows machen können, zumindest wenn die Datei auf einem Dateisystem liegt, das Windows lesen kann und jemand hat zu dem Zweck offensichtlich sogar ein grafisches Programm geschrieben, das sowohl unter GNU/Linux als auch Windows läuft:
http://de.mcbf.net/david/grubchoosedefault/
Re: grub timeout ohne interrupt
Hi
super idee bin ich garnicht drauf gekommen
nur geb ich noch nicht so schnell auf ... ich habe in den sources von grub folgendes entdeckt
ich hab keine ahnung von code und kann nur zwischen den zeilen lesen
aber ich glaube wenn ich den "break" hier entferne muesste der timeout weiterlaufen
leider finde ich die datei "grub-master/grub-core/normal/menu.c" nicht ich denke das liegt daran das das C zu binaer kompeliert wurde und nun nichtmehr als datei besteht
das heisst um es zu testen muesste ich grub selbst kompellieren und erneu installieren ?
mfg
super idee bin ich garnicht drauf gekommen
nur geb ich noch nicht so schnell auf ... ich habe in den sources von grub folgendes entdeckt
Code: Alles auswählen
/* Initialize the time. */
saved_time = grub_get_time_ms ();
timeout = grub_menu_get_timeout ();
if (timeout > 0)
menu_print_timeout (timeout);
else
clear_timeout ();
while (1)
{
int c;
timeout = grub_menu_get_timeout ();
if (grub_normal_exit_level)
return -1;
if (timeout > 0 && has_second_elapsed (&saved_time))
{
timeout--;
grub_menu_set_timeout (timeout);
menu_print_timeout (timeout);
}
if (timeout == 0)
{
grub_env_unset ("timeout");
*auto_boot = 1;
menu_fini ();
return default_entry;
}
c = grub_getkey_noblock ();
if (c != GRUB_TERM_NO_KEY)
{
if (timeout >= 0)
{
grub_env_unset ("timeout");
grub_env_unset ("fallback");
clear_timeout ();
}
switch (c)
{
case GRUB_TERM_KEY_HOME:
case GRUB_TERM_CTRL | 'a':
current_entry = 0;
menu_set_chosen_entry (current_entry);
break;
case GRUB_TERM_KEY_END:
case GRUB_TERM_CTRL | 'e':
current_entry = menu->size - 1;
menu_set_chosen_entry (current_entry);
break;
case GRUB_TERM_KEY_UP:
case GRUB_TERM_CTRL | 'p':
case '^':
if (current_entry > 0)
current_entry--;
menu_set_chosen_entry (current_entry);
break;
case GRUB_TERM_CTRL | 'n':
case GRUB_TERM_KEY_DOWN:
case 'v':
if (current_entry < menu->size - 1)
current_entry++;
menu_set_chosen_entry (current_entry);
break;
case GRUB_TERM_CTRL | 'g':
case GRUB_TERM_KEY_PPAGE:
if (current_entry < GRUB_MENU_PAGE_SIZE)
current_entry = 0;
else
current_entry -= GRUB_MENU_PAGE_SIZE;
menu_set_chosen_entry (current_entry);
break;
case GRUB_TERM_CTRL | 'c':
case GRUB_TERM_KEY_NPAGE:
if (current_entry + GRUB_MENU_PAGE_SIZE < menu->size)
current_entry += GRUB_MENU_PAGE_SIZE;
else
current_entry = menu->size - 1;
menu_set_chosen_entry (current_entry);
break;
case '\n':
case '\r':
case GRUB_TERM_KEY_RIGHT:
case GRUB_TERM_CTRL | 'f':
menu_fini ();
*auto_boot = 0;
return current_entry;
case '\e':
if (nested)
{
menu_fini ();
return -1;
}
break;
case 'c':
menu_fini ();
grub_cmdline_run (1, 0);
goto refresh;
case 'e':
menu_fini ();
{
grub_menu_entry_t e = grub_menu_get_entry (menu, current_entry);
if (e)
grub_menu_entry_run (e);
}
goto refresh;
default:
{
int entry;
entry = get_entry_index_by_hotkey (menu, c);
if (entry >= 0)
{
menu_fini ();
*auto_boot = 0;
return entry;
}
}
break;
}
}
}
/* Never reach here. */
}
ich hab keine ahnung von code und kann nur zwischen den zeilen lesen
aber ich glaube wenn ich den "break" hier entferne muesste der timeout weiterlaufen
Code: Alles auswählen
case GRUB_TERM_KEY_UP:
case GRUB_TERM_CTRL | 'p':
case '^':
if (current_entry > 0)
current_entry--;
menu_set_chosen_entry (current_entry);
break;
case GRUB_TERM_CTRL | 'n':
case GRUB_TERM_KEY_DOWN:
case 'v':
if (current_entry < menu->size - 1)
current_entry++;
menu_set_chosen_entry (current_entry);
break;
das heisst um es zu testen muesste ich grub selbst kompellieren und erneu installieren ?
mfg
Re: grub timeout ohne interrupt
Ja, das müsstest du. Wenn du das Quellcodepaket herunterlädst, kannst du dir aber auch recht einfach selbst das Paket mit dem geänderten Quellcode bauen (vermute bzw. hoffe ich zumindest).
Ich habe keinen Link parat, aber Anleitungen wie man Pakete mit eigenen Patches oder anderen Anpassungen baut sollten sich im Internet leicht finden lassen und wenn ich mich nicht irre auch hier im Forum. Ich hab auch schon einmal am Beispiel irgendeines Paketes beschrieben wie ich es gemacht habe - wenn ich es finde poste ich noch einen Link.
Ich habe keinen Link parat, aber Anleitungen wie man Pakete mit eigenen Patches oder anderen Anpassungen baut sollten sich im Internet leicht finden lassen und wenn ich mich nicht irre auch hier im Forum. Ich hab auch schon einmal am Beispiel irgendeines Paketes beschrieben wie ich es gemacht habe - wenn ich es finde poste ich noch einen Link.
Re: grub timeout ohne interrupt
Hi
gott sei dank gibt es ev einen anderen weg... grub2 zu kompilieren macht kein spass
soviele abhaengigkeiten..... und fehler ...
ich glaube du meintest viewtopic.php?f=27&t=164536 mit deinem thread bei ueber 5000 beitraegen ist die suchfunktion hier gold wert xD
also ich hab das erstmal nach deiner anleitung gemacht, allerdings muss man nach dem patchen noch ein ausfuehren
enden tut es nach deiner anleitung dann mit
die ganze ausgabe ist riesig und es hat auch ewig gedauert
danach habe ich folgende dateien im verzeichniss
auf dem tablet sind folge grub packtete installiert
welches muesste ich jetzt deinstallieren und dann per .deb installieren um den "patch" zu haben?
Danke
gott sei dank gibt es ev einen anderen weg... grub2 zu kompilieren macht kein spass
soviele abhaengigkeiten..... und fehler ...
ich glaube du meintest viewtopic.php?f=27&t=164536 mit deinem thread bei ueber 5000 beitraegen ist die suchfunktion hier gold wert xD
also ich hab das erstmal nach deiner anleitung gemacht, allerdings muss man nach dem patchen noch ein
Code: Alles auswählen
dpkg-source --commit
enden tut es nach deiner anleitung dann mit
Code: Alles auswählen
dpkg-deb: building package 'grub-coreboot-bin' in '../grub-coreboot-bin_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-coreboot-dbg' in '../grub-coreboot-dbg_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-coreboot' in '../grub-coreboot_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-efi-ia32-bin' in '../grub-efi-ia32-bin_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-efi-ia32-dbg' in '../grub-efi-ia32-dbg_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-efi-ia32' in '../grub-efi-ia32_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-efi-amd64-bin' in '../grub-efi-amd64-bin_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-efi-amd64-dbg' in '../grub-efi-amd64-dbg_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-efi-amd64' in '../grub-efi-amd64_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-ieee1275-bin' in '../grub-ieee1275-bin_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-ieee1275-dbg' in '../grub-ieee1275-dbg_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-ieee1275' in '../grub-ieee1275_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-firmware-qemu' in '../grub-firmware-qemu_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-xen-bin' in '../grub-xen-bin_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-xen-dbg' in '../grub-xen-dbg_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-xen' in '../grub-xen_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-xen-host' in '../grub-xen-host_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-theme-starfield' in '../grub-theme-starfield_2.02-2_amd64.deb'.
dpkg-deb: building package 'grub-mount-udeb' in 'debian/.debhelper/scratch-space/build-grub-mount-udeb/grub-mount-udeb_2.02-2_amd64.deb'.
Renaming grub-mount-udeb_2.02-2_amd64.deb to grub-mount-udeb_2.02-2_amd64.udeb
make[1]: Leaving directory '/home/penis/Downloads/grub2-2.02'
dpkg-genbuildinfo
dpkg-genchanges >../grub2_2.02-2_amd64.changes
dpkg-genchanges: info: not including original source code in upload
dpkg-source --after-build grub2-2.02
dpkg-buildpackage: info: binary and diff upload (original source NOT included)
root@debian:/home/penis/Downloads/grub2-2.02#
danach habe ich folgende dateien im verzeichniss
Code: Alles auswählen
grub2-2.02 grub-efi-ia32-dbg_2.02-2_amd64.deb
grub2_2.02-2_amd64.buildinfo grub-emu_2.02-2_amd64.deb
grub2_2.02-2_amd64.changes grub-emu-dbg_2.02-2_amd64.deb
grub2_2.02-2_amd64.deb grubentpacktausdsc
grub2_2.02-2.debian.tar.xz grub-firmware-qemu_2.02-2_amd64.deb
grub2_2.02-2.dsc grub-ieee1275_2.02-2_amd64.deb
grub2_2.02.orig.tar.xz grub-ieee1275-bin_2.02-2_amd64.deb
grub2-common_2.02-2_amd64.deb grub-ieee1275-dbg_2.02-2_amd64.deb
grub2-common-dbgsym_2.02-2_amd64.deb grub-linuxbios_2.02-2_amd64.deb
grub-common_2.02-2_amd64.deb grub-mount-udeb_2.02-2_amd64.udeb
grub-common-dbgsym_2.02-2_amd64.deb grub-pc_2.02-2_amd64.deb
grub-coreboot_2.02-2_amd64.deb grub-pc-bin_2.02-2_amd64.deb
grub-coreboot-bin_2.02-2_amd64.deb grub-pc-bin-dbgsym_2.02-2_amd64.deb
grub-coreboot-dbg_2.02-2_amd64.deb grub-pc-dbg_2.02-2_amd64.deb
grub-efi_2.02-2_amd64.deb grub-rescue-pc_2.02-2_amd64.deb
grub-efi-amd64_2.02-2_amd64.deb grub-theme-starfield_2.02-2_amd64.deb
grub-efi-amd64-bin_2.02-2_amd64.deb grub-xen_2.02-2_amd64.deb
grub-efi-amd64-dbg_2.02-2_amd64.deb grub-xen-bin_2.02-2_amd64.deb
grub-efi-ia32_2.02-2_amd64.deb grub-xen-dbg_2.02-2_amd64.deb
grub-efi-ia32-bin_2.02-2_amd64.deb grub-xen-host_2.02-2_amd64.deb
root@debian:
Code: Alles auswählen
ii grub-common 2.02-2 amd64 GRand Unified Bootloader (common files)
ii grub-efi-amd64 2.02-2 amd64 GRand Unified Bootloader, version 2 (EFI-AMD64 version)
ii grub-efi-amd64-bin 2.02-2 amd64 GRand Unified Bootloader, version 2 (EFI-AMD64 binaries)
ii grub-firmware-qemu 2.02-2 amd64 GRUB firmware image for QEMU
ii grub2-common 2.02-2 amd64 GRand Unified Bootloader (common files for version 2)
Danke
Re: grub timeout ohne interrupt
hi
auf der vm war es
also wird es auf dem tablet grub-efi-amd64 sein.
das packet konnte ich vorher nur mit entfernen
der patch ist allerdings kaese xD da werd ich wohl mal wegen den code fragen muessen, aber impakt hatte er also die vorgehensweise geht so ! super danke der code kommt bestimmt auch noch
auf der vm war es
Code: Alles auswählen
dpkg -i grub-pc_2.02-2_amd64.deb
das packet konnte ich vorher nur mit
Code: Alles auswählen
dpkg --force-depends --remove grub-pc
der patch ist allerdings kaese xD da werd ich wohl mal wegen den code fragen muessen, aber impakt hatte er also die vorgehensweise geht so ! super danke der code kommt bestimmt auch noch
Re: grub timeout ohne interrupt
Das entfernen wäre wohl nicht notwendig gewesen, du kannst einfach das eigene Paket installieren und damit das vorhandene ersetzen. Der bereits im MBR, Bootsektor oder auf der EFI System Partition installierte grub wird dann beim nächsten grub-install (das gegebenenfalls bereits beim Konfigurieren des Pakets aufgerufen wird) ersetzt.
Re: [gelost] grub timeout ohne interrupt
das hat etwas gedauert ...der timout zaehlt runter ich kann klicken wie ich will letzte position wird gestartet
also es geht jetzt vielen Dank. ich wette, ich wuerde ohne dich immer noch versuchen es normal zu kompilieren.
dennoch war es etwas buggy, mal gab es fehler, mal nicht... ohne aenderungen...einfach dran bleiben
So hier mal die schritte hab alles als root ausgefuehrt oft wird verlangt noch weitere pakete zu installieren mit anzeige welcher
als erstes die sources besorgen
oder lieber gleich die sources ueber apt beziehen
es gibt hier viele arten den startprozess zu lenken auch key remapping geht ich hab mich hierfuer entschieden...
der fallback koennte im ersten if drin bleiben aber fuer mich ist das thema abgeschlossen
also in zeile ca 660 default_entry--; und default_entry++; hinzufuegen klammern nicht vergessen und den timeout rausloeschen grub_env_unset ("timeout"); grub_env_unset ("fallback"); clear_timeout ();
der timeout wird eh bei ablauf auf unset und clear gesetzt weiter oben in der eigentlichen timeout funktion
als entfernen kann ich das empfehlen die version mit der eigenen abgleichen! und beide pakete muessen scheinbar getauscht werden
muss nicht sein
das ende
also es geht jetzt vielen Dank. ich wette, ich wuerde ohne dich immer noch versuchen es normal zu kompilieren.
dennoch war es etwas buggy, mal gab es fehler, mal nicht... ohne aenderungen...einfach dran bleiben
So hier mal die schritte hab alles als root ausgefuehrt oft wird verlangt noch weitere pakete zu installieren mit anzeige welcher
als erstes die sources besorgen
Code: Alles auswählen
auf der seite rechts
https://packages.debian.org/buster/grub2
und mit dpkg-source -x grub2_2.*.dsc entpacken
Code: Alles auswählen
nano /etc/apt/sources.list
deb http://ftp.de.debian.org/debian/ stable main contrib non-free
deb-src http://ftp.de.debian.org/debian/ stable main contrib non-free
deb http://security.debian.org/ stable/updates main contrib non-free
deb-src http://security.debian.org/ stable/updates main contrib non-free
apt-get update
apt-get source grub2
cd grub2-2.02~beta3/
nano grub-core/normal/menu.c
der fallback koennte im ersten if drin bleiben aber fuer mich ist das thema abgeschlossen
also in zeile ca 660 default_entry--; und default_entry++; hinzufuegen klammern nicht vergessen und den timeout rausloeschen grub_env_unset ("timeout"); grub_env_unset ("fallback"); clear_timeout ();
der timeout wird eh bei ablauf auf unset und clear gesetzt weiter oben in der eigentlichen timeout funktion
Code: Alles auswählen
if (timeout >= 0)
{
}
case GRUB_TERM_KEY_UP:
case GRUB_TERM_CTRL | 'p':
case '^':
if (current_entry > 0)
{
current_entry--;
default_entry--;
}
menu_set_chosen_entry (current_entry);
break;
case GRUB_TERM_CTRL | 'n':
case GRUB_TERM_KEY_DOWN:
case 'v':
if (current_entry < menu->size - 1)
{
current_entry++;
default_entry++;
}
menu_set_chosen_entry (current_entry);
break;
dpkg-source --commit
dpkg-buildpackage -uc -us
Code: Alles auswählen
dpkg --force-depends --remove grub-pc grub-pc-bin
cd ..
dpkg -i grub-pc_2.02~beta3-5_amd64.deb grub-pc-bin_2.02~beta3-5_amd64.deb
Code: Alles auswählen
nano /etc/default/grub
GRUB_DISABLE_SUBMENU=y
GRUB_DEFAULT=1
GRUB_TIMEOUT=9
Code: Alles auswählen
update-grub
reboot