diff options
Diffstat (limited to 'perl-install/Xconfig')
-rw-r--r-- | perl-install/Xconfig/card.pm | 11 | ||||
-rw-r--r-- | perl-install/Xconfig/monitor.pm | 44 |
2 files changed, 49 insertions, 6 deletions
diff --git a/perl-install/Xconfig/card.pm b/perl-install/Xconfig/card.pm index 3a5f9cd9b..652460a20 100644 --- a/perl-install/Xconfig/card.pm +++ b/perl-install/Xconfig/card.pm @@ -9,6 +9,7 @@ use common; use log; +my $lib = (arch() =~ /x86_64/) ? "lib64" : "lib"; my $force_xf4 = arch() =~ /ppc|ia64|x86_64/; @@ -117,7 +118,7 @@ sub to_raw_X { # This loads the NVIDIA GLX extension module. # IT IS IMPORTANT TO KEEP NAME AS FULL PATH TO libglx.so ELSE # IT WILL LOAD XFree86 glx module and the server will crash. - $raw_X->{xfree4}->set_load_module('/usr/X11R6/lib/modules/extensions/libglx.so', $card->{DRI_GLX_SPECIAL}); + $raw_X->{xfree4}->set_load_module("/usr/X11R6/$lib/modules/extensions/libglx.so", $card->{DRI_GLX_SPECIAL}); $raw_X->{xfree4}->remove_Section('DRI'); $raw_X->{xfree4}->add_Section('DRI', { Mode => { val => '0666' } }) if $card->{use_DRI_GLX}; @@ -352,15 +353,15 @@ sub install_server { #- make sure everything is correct at this point, packages have really been installed #- and driver and GLX extension is present. if ($card->{Driver2} eq 'nvidia' && - -e "$::prefix/usr/X11R6/lib/modules/drivers/nvidia_drv.o" && - -e "$::prefix/usr/X11R6/lib/modules/extensions/libglx.so") { + -e "$::prefix/usr/X11R6/$lib/modules/drivers/nvidia_drv.o" && + -e "$::prefix/usr/X11R6/$lib/modules/extensions/libglx.so") { log::l("Using specific NVIDIA driver and GLX extensions"); $card->{Driver} = 'nvidia'; $card->{DRI_GLX_SPECIAL} = 1; } if ($card->{Driver2} eq 'fglrx' && - -e "$::prefix/usr/X11R6/lib/modules/dri/fglrx_dri.so" && - -e "$::prefix/usr/X11R6/lib/modules/drivers/fglrx_drv.o") { + -e "$::prefix/usr/X11R6/$lib/modules/dri/fglrx_dri.so" && + -e "$::prefix/usr/X11R6/$lib/modules/drivers/fglrx_drv.o") { log::l("Using specific ATI fglrx and DRI drivers"); $card->{Driver} = 'fglrx'; } diff --git a/perl-install/Xconfig/monitor.pm b/perl-install/Xconfig/monitor.pm index 27475c0d1..eb6a7fc7e 100644 --- a/perl-install/Xconfig/monitor.pm +++ b/perl-install/Xconfig/monitor.pm @@ -156,8 +156,47 @@ sub configure_automatic { return $monitor->{HorizSync} && $monitor->{VertRefresh}; } +# Parse XFree86 log in case with got not valuable information from +# ddcxinfos. NOTE: this is only safe at install stage. +sub getinfoFromXFree() { + my $xf86log = "/var/log/XFree86.0.log"; + $::isInstall && -r $xf86log or return; + + my ($VideoRAM, $HorizSync, $VertRefresh, $VendorName, $EISA_ID, $size); + for (cat_($xf86log)) { + if (/(VideoRAM|Total Mem): (\d+) kB/) { + $VideoRAM = $2; + } + elsif (/hsync range of ([.\d]+-[.\d]+) kHz/) { + $HorizSync = $1; + } + elsif (/vrefresh range of ([.\d]+-[.\d]+) Hz/) { + $VertRefresh = $1; + } + elsif (/(Display dimensions|Image Size):\s+\(?(\d+)[,x\s]+(\d+)\)? mm/) { + my ($x, $y) = (($2+9)/10, ($3+9)/10); # round up + $size = sqrt($x*$x + $y*$y) / 2.54 * 1.08; + } + elsif (/Monitor name: (.+)/) { + $VendorName = $1; + } + elsif (/Manufacturer: (\w+)\s+Model: (\w+)/) { + $EISA_ID = "$1$2"; + } + } + + { + VideoRam_probed => $VideoRAM, + HorizSync => $HorizSync, + VertRefresh => $VertRefresh, + size => $size, + if_($EISA_ID, EISA_ID => lc($EISA_ID)), + VendorName => $VendorName || "Plug'n Play", + } +} + sub getinfoFromDDC() { - my ($VideoRam, @l) = any::ddcxinfos() or return; + my ($VideoRam, @l) = any::ddcxinfos() or return getinfoFromXFree(); my @Modes; local $_; @@ -168,6 +207,9 @@ sub getinfoFromDDC() { push @Modes, [ $x, $y, $depth ]; } + # last chance to get some useful information + return getinfoFromXFree() if ! @l; + my ($h, $v, $size, @_modes) = @l; { VideoRam_probed => to_int($VideoRam), |