summaryrefslogtreecommitdiffstats
path: root/perl-install/Xconfig/monitor.pm
blob: c46e5e25af3a652d54fa502c85b48d0e6419df82 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
package Xconfig::monitor; #- $Id$

use diagnostics;
use strict;

use detect_devices;
use common;
use any;
use log;


sub good_default_monitor {
    arch() =~ /ppc/ ? 
      (detect_devices::get_mac_model() =~ /^iBook/ ? 'Apple|iBook 800x600' : 'Apple|iMac/PowerBook 1024x768') :
      (detect_devices::isLaptop() ? 'Generic|Flat Panel 1024x768' : 'Generic|1024x768 @ 70 Hz');
}

my @VertRefresh_ranges = ("50-70", "50-90", "50-100", "40-150");

my @HorizSync_ranges = (
	"31.5",
	"31.5-35.1",
	"31.5-37.9",
	"31.5-48.5",
	"31.5-57.0",
	"31.5-64.3",
	"31.5-79.0",
	"31.5-82.0",
	"31.5-88.0",
	"31.5-94.0",
);


sub from_raw_X {
    my ($raw_X) = @_;

    my $monitor = $raw_X->get_monitor;
    if (!$monitor->{HorizSync}) {
	put_in_hash($monitor, getinfoFromDDC());
    }
    $monitor;
}

sub configure {
    my ($in, $raw_X, $auto) = @_;

    my $monitor = from_raw_X($raw_X);
    choose($in, $monitor, $auto) or return;
    $raw_X->set_monitors($monitor);
    $monitor;
}

sub configure_auto_install {
    my ($raw_X, $old_X) = @_;

    my $old_monitor = $old_X->{monitor} || {};
    $old_monitor->{VertRefresh} ||= $old_monitor->{vsyncrange};
    $old_monitor->{HorizSync} ||= $old_monitor->{hsyncrange};

    my $monitor = from_raw_X($raw_X);
    put_in_hash($monitor, $old_monitor);

    my $monitors = monitors();
    configure_automatic($monitor, $monitors) or put_in_hash($monitor, { HorizSync => '31.5-35.1', VertRefresh => '50-61' });
    $raw_X->set_monitors($monitor);
    $monitor;
}

