summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Whitaker <mageia@martin-whitaker.me.uk>2017-07-24 23:07:38 +0100
committerMartin Whitaker <mageia@martin-whitaker.me.uk>2018-05-28 11:42:41 +0100
commit3931a427b2ef642725666429635c4ee7ae16d558 (patch)
tree62cb29b72e58e7b223204b2d22ea7f1490ac176b
parentc35e3401880b2f57d20862b533e341b9b7c32f18 (diff)
downloaddrakx-3931a427b2ef642725666429635c4ee7ae16d558.tar
drakx-3931a427b2ef642725666429635c4ee7ae16d558.tar.gz
drakx-3931a427b2ef642725666429635c4ee7ae16d558.tar.bz2
drakx-3931a427b2ef642725666429635c4ee7ae16d558.tar.xz
drakx-3931a427b2ef642725666429635c4ee7ae16d558.zip
Fix drakboot video mode selection when using grub2 (mga#21246)
The video mode needs to be extracted from and written back to the GRUB_CMDLINE_LINUX_DEFAULT parameter in /etc/defaults/grub2. This fix creates a new "default_vga" key in the $bootloader hash to hold the current selection. Using the existing "vga" key would cause the default video mode to be added to any bootloader entries that don't have a specific "vga" value, e.g. the "failsafe" entry. The $bootloader "vga" value doesn't appear to be set anywhere else, so may in fact be obsolete. (cherry picked from commit f70da6dee2087dbcb26e1ae6e00c5ea859c0c787)
-rw-r--r--perl-install/NEWS1
-rw-r--r--perl-install/any.pm4
-rw-r--r--perl-install/bootloader.pm15
3 files changed, 15 insertions, 5 deletions
diff --git a/perl-install/NEWS b/perl-install/NEWS
index ee930dccc..ae0f025f2 100644
--- a/perl-install/NEWS
+++ b/perl-install/NEWS
@@ -3,6 +3,7 @@
- bootloader:
o Combine bootloader perImageAppend and default_append keys
(mga#21263, mga#21250)
+ o Fix drakboot video mode selection when using grub2 (mga#21246)
- iwlwifi-agn-ucode is renamed to iwlwifi-firmware (mga#22316)
- update list of modules needing firmware
diff --git a/perl-install/any.pm b/perl-install/any.pm
index 376240aac..a82fce94a 100644
--- a/perl-install/any.pm
+++ b/perl-install/any.pm
@@ -632,7 +632,7 @@ sub setupBootloader__grub2 {
require Xconfig::resolution_and_depth;
require network::network; #- to list network profiles
- my $vga = Xconfig::resolution_and_depth::from_bios($b->{vga});
+ my $vga = Xconfig::resolution_and_depth::from_bios($b->{default_vga});
my $os_prober = $in->do_pkgs->is_installed('os-prober', '/usr/bin/os-prober');
my $res = $in->ask_from_(
@@ -660,7 +660,7 @@ sub setupBootloader__grub2 {
if ($res) {
$b->{entries} = $b2->{entries};
$b->{default} = $default;
- $b->{vga} = ref($vga) ? $vga->{bios} : $vga;
+ $b->{default_vga} = ref($vga) ? $vga->{bios} : $vga;
$b->{perImageAppend} = $append;
if ($os_prober) {
$in->do_pkgs->ensure_is_installed('os-prober', '/usr/bin/os-prober');
diff --git a/perl-install/bootloader.pm b/perl-install/bootloader.pm
index 6b2a6524a..c648378a8 100644
--- a/perl-install/bootloader.pm
+++ b/perl-install/bootloader.pm
@@ -278,6 +278,8 @@ sub read_ {
$bootloader->{default_options} = $default;
$bootloader->{perImageAppend} ||= $default->{append};
log::l("perImageAppend is now $bootloader->{perImageAppend}");
+ $bootloader->{default_vga} ||= $default->{vga};
+ log::l("default_vga is now $bootloader->{default_vga}");
} else {
$bootloader->{default_options} = {};
}
@@ -307,8 +309,10 @@ sub read_grub2() {
return if is_empty_hash_ref(\%bootloader) & !-s "$::prefix/boot/grub2/grub.cfg";
my %h = getVarsFromSh("$::prefix/etc/default/grub");
$bootloader{timeout} = $h{GRUB_TIMEOUT};
- # keep suggested perImageAppend on first run (during installer) or when migrating from grub-legacy or lilo:
- $bootloader{perImageAppend} ||= $h{GRUB_CMDLINE_LINUX_DEFAULT};
+ # keep suggested perImageAppend and default_vga on first run (during installer) or when migrating from grub-legacy or lilo:
+ my ($vga, $other) = partition { /^vga=/ } split(' ', $h{GRUB_CMDLINE_LINUX_DEFAULT});
+ $bootloader{perImageAppend} ||= join(' ', @$other) if @$other;
+ $bootloader{default_vga} ||= $vga->[0] =~ /vga=(.*)/ && $1 if @$vga;
$bootloader{entries} = [];
my $entry;
my $f = "$::prefix/boot/grub2/grub.cfg";
@@ -1229,6 +1233,7 @@ sub suggest {
method_choices($all_hds, 0)); # or best if no valid one is installed
$bootloader->{perImageAppend} = $bootloader->{entries}[0]{append};
+ $bootloader->{default_vga} = $options{vga_fb};
if (main_method($bootloader->{method}) eq 'grub') {
my %processed_entries = {};
@@ -1865,7 +1870,11 @@ sub write_grub2_sysconfig {
my $f = "$::prefix/etc/default/grub";
my %conf = getVarsFromSh($f);
- $conf{GRUB_CMDLINE_LINUX_DEFAULT} = $bootloader->{perImageAppend} || get_grub2_append($bootloader);
+ my $append = $bootloader->{perImageAppend} || get_grub2_append($bootloader);
+ my $vga = $bootloader->{default_vga};
+ $append .= " vga=$vga" if $append !~ /vga=/ && $vga && $vga ne "normal";
+
+ $conf{GRUB_CMDLINE_LINUX_DEFAULT} = $append;
$conf{GRUB_GFXPAYLOAD_LINUX} = 'auto' if is_uefi();
$conf{GRUB_DISABLE_RECOVERY} = 'false'; # for 'failsafe' entry
$conf{GRUB_DEFAULT} //= 'saved'; # for default entry but do not overwrite user choice