summaryrefslogtreecommitdiffstats
path: root/perl-install/Xconfig
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/Xconfig')
-rw-r--r--perl-install/Xconfig/card.pm11
-rw-r--r--perl-install/Xconfig/monitor.pm44
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),