sub choose {
    my ($in, $monitor, $auto) = @_;

    my $monitors = monitors();

    my $ok = configure_automatic($monitor, $monitors);
    return $ok if $auto;

    my %h_monitors = map {; "$_->{VendorName}|$_->{ModelName}" => $_ } @$monitors;

  ask_monitor:
    my $merged_name = do {
	if ($monitor->{VendorName} eq "Plug'n Play") {
	    $monitor->{VendorName};
	} else {
	    my $merged_name = $monitor->{VendorName} . '|' . $monitor->{ModelName};

	    if (!exists $h_monitors{$merged_name}) {
		$merged_name = $monitor->{HorizSync} ? 'Custom' : good_default_monitor();
	    } else {
		$merged_name;
	    }
	}
    };

    $in->ask_from(N("Monitor"), N("Choose a monitor"), 
		  [ { val => \$merged_name, separator => '|', 
		      list => ['Custom', "Plug'n Play", sort keys %h_monitors],
		      format => sub { $_[0] eq 'Custom' ? N("Custom") : 
				      $_[0] eq "Plug'n Play" ? N("Plug'n Play") . " ($monitor->{ModelName})" :
				      $_[0] =~ /^Generic\|(.*)/ ? N("Generic") . "|$1" :  
				      N("Vendor") . "|$_[0]" },
		      sort => 0 } ]) or return;

    if ($merged_name eq "Plug'n Play") {
	local $::noauto = 0; #- hey, you asked for plug'n play, so i do probe!
	put_in_hash($monitor, getinfoFromDDC());
	if (configure_automatic($monitor, $monitors)) {
	    $monitor->{VendorName} = "Plug'n Play";
	} else {
	    delete $monitor->{VendorName};
	    $in->ask_warn('', N("Plug'n Play probing failed. Please select the correct monitor"));
	    goto ask_monitor;
	}
    } elsif ($merged_name eq 'Custom') {
	$in->ask_from('',
N("The two critical parameters are the vertical refresh rate, which is the rate
at which the whole screen is refreshed, and most importantly the horizontal
sync rate, which is the rate at which scanlines are displayed.

It is VERY IMPORTANT that you do not specify a monitor type with a sync range
that is beyond the capabilities of your monitor: you may damage your monitor.
 If in doubt, choose a conservative setting."),
		      [ { val => \$monitor->{HorizSync}, list => \@HorizSync_ranges, label => N("Horizontal refresh rate"), not_edit => 0 },
			{ val => \$monitor->{VertRefresh}, list => \@VertRefresh_ranges, label => N("Vertical refresh rate"), not_edit => 0 } ]) or goto &choose;
	delete @$monitor{'VendorName', 'ModelName', 'EISA_ID'};
    } else {
	put_in_hash($monitor, $h_monitors{$merged_name});
    }
    $monitor->{manually_chosen} = 1;
    1;
}

sub configure_automatic {
    my ($monitor, $monitors) = @_;

    if ($monitor->{EISA_ID}) {
	log::l("EISA_ID: $monitor->{EISA_ID}");
	if (my $mon = find { lc($_->{EISA_ID}) eq $monitor->{EISA_ID} } @$monitors) {
	    add2hash($monitor, $mon);
	    log::l("EISA_ID corresponds to: $monitor->{ModelName}");
	} elsif (!$monitor->{HorizSync} || !$monitor->{VertRefresh}) {
	    log::l("unknown EISA_ID and partial DDC probe, so unknown monitor");
	    delete @$monitor{'VendorName', 'ModelName', 'EISA_ID'};	    
	}
    } else {
	if (my $mon = find { $_->{VendorName} eq $monitor->{VendorName} && $_->{ModelName} eq $monitor->{ModelName} } @$monitors) {
	    put_in_hash($monitor, $mon);
	}
    }

    return $monitor->{HorizSync} && $monitor->{VertRefresh};
}

sub getinfoFromDDC {
    my ($VideoRam, @l) = any::ddcxinfos() or return;

    my @Modes;
    local $_;
    while (($_ = shift @l) ne "\n") {
	my ($depth, $x, $y) = split;
	$depth = int(log($depth) / log(2));
	
	push @Modes, [ $x, $y, $depth ];
    }

    my ($h, $v, $size, @_modes) = @l;
    { 
        VideoRam_probed => to_int($VideoRam),
        HorizSync => first($h =~ /^(\S*)/), 
        VertRefresh => first($v =~ /^(\S*)/),
        size => to_float($size),
        if_($size =~ /EISA ID=(\S*)/, EISA_ID => lc($1), VendorName => "Plug'n Play"),
	#- not-used-anymore Modes => \@Modes,
        #- not-used-anymore ModeLines => join('', @m),
    };
}

sub monitors {
    readMonitorsDB("$ENV{SHARE_PATH}/ldetect-lst/MonitorsDB");
}
sub readMonitorsDB {
    my ($file) = @_;

    my @monitors;
    my $F = openFileMaybeCompressed($file);
    local $_;
    my $lineno = 0; while (<$F>) {
	$lineno++;
	s/\s+$//;
	/^#/ and next;
	/^$/ and next;

	my @fields = qw(VendorName ModelName EISA_ID HorizSync VertRefresh dpms);
	my %l; @l{@fields} = split /\s*;\s*/;
	push @monitors, \%l;
    }
    \@monitors;
}


1;

n class="hl kwa">msgstr "Beregnet nedlastingsdata: %s" #: ../mgaapplet:514 #, c-format msgid "You should close all other running applications before continuing." msgstr "Du bør lukke alle andre program som kjører før du fortsetter." #: ../mgaapplet:517 #, c-format msgid "" "You should put your laptop on AC and favor ethernet connection over wifi, if " "available." msgstr "" "Du bør koble den bærbare maskinen til strømuttaket, og om mulig bruke " "kabeltilkobling i stedet for trådløs." #: ../mgaapplet:551 #, c-format msgid "Launching MageiaUpdate\n" msgstr "Kjører MageiaUpdate\n" #: ../mgaapplet:569 #, c-format msgid "Computing new updates...\n" msgstr "Gransker nye oppdateringer …\n" #: ../mgaapplet:607 #, c-format msgid "Checking Network: seems disabled\n" msgstr "Kontrollerer nettverk: ser ut til å være slått av\n" #: ../mgaapplet:634 #, c-format msgid "Mageia Online %s" msgstr "Mageia Online %s" #: ../mgaapplet:635 ../mgaapplet:636 #, c-format msgid "Copyright (C) %s by %s" msgstr "Copyright © %s %s" #: ../mgaapplet:639 #, c-format msgid "Mageia Online gives access to Mageia web services." msgstr "Mageia Online gir deg tilgang til vevtjenestene til Mageia." #: ../mgaapplet:641 #, c-format msgid "Online WebSite" msgstr "Hjemmeside" #. -PO: put here name(s) and email(s) of translator(s) (eg: "John Smith <jsmith@nowhere.com>") #: ../mgaapplet:645 #, c-format msgid "_: Translator(s) name(s) & email(s)\n" msgstr "Olav Dahlum <odahlum@gmail.com>\n" #: ../mgaapplet:674 #, c-format msgid "Warning" msgstr "Advarsel" #: ../mgaapplet:677 ../mgaapplet:682 ../mgaapplet_gui.pm:227 #, c-format msgid "More Information" msgstr "Mer informasjon" #: ../mgaapplet:690 #, c-format msgid "Add media" msgstr "Legg til medium" #: ../mgaapplet:709 #, c-format msgid "About..." msgstr "Om …" #: ../mgaapplet:711 ../mgaapplet-config:64 #, c-format msgid "Updates Configuration" msgstr "Oppdateringsoppsett" #: ../mgaapplet:713 #, c-format msgid "Always launch on startup" msgstr "Kjør ved oppstart" #: ../mgaapplet:715 #, c-format msgid "Quit" msgstr "Avslutt" #: ../mgaapplet-config:43 #, c-format msgid "Adding an additional package medium" msgstr "Legger til nytt pakkemedium" #: ../mgaapplet-config:65 #, c-format msgid "Here you can configure the updates applet" msgstr "Her kan du sette opp oppdateringsprogrammet" #: ../mgaapplet-config:67 #, c-format msgid "Update frequency (hours)" msgstr "Oppdateringsfrekvens (timer)" #: ../mgaapplet-config:75 #, c-format msgid "First check delay (minutes)" msgstr "Pause før første sjekk (minutt)" #: ../mgaapplet-config:83 #, c-format msgid "Check for newer Mageia releases" msgstr "" #: ../mgaapplet-upgrade-helper:86 #, c-format msgid "" "Your system does not have enough space left in %s for upgrade (%dMB < %dMB)" msgstr "" "Systemet ditt har ikke nok ledig plass igjen på «%s» for en oppgradering (%d " "MB < %d MB)" #: ../mgaapplet-upgrade-helper:141 ../mgaapplet-upgrade-helper:225 #: ../mgaapplet-upgrade-helper:284 #, c-format msgid "Installation failed" msgstr "Feil ved installering" #: ../mgaapplet-upgrade-helper:142 #, c-format msgid "Installation logs can be found in '%s'" msgstr "Du finner installasjonslogger i «%s»" #: ../mgaapplet-upgrade-helper:143 #, c-format msgid "Retry" msgstr "Prøv på nytt" #: ../mgaapplet-upgrade-helper:152 #, c-format msgid "Congratulations" msgstr "Gratulerer" #: ../mgaapplet-upgrade-helper:156 #, c-format msgid "Upgrade to Mageia %s release was successful." msgstr "Oppgraderinga til Mageia %s er nå fullført." #: ../mgaapplet-upgrade-helper:158 #, c-format msgid "You must restart your system." msgstr "Du må starte maskina på nytt." #: ../mgaapplet-upgrade-helper:159 #, c-format msgid "Reboot" msgstr "Start på nytt" #: ../mgaapplet-upgrade-helper:170 #, c-format msgid "Unable to download distro list" msgstr "" #: ../mgaapplet-upgrade-helper:176 #, c-format msgid "Distribution version %s was not found in the update list" msgstr "" #: ../mgaapplet-upgrade-helper:185 #, c-format msgid "Preparation Required" msgstr "" #: ../mgaapplet-upgrade-helper:185 #, c-format msgid "" "In order to upgrade, your current installation needs to be prepared.\n" "\n" "Do you wish to do this preparation now?" msgstr "" #: ../mgaapplet-upgrade-helper:196 #, c-format msgid "" "Further action is required before you can continue.\n" "\n" "Please see %s for more information." msgstr "" #: ../mgaapplet-upgrade-helper:197 #, c-format msgid "Next Steps" msgstr "" #: ../mgaapplet-upgrade-helper:227 #, c-format msgid "" "Packages database is locked. Please close other applications\n" "working with packages database (do you have another media\n" "manager on another desktop, or are you currently installing\n" "packages as well?)." msgstr "" "Pakkedatabasen er låst. Lukk andre programmer\n" "som bruker pakkedatabasen (har du en annen mediumshåndterer\n" "på et annet skrivebord, eller installeres pakker\n" "samtidig?)." #: ../mgaapplet-upgrade-helper:285 #, c-format msgid "Failure when adding medium" msgstr "Feil under forsøk på å legge til medium" #: ../mgaapplet.pm:18 #, c-format msgid "Error updating media" msgstr "Feil ved oppdatering av media" #: ../mgaapplet_gui.pm:176 #, c-format msgid "More information on your user account" msgstr "Mer informasjon om brukerkontoen din" #: ../mgaapplet_gui.pm:183 #, c-format msgid "Your email" msgstr "E-postadresse" #: ../mgaapplet_gui.pm:184 #, c-format msgid "Your password" msgstr "Passord" #: ../mgaapplet_gui.pm:191 #, c-format msgid "Forgotten password" msgstr "Glemt passord" #: ../mgaapplet_gui.pm:208 #, c-format msgid "Password and email cannot be empty." msgstr "Passord- og e-postfeltet kan ikke være tomt." #: ../mgaapplet_gui.pm:230 #, c-format msgid "Close" msgstr "Lukk" #: ../mgaonline.pm:147 #, c-format msgid "Distribution Upgrade" msgstr "Distribusjonsoppgradering" #: ../mgaupdate:60 #, c-format msgid "" "mgaupdate version %s\n" "%s\n" "This is free software and may be redistributed under the terms of the GNU " "GPL.\n" "\n" "usage:\n" msgstr "" "mgaupdate versjon %s\n" "%s\n" "Dette er fri programvare og kan redistribueres under vilkårene til GNU GPL.\n" "\n" "bruk:\n" #: ../mgaupdate:66 #, c-format msgid "Copyright (C) %s %s" msgstr "" #: ../mgaupdate:66 #, c-format msgid " --help\t\t- print this help message.\n" msgstr " --help\t\t– vis denne hjelpeteksten.\n" #: ../mgaupdate:67 #, c-format msgid " --auto\t\t- Mageia Update launched automatically.\n" msgstr " --auto\t\t– Mageia Update kjørt automatisk.\n" #: ../mgaupdate:68 #, c-format msgid " --mnf\t\t\t- launch mnf specific scripts.\n" msgstr " --mnf\t\t\t– Kjør mnf-spesifike skript.\n" #: ../mgaupdate:69 #, c-format msgid " --noX\t\t\t- text mode version of Mageia Update.\n" msgstr " --noX\t\t\t– tekstversjon av Mageia Update.\n" #: ../mgaupdate:70 #, c-format msgid " --debug\t\t- log what is done.\n" msgstr "" #: ../mgaupdate:100 #, c-format msgid "Unable to update packages from update_source medium.\n" msgstr "Klarte ikke oppdatere pakker fra oppdateringsmedium.\n" #: ../polkit/org.mageia.mgaapplet-config.policy.in.h:1 msgid "Run Mageia Update Applet Configuration" msgstr "" #: ../polkit/org.mageia.mgaapplet-config.policy.in.h:2 msgid "Authentication is required to run Mageia Update Applet Configuration" msgstr "" #: ../polkit/org.mageia.mgaapplet-upgrade-helper.policy.in.h:1 msgid "Run Mageia Upgrade Helper" msgstr "" #: ../polkit/org.mageia.mgaapplet-upgrade-helper.policy.in.h:2 msgid "Authentication is required to run Mageia Upgrade Helper" msgstr "" #: ../polkit/org.mageia.mgaupdate.policy.in.h:1 msgid "Run Mageia Updater" msgstr "" #: ../polkit/org.mageia.mgaupdate.policy.in.h:2 msgid "Authentication as user is required to run Mageia Updater" msgstr "" #: ../polkit/org.mageia.urpmi.update.policy.in.h:1 msgid "Run Mageia Package Media Updater" msgstr "" #: ../polkit/org.mageia.urpmi.update.policy.in.h:2 msgid "Authentication is required to run Mageia Package Media Updater" msgstr ""