summaryrefslogtreecommitdiffstats
path: root/perl-install/Xconfigurator.pm
blob: 7f9456216161f914840fa9c130cf9ecf2ac766f8 (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
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
package Xconfigurator;

use diagnostics;
use strict;
use vars qw($in $install $isLaptop @window_managers @depths @monitorSize2resolution @hsyncranges %min_hsync4wres @vsyncranges %depths @resolutions %serversdriver @svgaservers @accelservers @allbutfbservers @allservers %vgamodes %videomemory @ramdac_name @ramdac_id @clockchip_name @clockchip_id %keymap_translate %standard_monitors $XF86firstchunk_text $XF86firstchunk_text2 $keyboardsection_start $keyboardsection_start_v4 $keyboardsection_part2 $keyboardsection_part3 $keyboardsection_part3_v4 $keyboardsection_end $pointersection_text $pointersection_text_v4 $monitorsection_text1 $monitorsection_text2 $monitorsection_text3 $monitorsection_text4 $modelines_text_Trident_TG_96xx $modelines_text $devicesection_text $devicesection_text_v4 $screensection_text1 %lines @options %xkb_options $default_monitor $layoutsection_v4);

use common qw(:common :file :functional :system);
use log;
use detect_devices;
use run_program;
use Xconfigurator_consts;
use any;
use modules;
use my_gtk qw(:wrappers);

my $tmpconfig = "/tmp/Xconfig";

my ($prefix, %monitors);

1;

sub getVGAMode($) { $_[0]->{card}{vga_mode} || $vgamodes{"640x480x16"}; }

sub readCardsDB {
    my ($file) = @_;
    my ($card, %cards);

    local *F;
    open F, $file or die "file $file not found";

    my ($lineno, $cmd, $val) = 0;
    my $fs = {
        LINE => sub { push @{$card->{lines}}, $val unless $val eq "VideoRam" },
	NAME => sub {
	    $cards{$card->{type}} = $card if $card;
	    $card = { type => $val };
	},
	SEE => sub {
	    my $c = $cards{$val} or die "Error in database, invalid reference $val at line $lineno";

	    push @{$card->{lines}}, @{$c->{lines} || []};
	    add2hash($card->{flags}, $c->{flags});
	    add2hash($card, $c);
	},
	CHIPSET => sub {
	    $card->{chipset} = $val;
	    $card->{flags}{needChipset} = 1 if $val eq 'GeForce DDR';
	    $card->{flags}{needVideoRam} = 1 if member($val, qw(mgag10 mgag200 RIVA128 SiS6326));
	},
	SERVER => sub { $card->{server} = $val; },
	DRIVER => sub { $card->{driver} = $val; },
	RAMDAC => sub { $card->{ramdac} = $val; },
	DACSPEED => sub { $card->{dacspeed} = $val; },
	CLOCKCHIP => sub { $card->{clockchip} = $val; $card->{flags}{noclockprobe} = 1; },
	NOCLOCKPROBE => sub { $card->{flags}{noclockprobe} = 1 },
	UNSUPPORTED => sub { $card->{flags}{unsupported} = 1 },
	COMMENT => sub {},
    };

    foreach (<F>) { $lineno++;
	s/\s+$//;
	/^#/ and next;
	/^$/ and next;
	/^END/ and last;

	($cmd, $val) = /(\S+)\s*(.*)/ or next; #log::l("bad line $lineno ($_)"), next;

	my $f = $fs->{$cmd};

	$f ? &$f() : log::l("unknown line $lineno ($_)");
    }
    \%cards;
}
sub readCardsNames {
    my $file = "/usr/X11R6/lib/X11/CardsNames";
    local *F; open F, $file or die "can't find $file\n";
    map { (split '=>')[0] } <F>;
}
sub cardName2RealName {
    my $file = "/usr/X11R6/lib/X11/CardsNames";
    my ($name) = @_;
    local *F; open F, $file or die "can't find $file\n";
    foreach (<F>) { chop;
	my ($name_, $real) = split '=>';
	return $real if $name eq $name_;
    }
    $name;
}
sub updateCardAccordingName {
    my ($card, $name) = @_;
    my $cards = readCardsDB("/usr/X11R6/lib/X11/Cards+");

    add2hash($card->{flags}, $cards->{$name}{flags});
    add2hash($card, $cards->{$name});
    $card;
}

sub readMonitorsDB {
    my ($file) = @_;

    %monitors and return;

    local *F;
    open F, $file or die "can't open monitors database ($file): $!";
    my $lineno = 0; foreach (<F>) {
	$lineno++;
	s/\s+$//;
	/^#/ and next;
	/^$/ and next;

	my @fields = qw(vendor type eisa hsyncrange vsyncrange);
	my @l = split /\s*;\s*/;
	@l == @fields or log::l("bad line $lineno ($_)"), next;

	my %l; @l{@fields} = @l;
	if ($monitors{$l{type}}) {
	    my $i; for ($i = 0; $monitors{"$l{type} ($i)"}; $i++) {}
	    $l{type} = "$l{type} ($i)";
	}
	$monitors{"$l{vendor}|$l{type}"} = \%l;
    }
    while (my ($k, $v) = each %standard_monitors) {
	$monitors{_("Generic") . "|" . translate($k)} =
	    { hsyncrange => $v->[1], vsyncrange => $v->[2] };
    }
}

sub rewriteInittab {
    my ($runlevel) = @_;
    my $f = "$prefix/etc/inittab";
    -r $f or log::l("missing inittab!!!"), return;
    substInFile { s/^(id:)[35](:initdefault:)\s*$/$1$runlevel$2\n/ } $f;
}

sub keepOnlyLegalModes {
    my ($card, $monitor) = @_;
    my $mem = 1024 * ($card->{memory} || ($card->{server} eq 'FBDev' ? 2048 : 99999));
    my $hsync = max(split(/[,-]/, $monitor->{hsyncrange}));

    while (my ($depth, $res) = each %{$card->{depth}}) {
	@$res = grep {
	    $mem >= product(@$_, $depth / 8) &&
	    $hsync >= ($min_hsync4wres{$_->[0]} || 0) &&
	    ($card->{server} ne 'FBDev' || $vgamodes{"$_->[0]x$_->[1]x$depth"})
	} @$res;
	delete $card->{depth}{$depth} if @$res == 0;
    }
}

sub cardConfigurationAuto() {
    my $card;
    if (my ($c) = grep { $_->{driver} =~ /(Card|Server):/ } detect_devices::probeall()) {
	local $_ = $c->{driver};
	$card->{type} = $1 if /Card:(.*)/;
	$card->{server} = $1 if /Server:(.*)/;
	$card->{flags}{needVideoRam} &&= /86c368/;
	$card->{identifier} = $c->{description};
	push @{$card->{lines}}, @{$lines{$card->{identifier}} || []};
    }
    #- take a default on sparc if nothing has been found.
    if (arch() =~ /^sparc/ && !$card->{server} && !$card->{type}) {
        log::l("Using probe with /proc/fb as nothing has been found!");
	local $_ = cat_("/proc/fb");
	if (/Mach64/) { $card->{server} = "Mach64" }
	elsif (/Permedia2/) { $card->{server} = "3DLabs" }
	else { $card->{server} = "Sun24" }
    }
    $card;
}

sub cardConfiguration(;$$$) {
    my ($card, $noauto, $allowFB) = @_;
    $card ||= {};

    updateCardAccordingName($card, $card->{type}) if $card->{type}; #- try to get info from given type
    undef $card->{type} unless $card->{server}; #- bad type as we can't find the server
    add2hash($card, cardConfigurationAuto()) unless $card->{server} || $noauto;
    $card->{server} = 'FBDev' unless !$allowFB || $card->{server} || $card->{type} || $noauto;
    $card->{type} = cardName2RealName($in->ask_from_treelist(_("Graphic card"), _("Select a graphic card"), '|', ['Unlisted', readCardsNames()])) unless $card->{type} || $card->{server};
    undef $card->{type}, $card->{server} = $in->ask_from_list(_("X server"), _("Choose a X server"), $allowFB ? \@allservers : \@allbutfbservers ) if $card->{type} eq "Unlisted";

    updateCardAccordingName($card, $card->{type}) if $card->{type};
    add2hash($card, { vendor => "Unknown", board => "Unknown" });

    #- 3D acceleration configuration for XFree 3.3 using Utah-GLX.
    $card->{Utah_glx} = ($card->{identifier} =~ /MGA G[24]00/ ||
			 $card->{identifier} =~ /3D Rage Pro AGP/ || #- by default only such card are supported, with AGP ?
			 $card->{type} =~ /RIVA TNT/ ||
			 #- $card->{type} =~ /SiS / || #- EXPERIMENTAL
			 #- $card->{type} =~ /S3 ViRGE/ || #- EXPERIMENTAL
			 $card->{type} =~ /Intel 810/);
    #- 3D acceleration configuration for XFree 4.0 using DRI.
    $card->{DRI_glx} = ($card->{type} =~ /Voodoo3 / || $card->{type} =~ /Voodoo Banshee / ||
			$card->{identified} =~ /MGA G[24]00/ ||
			$card->{type} =~ /Intel 810/ ||
			$card->{type} =~ /ATI Rage 128/);

    #- check to use XFree 4.0 or XFree 3.3.
    !$::force_xf3 && $card->{driver} && !$card->{flags}{unsupported} or $card->{driver} = ''; #- disable XFree 4.0

    #- ask the expert user if he want 3D acceleration.
    if ($::expert && ($card->{Utah_glx} || $card->{DRI_glx})) {
	$in->ask_yesorno('', _("Do you want support for hardware 3D acceleration?", 1)) or
	  $card->{Utah_glx} = $card->{DRI_glx} = ''; #- disable all 3D acceleration
    }

    #- try to figure if 3D acceleration is supported
    #- by XFree 3.3 but not XFree 4.0 then ask user to keep XFree 3.3 ?
    if ($card->{driver} && $card->{Utah_glx} && !$card->{DRI_glx}) {
	$::beginner || $in->ask_yesorno('',
					_("Your card can have 3D acceleration but only with XFree 3.3.
Do You want to use XFree 3.3 instead of XFree 4.0?"), 1) and $card->{driver} = '';
    }

    $card->{prog} = "/usr/X11R6/bin/" . ($card->{driver} ? 'XFree86' : $card->{server} =~ /Sun (.*)/x ?
					 "Xsun$1" : "XF86_$card->{server}");

    -x "$prefix$card->{prog}" or $install && do {
	$in->suspend if ref($in) =~ /newt/;
	&$install($card->{server}, $card->{Utah_glx} ? 'Mesa' : ()) if !$card->{driver};
	&$install('server') if $card->{driver}; #- add XFree86-libs-DRI here if using DRI (future split of XFree86 TODO)
	$in->resume if ref($in) =~ /newt/;
    };
    -x "$prefix$card->{prog}" or die "server $card->{server} is not available (should be in $prefix$card->{prog})";

    unless ($card->{type}) {
	$card->{flags}{noclockprobe} = member($card->{server}, qw(I128 S3 S3V Mach64));
    }
    $card->{options_xf3}{power_saver} = 1;
    $card->{options_xf4}{DPMS} = 1;

    $card->{flags}{needVideoRam} and
      $card->{memory} ||=
	$videomemory{$in->ask_from_list_('',
					 _("Select the memory size of your graphic card"),
					 [ sort { $videomemory{$a} <=> $videomemory{$b} }
					   keys %videomemory])};


    #- hack for ATI Mach64 card where two options should be used if using Utah-GLX.
    if ($card->{type} =~ /ATI Mach64/) {
	$card->{options}{no_font_cache} = $card->{Utah_glx};
	$card->{options}{no_pixmap_cache} = $card->{Utah_glx};
    }

    #- 3D acceleration configuration for XFree 4.0 using DRI, this is enabled by default
    #- but for some there is a need to specify VideoRam (else it won't run).
    if ($card->{DRI_glx}) {
	($card->{flags}{needVideoRam}, $card->{memory}) = ('fakeVideoRam', 32768) if $card->{identifier} =~ /MGA G[24]00/;
	($card->{flags}{needVideoRam}, $card->{memory}) = ('fakeVideoRam', 10000) if $card->{type} =~ /Intel 810/;
    }

    if (!$::isStandalone && $card->{driver} eq "i810") {
	require modules;
	modules::load("agpgart"); eval { modules::load("i810"); };
    }
    $card;
}

sub optionsConfiguration($) {
    my ($o) = @_;
    my @l;
    my %l;

    foreach (@options) {
	if ($o->{card}{server} eq $_->[1] && $o->{card}{identifier} =~ /$_->[2]/) {
	    $o->{card}{options}{$_->[0]} ||= 0;
	    unless ($l{$_->[0]}) {
		push @l, $_->[0], { val => \$o->{card}{options}{$_->[0]}, type => 'bool' };
		$l{$_->[0]} = 1;
	    }
	}
    }
    @l = @l[0..19] if @l > 19; #- reduce list size to 10 for display (it's a hash).

    $in->ask_from_entries_refH('', _("Choose options for server"), \@l);
}

sub monitorConfiguration(;$$) {
    my $monitor = shift || {};
    my $useFB = shift || 0;

    $monitor->{hsyncrange} && $monitor->{vsyncrange} and return $monitor;

    readMonitorsDB("/usr/X11R6/lib/X11/MonitorsDB");

    add2hash($monitor, { type => $in->ask_from_treelist(_("Monitor"), _("Choose a monitor"), '|', ['Unlisted', keys %monitors], _("Generic") . '|' . translate($default_monitor)) }) unless $monitor->{type};
    if ($monitor->{type} eq 'Unlisted') {
	$in->ask_from_entries_ref('',
_("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."),
				  [ _("Horizontal refresh rate"), _("Vertical refresh rate") ],
				  [ { val => \$monitor->{hsyncrange}, list => \@hsyncranges },
				    { val => \$monitor->{vsyncrange}, list => \@vsyncranges }, ]);
    } else {
	add2hash($monitor, $monitors{$monitor->{type}});
    }
    add2hash($monitor, { type => "Unknown", vendor => "Unknown", model => "Unknown", manual => 1 });
}

sub testConfig($) {
    my ($o) = @_;
    my ($resolutions, $clocklines);

    write_XF86Config($o, $tmpconfig);

    unlink "/tmp/.X9-lock";
    #- restart_xfs;

    my $f = $tmpconfig . ($o->{card}{driver} && "-4");
    local *F;
    open F, "$prefix$o->{card}{prog} :9 -probeonly -pn -xf86config $f 2>&1 |";
    foreach (<F>) {
	$o->{card}{memory} ||= $2 if /(videoram|Video RAM):\s*(\d*)/;

	# look for clocks
	push @$clocklines, $1 if /clocks: (.*)/ && !/(pixel |num)clocks:/;

	push @$resolutions, [ $1, $2 ] if /: Mode "(\d+)x(\d+)": mode clock/;
	print;
    }
    close F or die "X probeonly failed";

    ($resolutions, $clocklines);
}

sub testFinalConfig($;$$) {
    my ($o, $auto, $skiptest) = @_;

    $o->{monitor}{hsyncrange} && $o->{monitor}{vsyncrange} or
      $in->ask_warn('', _("Monitor not configured")), return;

    $o->{card}{server} or
      $in->ask_warn('', _("Graphic card not configured yet")), return;

    $o->{card}{depth} or
      $in->ask_warn('', _("Resolutions not chosen yet")), return;

    my $f = "/etc/X11/XF86Config.test";
    write_XF86Config($o, $::testing ? $tmpconfig : "$prefix/$f");

    $skiptest || $o->{card}{server} =~ 'FBDev|Sun' and return 1; #- avoid testing with these.

    #- needed for bad cards not restoring cleanly framebuffer
    my $bad_card = $o->{card}{identifier} =~ /i740|ViRGE/;
    $bad_card ||= $o->{card}{identifier} eq "ATI|3D Rage P/M Mobility AGP 2x";
    $bad_card ||= $o->{card}{driver}; #- TODO obsoleted to check, when using fbdev of XFree 4.0!
    log::l("the graphic card does not like X in framebuffer") if $bad_card;

    my $mesg = _("Do you want to test the configuration?");
    my $def = 1;
    if ($bad_card && !$::isStandalone) {
	!$::expert || $auto and return 1;
	$mesg = $mesg . "\n" . _("Warning: testing is dangerous on this graphic card");
	$def = 0;
    }
    $auto && $def or $in->ask_yesorno(_("Test of the configuration"), $mesg, $def) or return 1;

    unlink "$prefix/tmp/.X9-lock";

    #- create a link from the non-prefixed /tmp/.X11-unix/X9 to the prefixed one
    #- that way, you can talk to :9 without doing a chroot
    #- but take care of non X11 install :-)
    if (-d "/tmp/.X11-unix") {
	symlinkf "$prefix/tmp/.X11-unix/X9", "/tmp/.X11-unix/X9" if $prefix;
    } else {
	symlinkf "$prefix/tmp/.X11-unix", "/tmp/.X11-unix" if $prefix;
    }
    #- restart_xfs;

    my $f_err = "$prefix/tmp/Xoutput";
    my $pid;
    unless ($pid = fork) {
	open STDERR, ">$f_err";
	chroot $prefix if $prefix;
	exec $o->{card}{prog}, 
	  ($o->{card}{prog} !~ /Xsun/ ? ("-xf86config", ($::testing ? $tmpconfig : $f) . ($o->{card}{driver} && "-4")) : ()),
	  ":9" or c::_exit(0);
    }

    do { sleep 1 } until c::Xtest(":9") || waitpid($pid, c::WNOHANG());

    my $b = before_leaving { unlink $f_err };

    unless (c::Xtest(":9")) {
	local $_;
	local *F; open F, $f_err;
      i: while (<F>) {
	    if (/\b(error|not supported)\b/i) {
		my @msg = !/error/ && $_ ;
		while (<F>) {
		    /not fatal/ and last i;
		    /^$/ and last;
		    push @msg, $_;
		}
		$in->ask_warn('', [ _("An error has occurred:"), " ", @msg, _("\ntry to change some parameters") ]);
		return 0;
	    }
	}
    }

    local *F;
    open F, "|perl" or die '';
    print F "use lib qw(", join(' ', @INC), ");\n";
    print F q{
	use interactive_gtk;
        use my_gtk qw(:wrappers);

	$ENV{DISPLAY} = ":9";

        gtkset_mousecursor_normal();
        gtkset_background(200 * 257, 210 * 257, 210 * 257);
        my ($h, $w) = Gtk::Gdk::Window->new_foreign(Gtk::Gdk->ROOT_WINDOW)->get_size;
        $my_gtk::force_position = [ $w / 3, $h / 2.4 ];
	$my_gtk::force_focus = 1;
        my $text = Gtk::Label->new;
        my $time = 8;
        Gtk->timeout_add(1000, sub {
	    $text->set(_("Leaving in %d seconds", $time));
	    $time-- or Gtk->main_quit;
	});

	exit (interactive_gtk->new->ask_yesorno('', [ _("Is this the correct setting?"), $text ], 0) ? 0 : 222);
    };
    my $rc = close F;
    my $err = $?;

    unlink "/tmp/.X11-unix/X9" if $prefix;
    kill 2, $pid;

    $rc || $err == 222 << 8 or $in->ask_warn('', _("An error has occurred, try to change some parameters"));
    $rc;
}

sub autoResolutions($;$) {
    my ($o, $nowarning) = @_;
    my $card = $o->{card};

    $nowarning || $in->ask_okcancel(_("Automatic resolutions"),
_("To find the available resolutions I will try different ones.
Your screen will blink...
You can switch if off if you want, you'll hear a beep when it's over"), 1) or return;

    #- swith to virtual console 1 (hopefully not X :)
    my $vt = setVirtual(1);

    #- Configure the modes order.
    my ($ok, $best);
    foreach (reverse @depths) {
	local $o->{default_depth} = $_;

	my ($resolutions, $clocklines) = eval { testConfig($o) };
	if ($@ || !$resolutions) {
	    delete $card->{depth}{$_};
	} else {
	    $card->{clocklines} ||= $clocklines unless $card->{flags}{noclockprobe};
	    $card->{depth}{$_} = [ @$resolutions ];
	}
    }

    #- restore the virtual console
    setVirtual($vt);
    local $| = 1; print "\a"; #- beeeep!
}

sub autoDefaultDepth($$) {
    my ($card, $wres_wanted) = @_;
    my ($best, $depth);

    return 24 if $card->{identifier} =~ /SiS/;

    for ($card->{server}) {
	/FBDev/   and return 16; #- this should work by default, FBDev is allowed only if install currently uses it at 16bpp.
	/Sun24/   and return 24;
	/SunMono/ and return 2;
	/Sun/     and return 8;
    }

    while (my ($d, $r) = each %{$card->{depth}}) {
	$depth = max($depth || 0, $d);

	#- try to have resolution_wanted
	$best = max($best || 0, $d) if $r->[0][0] >= $wres_wanted;
    }
    $best || $depth or die "no valid modes";
}

sub autoDefaultResolution {
    return "1024x768" if $isLaptop;

    my ($size) = @_;
    $monitorSize2resolution[round($size || 14)] || #- assume a small monitor (size is in inch)
      $monitorSize2resolution[-1]; #- no corresponding resolution for this size. It means a big monitor, take biggest we have
}

sub chooseResolutionsGtk($$;$) {
    my ($card, $chosen_depth, $chosen_w) = @_;
    my $W = my_gtk->new(_("Resolution"));
    my %txt2depth = reverse %depths;
    my ($r, $depth_combo, %w2depth, %w2h, %w2widget);

    my $best_w;
    while (my ($depth, $res) = each %{$card->{depth}}) {
	foreach (@$res) {
	    $w2h{$_->[0]} = $_->[1];
	    push @{$w2depth{$_->[0]}}, $depth;

	    $best_w = max($_->[0], $best_w) if $_->[0] <= $chosen_w;
	}
    }
    $chosen_w = $best_w;

    my $set_depth = sub { $depth_combo->entry->set_text(translate($depths{$chosen_depth})) };

    #- the set function is usefull to toggle the CheckButton with the callback being ignored
    my $ignore;
    my $set = sub { $ignore = 1; $_[0]->set_active(1); $ignore = 0; };

    while (my ($w, $h) = each %w2h) {
	my $V = $w . "x" . $h;
	$w2widget{$w} = $r = new Gtk::RadioButton($r ? ($V, $r) : $V);
	&$set($r) if $chosen_w == $w;
	$r->signal_connect("clicked" => sub {
			       $ignore and return;
			       $chosen_w = $w;
			       unless (member($chosen_depth, @{$w2depth{$w}})) {
				   $chosen_depth = max(@{$w2depth{$w}});
				   &$set_depth();
			       }
			   });
    }
    gtkadd($W->{window},
	   gtkpack_($W->create_box_with_title(_("Choose the resolution and the color depth"),
					      "(" . ($card->{type} ? 
						     _("Graphic card: %s", $card->{type}) :
						     _("XFree86 server: %s", $card->{server})) . ")"
					     ),
		    1, gtkpack(new Gtk::HBox(0,20),
			       $depth_combo = new Gtk::Combo,
			       gtkpack_(new Gtk::VBox(0,0),
					map {; 0, $w2widget{$_} } ikeys(%w2widget),
					),
			       ),
		    0, gtkadd($W->create_okcancel,
			      gtksignal_connect(new Gtk::Button(_("Show all")), clicked => sub { $W->{retval} = 1; $chosen_w = 0; Gtk->main_quit })),
		    ));
    $depth_combo->disable_activate;
    $depth_combo->set_use_arrows_always(1);
    $depth_combo->entry->set_editable(0);
    $depth_combo->set_popdown_strings(map { translate($depths{$_}) } ikeys(%{$card->{depth}}));
    $depth_combo->entry->signal_connect(changed => sub {
       $chosen_depth = $txt2depth{untranslate($depth_combo->entry->get_text, keys %txt2depth)};
       my $w = $card->{depth}{$chosen_depth}[0][0];
       $chosen_w > $w and &$set($w2widget{$chosen_w = $w});
    });
    &$set_depth();
    $W->{ok}->grab_focus;

    $W->main or return;
    ($chosen_depth, $chosen_w);
}

sub chooseResolutions($$;$) {
    goto &chooseResolutionsGtk if ref($in) =~ /gtk/;

    my ($card, $chosen_depth, $chosen_w) = @_;

    my $best_w;
    local $_ = $in->ask_from_list(_("Resolutions"), "", 
				  [ map_each { map { "$_->[0]x$_->[1] ${main::a}bpp" } @$::b } %{$card->{depth}} ]) or return;
    reverse /(\d+)x\S+ (\d+)/;
}


sub resolutionsConfiguration($%) {
    my ($o, %options) = @_;
    my $card = $o->{card};

    #- For the mono and vga16 server, no further configuration is required.
    if (member($card->{server}, "Mono", "VGA16")) {
	$card->{depth}{8} = [[ 640, 480 ]];
	return;
    } elsif ($card->{server} =~ /Sun/) {
	$card->{depth}{2} = [[ 1152, 864 ]] if $card->{server} =~ /^(SunMono)$/;
	$card->{depth}{8} = [[ 1152, 864 ]] if $card->{server} =~ /^(SunMono|Sun)$/;
	$card->{depth}{24} = [[ 1152, 864 ]] if $card->{server} =~ /^(SunMono|Sun|Sun24)$/;
	$card->{default_wres} = 1152;
	$o->{default_depth} = max(keys %{$card->{depth}});
	return 1; #- aka we cannot test, assumed as good (should be).
    }

    #- some of these guys hate to be poked
    #- if we dont know then its at the user's discretion
    #-my $manual ||=
    #-	$card->{server} =~ /^(TGA|Mach32)/ ||
    #-	$card->{name} =~ /^Riva 128/ ||
    #-	$card->{chipset} =~ /^(RIVA128|mgag)/ ||
    #-	$::expert;
    #-
    #-my $unknown =
    #-	member($card->{server}, qw(S3 S3V I128 Mach64)) ||
    #-	member($card->{type},
    #-	       "Matrox Millennium (MGA)",
    #-	       "Matrox Millennium II",
    #-	       "Matrox Millennium II AGP",
    #-	       "Matrox Mystique",
    #-	       "Matrox Mystique",
    #-	       "S3",
    #-	       "S3V",
    #-	       "I128",
    #-	      ) ||
    #-	$card->{type} =~ /S3 ViRGE/;
    #-
    #-$unknown and $manual ||= !$in->ask_okcancel('', [ _("I can try to autodetect information about graphic card, but it may freeze :("),
    #-							_("Do you want to try?") ]);

    if (is_empty_hash_ref($card->{depth})) {
	$card->{depth}{$_} = [ map { [ split "x" ] } @resolutions ]
	  foreach @depths;

	unless ($options{noauto}) {
	    if ($options{nowarning} || $in->ask_okcancel(_("Automatic resolutions"),
_("I can try to find the available resolutions (eg: 800x600).
Sometimes, though, it may hang the machine.
Do you want to try?"), 1)) {
		autoResolutions($o, $options{nowarning});
		is_empty_hash_ref($card->{depth}) and $in->ask_warn('',
_("No valid modes found
Try with another video card or monitor")), return;
	    }
	}
    }

    #- sort resolutions in each depth
    foreach (values %{$card->{depth}}) {
	my $i = 0;
	@$_ = grep { first($i != $_->[0], $i = $_->[0]) }
	  sort { $b->[0] <=> $a->[0] } @$_;
    }

    #- remove unusable resolutions (based on the video memory size and the monitor hsync rate)
    keepOnlyLegalModes($card, $o->{monitor});

    my $res = $o->{resolution_wanted} || autoDefaultResolution($o->{monitor}{size});
    my $wres = first(split 'x', $res);

    #- take the first available resolution <= the wanted resolution
    $wres ||= max map { first(grep { $_->[0] <= $wres } @$_)->[0] } values %{$card->{depth}};
    my $depth = eval { $o->{default_depth} || autoDefaultDepth($card, $wres) };

    $options{auto} or ($depth, $wres) = chooseResolutions($card, $depth, $wres) or return;

    unless ($wres) {
	delete $card->{depth};
	return resolutionsConfiguration($o, noauto => 1);
    }

    #- needed in auto mode when all has been provided by the user
    $card->{depth}{$depth} or die "you selected an unusable depth";

    #- remove all biggest resolution (keep the small ones for ctl-alt-+)
    #- otherwise there'll be a virtual screen :(
    $card->{depth}{$depth} = [ grep { $_->[0] <= $wres } @{$card->{depth}{$depth}} ];
    $card->{default_wres} = $wres;
    $card->{vga_mode} = $vgamodes{"${wres}xx$depth"} || $vgamodes{"${res}x$depth"}; #- for use with frame buffer.
    $o->{default_depth} = $depth;
    1;
}


#- Create the XF86Config file.
sub write_XF86Config {
    my ($o, $file) = @_;
    my $O;

    local (*F, *G);
    open F, ">$file"   or die "can't write XF86Config in $file: $!";
    open G, ">$file-4" or die "can't write XF86Config in $file-4: $!";

    print F $XF86firstchunk_text, $XF86firstchunk_text2;
    print G $XF86firstchunk_text;
    print G qq(    Option "Pixmap"  "24"\n) if $o->{card}{type} eq "SiS 6326";
    print G $XF86firstchunk_text2;

    #- Write keyboard section.
    $O = $o->{keyboard};
    print F $keyboardsection_start;
    print G $keyboardsection_start_v4;
    print F qq(    XkbDisable\n) unless $O->{xkb_keymap};
    print G qq(    Option "XkbDisable"\n) unless $O->{xkb_keymap};
    print F $keyboardsection_part3;
    print G $keyboardsection_part3_v4;
    print F qq(    XkbLayout       "$O->{xkb_keymap}"\n);
    print G qq(    Option "XkbLayout" "$O->{xkb_keymap}"\n);
    print F join '', map { "    $_\n" } @{$xkb_options{$O->{xkb_keymap}} || []};
    print G join '', map { /(\S+)(.*)/; qq(    Option "$1" $2\n) } @{$xkb_options{$O->{xkb_keymap}} || []};
    print F $keyboardsection_end;
    print G $keyboardsection_end;

    #- Write pointer section.
    $O = $o->{mouse};
    print F $pointersection_text;
    print G $pointersection_text_v4;
    print F qq(    Protocol    "$O->{XMOUSETYPE}"\n);
    print G qq(    Option "Protocol"    "$O->{XMOUSETYPE}"\n);
    print F qq(    Device      "/dev/$O->{device}"\n);
    print G qq(    Option "Device"      "/dev/$O->{device}"\n);
    #- this will enable the "wheel" or "knob" functionality if the mouse supports it
    print F "    ZAxisMapping 4 5\n" if $O->{nbuttons} > 3;
    print F "    ZAxisMapping 6 7\n" if $O->{nbuttons} > 5;

    print F "#" unless $O->{XEMU3};
    print G "#" unless $O->{XEMU3};
    print F qq(    Emulate3Buttons\n);
    print G qq(    Option "Emulate3Buttons"\n);
    print F "#" unless $O->{XEMU3};
    print G "#" unless $O->{XEMU3};
    print F qq(    Emulate3Timeout    50\n\n);
    print G qq(    Option "Emulate3Timeout"    "50"\n\n);
    print F "# ChordMiddle is an option for some 3-button Logitech mice\n\n";
    print G "# ChordMiddle is an option for some 3-button Logitech mice\n\n";
    print F "#" unless $O->{chordmiddle};
    print G "#" unless $O->{chordmiddle};
    print F qq(    ChordMiddle\n\n);
    print G qq(    Option "ChordMiddle"\n\n);
    print F "    ClearDTR\n" if $O->{cleardtrrts};
    print F "    ClearRTS\n\n"  if $O->{cleardtrrts};
    print F "EndSection\n\n\n";
    print G "EndSection\n\n\n";

    #- write module section for version 3.
    if ($o->{wacom} || $o->{card}{Utah_glx}) {
	print F qq(Section "Module"
);
	print F qq(    Load "xf86Wacom.so"\n) if $o->{wacom};
	print F qq(    Load "glx-3.so"\n) if $o->{card}{Utah_glx}; #- glx.so may clash with server version 4.
	print F qq(EndSection

);
    }

    #- write wacom device support.
    print F qq(
Section "XInput"
    SubSection "WacomStylus"
        Port "/dev/$o->{wacom}"
        AlwaysCore
    EndSubSection
    SubSection "WacomCursor"
        Port "/dev/$o->{wacom}"
        AlwaysCore
    EndSubSection
    SubSection "WacomEraser"
        Port "/dev/$o->{wacom}"
        AlwaysCore
    EndSubSection
EndSection

) if $o->{wacom};

    print G qq(
Section "InputDevice"
    Identifier	"stylus"
    Driver	"wacom"
    Option	"Type" "stylus"
    Option	"Device" "/dev/$o->{wacom}"
EndSection
Section "InputDevice"
    Identifier	"eraser"
    Driver	"wacom"
    Option	"Type" "eraser"
    Option	"Device" "/dev/$o->{wacom}"
EndSection
Section "InputDevice"
    Identifier	"cursor"
    Driver	"wacom"
    Option	"Type" "cursor"
    Option	"Device" "/dev/$o->{wacom}"
EndSection
) if $o->{wacom};

    #- write modules section for version 4.
    print G qq(
Section "Module"

# This loads the DBE extension module.

    Load	"dbe"
);
    print G qq(
    Load	"glx"
    Load	"dri"
) if $o->{card}{DRI_glx};
    print G qq(

# This loads the miscellaneous extensions module, and disables
# initialisation of the XFree86-DGA extension within that module.

    SubSection	"extmod"
	Option	"omit xfree86-dga"
    EndSubSection

# This loads the Type1 and FreeType font modules

    Load	"type1"
    Load	"freetype"
EndSection
);
    print G qq(

Section "DRI"
    Mode	0666
EndSection
) if $o->{card}{DRI_glx};

    #- Write monitor section.
    $O = $o->{monitor};
    print F $monitorsection_text1;
    print G $monitorsection_text1;
    print F qq(    Identifier "$O->{type}"\n);
    print G qq(    Identifier "$O->{type}"\n);
    print F qq(    VendorName "$O->{vendor}"\n);
    print G qq(    VendorName "$O->{vendor}"\n);
    print F qq(    ModelName  "$O->{model}"\n\n);
    print G qq(    ModelName  "$O->{model}"\n\n);
    print F $monitorsection_text2;
    print G $monitorsection_text2;
    print F qq(    HorizSync  $O->{hsyncrange}\n\n);
    print G qq(    HorizSync  $O->{hsyncrange}\n\n);
    print F $monitorsection_text3;
    print G $monitorsection_text3;
    print F qq(    VertRefresh $O->{vsyncrange}\n\n);
    print G qq(    VertRefresh $O->{vsyncrange}\n\n);
    print F $monitorsection_text4;
    print F ($O->{modelines} || '') . ($o->{card}{type} eq "TG 96" ? $modelines_text_Trident_TG_96xx : $modelines_text);
    print F "\nEndSection\n\n\n";
    print G "\nEndSection\n\n\n";

    #- Write Device section.
    $O = $o->{card};
    print F $devicesection_text;
    print G $devicesection_text_v4;
    print F qq(Section "Device"\n);
    print G qq(Section "Device"\n);
    print F qq(    Identifier  "$O->{type}"\n);
    print G qq(    Identifier  "$O->{type}"\n);
    print F qq(    VendorName  "$O->{vendor}"\n);
    print G qq(    VendorName  "$O->{vendor}"\n);
    print F qq(    BoardName   "$O->{board}"\n);
    print G qq(    BoardName   "$O->{board}"\n);

    print F "#" if $O->{chipset} && !$O->{flags}{needChipset};
    print F qq(    Chipset     "$O->{chipset}"\n) if $O->{chipset};
    print G qq(    Driver      "$O->{driver}"\n);

    print F "#" if $O->{memory} && !$O->{flags}{needVideoRam};
    print G "#" if $O->{memory} && !$O->{flags}{needVideoRam};
    print F "    VideoRam    $O->{memory}\n" if $O->{memory};
    print G "    VideoRam    $O->{memory}\n" if $O->{memory};

    print F map { "    $_\n" } @{$O->{lines} || []};
    print G map { "    $_\n" } @{$O->{lines} || []};

    print F qq(    Ramdac      "$O->{ramdac}"\n) if $O->{ramdac};
    print G qq(    Ramdac      "$O->{ramdac}"\n) if $O->{ramdac};
    print F qq(    Dacspeed    "$O->{dacspeed}"\n) if $O->{dacspeed};
    print G qq(    Dacspeed    "$O->{dacspeed}"\n) if $O->{dacspeed};

    if ($O->{clockchip}) {
	print F qq(    Clockchip   "$O->{clockchip}"\n);
	print G qq(    Clockchip   "$O->{clockchip}"\n);
    } else {
	print F "    # Clock lines\n";
	print G "    # Clock lines\n";
	print F "    Clocks $_\n" foreach (@{$O->{clocklines}});
	print G "    Clocks $_\n" foreach (@{$O->{clocklines}});
    }
    do { print F; print G } for qq(

    # Uncomment following option if you see a big white block        
    # instead of the cursor!                                          
    #    Option      "sw_cursor"

); 
    my $p = sub {
	my ($l) = @_;
	map { (!$l->{$_} && '#') . qq(    Option      "$_"\n) } keys %{$l || {}};
    };
    print F $p->('options');
    print F $p->('options_xf3');
    print G $p->('options');
    print G $p->('options_xf4');
    print F "EndSection\n\n\n";
    print G "EndSection\n\n\n";

    #- Write Screen sections.
    print F $screensection_text1, "\n";
    print G $screensection_text1, "\n";

    my $subscreen = sub {
	my ($f, $server, $defdepth, $depths) = @_;
	print $f "    DefaultColorDepth $defdepth\n" if $defdepth;

        foreach (ikeys(%$depths)) {
	    my $m = $server ne "fbdev" ? join(" ", map { qq("$_->[0]x$_->[1]") } @{$depths->{$_}}) : qq("default"); #-"
	    print $f qq(    Subsection "Display"\n);
	    print $f qq(        Depth       $_\n) if $_;
	    print $f qq(        Modes       $m\n);
	    print $f qq(        ViewPort    0 0\n);
	    print $f qq(    EndSubsection\n);
	}
	print $f "EndSection\n";
    };

    my $screen = sub {
	my ($server, $defdepth, $device, $depths) = @_;
	print F qq(
Section "Screen"
    Driver "$server"
    Device      "$device"
    Monitor     "$o->{monitor}{type}"
); #-"
	$subscreen->(*F, $server, $defdepth, $depths);
    };

    #- SVGA screen section.
    print F qq(
# The Colour SVGA server
);

    if (member($O->{server}, @svgaservers)) {
	&$screen("svga", $o->{default_depth}, $O->{type}, $O->{depth});
    } else {
	&$screen("svga", '', "Generic VGA", { 8 => [[ 320, 200 ]] });
    }

    &$screen("vga16", '',
	     (member($O->{server}, "Mono", "VGA16") ? $O->{type} : "Generic VGA"),
	     { '' => [[ 640, 480 ], [ 800, 600 ]]});

    &$screen("vga2", '',
	     (member($O->{server}, "Mono", "VGA16") ? $O->{type} : "Generic VGA"),
	     { '' => [[ 640, 480 ], [ 800, 600 ]]});

    &$screen("accel", $o->{default_depth}, $O->{type}, $O->{depth});

    &$screen("fbdev", $o->{default_depth}, $O->{type}, $O->{depth});


    print G qq(
Section "Screen"
    Identifier "screen1"
    Device      "$O->{type}"
    Monitor     "$o->{monitor}{type}"
);
    #- bpp 32 not handled by XF4
    $subscreen->(*G, "svga", min($o->{default_depth}, 24), $O->{depth});

    print G '

Section "ServerLayout"
    Identifier "layout1"
    Screen     "screen1"
    InputDevice "Mouse1" "CorePointer"
';
    print G '
    InputDevice "stylus" "AlwaysCore"
    InputDevice "eraser" "AlwaysCore"
    InputDevice "cursor" "AlwaysCore"
' if $o->{wacom};
    print G '
    InputDevice "Keyboard1" "CoreKeyboard"
EndSection
'; #-"

    close F;
    close G;
}

sub XF86check_link {
    my ($ext) = @_;

    my $f = "$prefix/etc/X11/XF86Config$ext";
    touch($f);

    my $l = "$prefix/usr/X11R6/lib/X11/XF86Config$ext";

    if (-e $l && (stat($f))[1] != (stat($l))[1]) { #- compare the inode, must be the sames
	-e $l and unlink($l) || die "can't remove bad $l";
	symlinkf "../../../../etc/X11/XF86Config$ext", $l;
    }
}

sub show_info {
    my ($o) = @_;
    my $info;

    $info .= _("Keyboard layout: %s\n", $o->{keyboard}{xkb_keymap});
    $info .= _("Mouse type: %s\n", $o->{mouse}{XMOUSETYPE});
    $info .= _("Mouse device: %s\n", $o->{mouse}{device}) if $::expert;
    $info .= _("Monitor: %s\n", $o->{monitor}{type});
    $info .= _("Monitor HorizSync: %s\n", $o->{monitor}{hsyncrange}) if $::expert;
    $info .= _("Monitor VertRefresh: %s\n", $o->{monitor}{vsyncrange}) if $::expert;
    $info .= _("Graphic card: %s\n", $o->{card}{type});
    $info .= _("Graphic memory: %s kB\n", $o->{card}{memory}) if $o->{card}{memory};
    $info .= _("XFree86 server: %s\n", $o->{card}{server});

    $in->ask_warn('', $info);
}

#- Program entry point.
sub main {
    my ($o, $allowFB);
    ($prefix, $o, $in, $allowFB, $isLaptop, $install) = @_;
    $o ||= {};

      XF86check_link('');
      XF86check_link('-4');

    {
	my $w = $in->wait_message('', _("Preparing X-Window configuration"), 1);

	$o->{card} = cardConfiguration($o->{card}, $::noauto, $allowFB);

	$o->{monitor} = monitorConfiguration($o->{monitor}, $o->{card}{server} eq 'FBDev');
    }
    my $ok = resolutionsConfiguration($o, auto => $::auto, noauto => $::noauto);

    $ok &&= testFinalConfig($o, $::auto, $o->{skiptest});

    my $quit;
    until ($ok || $quit) {

	my %c = my @c = (
	   __("Change Monitor") => sub { $o->{monitor} = monitorConfiguration() },
           __("Change Graphic card") => sub { $o->{card} = cardConfiguration('', 'noauto', $allowFB) },
           ($::expert ? (__("Change Server options") => sub { optionsConfiguration($o) }) : ()),
	   __("Change Resolution") => sub { resolutionsConfiguration($o, noauto => 1) },
	   __("Automatical resolutions search") => sub {
	       delete $o->{card}{depth};
	       resolutionsConfiguration($o, nowarning => 1);
	   },
	   __("Show information") => sub { show_info($o) },
	   __("Test again") => sub { $ok = testFinalConfig($o, 1) },
	   __("Quit") => sub { $quit = 1 },
        );
	$in->set_help('configureXmain') unless $::isStandalone;
	my $f = $in->ask_from_list_(['XFdrake'],
				 _("What do you want to do?"),
				 [ grep { !ref } @c ]);
	eval { &{$c{$f}} };
	!$@ || $@ =~ /ask_from_list cancel/ or die;
	$in->kill;
    }
    if (!$ok) {
	$ok = !$in->ask_yesorno('', _("Forget the changes?"), 1);
    }
    if ($ok) {
	unless ($::testing) {
	    my $f = "$prefix/etc/X11/XF86Config";
	    if (-e "$f.test") {
		rename $f, "$f.old" or die "unable to make a backup of XF86Config";
		rename "$f-4", "$f-4.old";
		rename "$f.test", $f;
		rename "$f.test-4", "$f-4";
		symlinkf "../..$o->{card}{prog}", "$prefix/etc/X11/X";
	    }
	}

	if ($::isStandalone && $0 =~ /Xdrakres/) {
	    my $found;
	    foreach (@window_managers) {
		if (`pidof $_` > 0) {
		    if ($in->ask_okcancel('', _("Please relog into %s to activate the changes", ucfirst $_), 1)) {
			system("kwmcom logout") if /kwm/;

			open STDIN, "</dev/zero";
			open STDOUT, ">/dev/null";
			open STDERR, ">&STDERR";
			c::setsid();
		        exec qw(perl -e), q{
                          my $wm = shift;
  		          for (my $nb = 30; $nb && `pidof $wm` > 0; $nb--) { sleep 1 }
  		          system("killall X") unless `pidof $wm` > 0;
  		        }, $_;
		    }
		    $found = 1; last;
		}
	    }
	    $in->ask_warn('', _("Please log out and then use Ctrl-Alt-BackSpace")) unless $found;
	} else {
	    $in->set_help('configureXxdm') unless $::isStandalone;
	    my $run = exists $o->{xdm} ? $o->{xdm} : $::auto || $in->ask_yesorno(_("X at startup"),
_("I can set up your computer to automatically start X upon booting.
Would you like X to start when you reboot?"), 1);
	    rewriteInittab($run ? 5 : 3) unless $::testing;

	    my @etc_pass_fields = qw(name pw uid gid realname home shell);
	    my @users = mapgrep {
		my %l; @l{@etc_pass_fields} = split ':';
		$l{uid} > 500, $l{name};
	    } cat_("$o->{prefix}/etc/passwd");

	    my $flag='no';
	    unless (exists $o->{miscellaneous}{autologuser} || $::auto || !@users || $o->{authentication}{NIS}) {
	        $in->ask_from_entries_refH(_("Autologin"),
_("I can set up your computer to automatically log on one user.
If you don't want to use this feature, click on the cancel button."),
                                           [ _("Choose the default user:") => {val => \$o->{miscellaneous}{autologuser}, list => \@users, not_edit => 1} ])
		    ? do { $flag='yes'; system("urpmi --auto autologin"); } : delete $o->{miscellaneaous}{autologuser};
	    }
	    any::setAutologin($prefix, $o->{miscellaneous}{autologuser}, "startx", $flag);
	}
	run_program::rooted($prefix, "chkconfig", "--del", "gpm") if $o->{mouse}{device} =~ /ttyS/ && !$::isStandalone;
    }
}
-format msgid "Root password" msgstr "Пароль адміністратора" #: draksec:296 #, c-format msgid "User password" msgstr "Пароль користувача" #: draksec:326 draksec:372 #, c-format msgid "Software Management" msgstr "Керування програми" #: draksec:327 #, c-format msgid "Mandriva Update" msgstr "Mandriva Update" #: draksec:328 #, c-format msgid "Software Media Manager" msgstr "Менеджер джерел програм" #: draksec:329 #, c-format msgid "Configure 3D Desktop effects" msgstr "Налаштувати ефекти 3D-стільниці" #: draksec:330 #, c-format msgid "Graphical Server Configuration" msgstr "Налаштування графічного сервера" #: draksec:331 #, c-format msgid "Mouse Configuration" msgstr "Налаштування миші" #: draksec:332 #, c-format msgid "Keyboard Configuration" msgstr "Налаштування клавіатури" #: draksec:333 #, c-format msgid "UPS Configuration" msgstr "Налаштування ББЖ" #: draksec:334 #, c-format msgid "Network Configuration" msgstr "Налаштування мережі" #: draksec:335 #, c-format msgid "Hosts definitions" msgstr "Клієнти мережі" #: draksec:336 #, c-format msgid "Network Center" msgstr "Мережевий центр" #: draksec:337 #, c-format msgid "VPN" msgstr "VPN" #: draksec:338 #, c-format msgid "Proxy Configuration" msgstr "Конфігурація проксі" #: draksec:339 #, c-format msgid "Connection Sharing" msgstr "Спільне використання під'єднання" #: draksec:341 #, c-format msgid "Backups" msgstr "Резервні копії" #: draksec:343 logdrake:52 #, c-format msgid "Logs" msgstr "Журнали" #: draksec:344 #, c-format msgid "Services" msgstr "Сервіси" #: draksec:345 #, c-format msgid "Users" msgstr "Користувачі" #: draksec:347 #, c-format msgid "Boot Configuration" msgstr "Налаштування завантаження" #: draksec:373 #, c-format msgid "Hardware" msgstr "Обладнання" #: draksec:374 #, c-format msgid "Network" msgstr "Мережа" #: draksec:375 #, c-format msgid "System" msgstr "Система" #: draksec:376 #, c-format msgid "Boot" msgstr "Завантаження" #: draksec:401 #, c-format msgid "Please wait, setting security level..." msgstr "Зачекайте, будь ласка, встановлюється рівень безпеки..." #: draksec:407 #, c-format msgid "Please wait, setting security options..." msgstr "Зачекайте, будь ласка, встановлюються параметри безпеки..." #: draksound:48 #, c-format msgid "No Sound Card detected!" msgstr "Звукової карти не знайдено!" #. -PO: keep the double empty lines between sections, this is formatted a la LaTeX #: draksound:51 #, c-format msgid "" "No Sound Card has been detected on your machine. Please verify that a Linux-" "supported Sound Card is correctly plugged in.\n" "\n" "\n" "You can visit our hardware database at:\n" "\n" "\n" "http://www.mandrivalinux.com/en/hardware.php3" msgstr "" "На Вашій машині не знайдено звукових плат. Будь ласка, перевірте, щоб " "звукова карта, що підтримується Лінаксом, була правильно вставлена.\n" "\n" "\n" "Ви можете відвідати нашу базу даних обладнання на:\n" "\n" "\n" "http://www.mandrivalinux.com/ru/hardware.php3" #: draksound:58 #, c-format msgid "" "\n" "\n" "\n" "Note: if you've an ISA PnP sound card, you'll have to use the alsaconf or " "the sndconfig program. Just type \"alsaconf\" or \"sndconfig\" in a console." msgstr "" "\n" "\n" "\n" "Зауважте: якщо у Вас є звукова карта ISA PnP, Вам буде потрібно використати " "програму sndconfig. Просто наберіть в консолі \"alsaconf\" або \"sndconfig\"." #: draksplash:33 #, c-format msgid "X coordinate of text box" msgstr "Координата X текстового вікна" #: draksplash:34 #, c-format msgid "Y coordinate of text box" msgstr "Координата Y текстового вікна" #: draksplash:35 #, c-format msgid "Text box width" msgstr "Ширина текстового вікна" #: draksplash:36 #, c-format msgid "Text box height" msgstr "Висота текстового вікна" #: draksplash:37 #, c-format msgid "" "The progress bar X coordinate\n" "of its upper left corner" msgstr "" "Координата x верхнього лівого\n" "кута індикатора поступу" #: draksplash:38 #, c-format msgid "" "The progress bar Y coordinate\n" "of its upper left corner" msgstr "" "Координата y верхнього лівого\n" "кута індикатора поступу" #: draksplash:39 #, c-format msgid "The width of the progress bar" msgstr "Ширина індикатора поступу" #: draksplash:40 #, c-format msgid "The height of the progress bar" msgstr "Висота індикатора поступу" #: draksplash:41 #, c-format msgid "X coordinate of the text" msgstr "Координата X тексту" #: draksplash:42 #, c-format msgid "Y coordinate of the text" msgstr "Координата Y тексту" #: draksplash:43 #, c-format msgid "Text box transparency" msgstr "Прозорість текстового вікна" #: draksplash:44 #, c-format msgid "Progress box transparency" msgstr "Прозорість вікна індикатора поступу" #: draksplash:45 #, c-format msgid "Text size" msgstr "Розмір тексту" #: draksplash:62 #, c-format msgid "Progress Bar" msgstr "Смуга поступу" #: draksplash:65 #, c-format msgid "Choose progress bar color 1" msgstr "Виберіть колір 1 індикатора поступу" #: draksplash:67 #, c-format msgid "Choose progress bar color 2" msgstr "Виберіть колір 2 індикатора поступу" #: draksplash:69 #, c-format msgid "Choose progress bar background" msgstr "Виберіть тло індикатора поступу" #: draksplash:72 #, c-format msgid "Gradient type" msgstr "Тип градієнту" #: draksplash:78 #, c-format msgid "Text" msgstr "Текст" #: draksplash:80 #, c-format msgid "Choose text color" msgstr "Виберіть колір тексту" #: draksplash:83 draksplash:102 #, c-format msgid "Choose picture" msgstr "Виберіть малюнок" #: draksplash:87 #, c-format msgid "Silent bootsplash" msgstr "Спрощене завантаження" #: draksplash:90 #, c-format msgid "Choose text zone color" msgstr "Виберіть колір текстової області" #: draksplash:93 #, c-format msgid "Text color" msgstr "Колір тексту" #: draksplash:97 #, c-format msgid "Background color" msgstr "Колір тла" #: draksplash:103 #, c-format msgid "Verbose bootsplash" msgstr "Детальне завантаження" #: draksplash:110 #, c-format msgid "Theme name" msgstr "Назва теми" #: draksplash:115 #, c-format msgid "Final resolution" msgstr "Кінцева роздільна здатність" #: draksplash:119 #, c-format msgid "Display logo on Console" msgstr "Показувати логотип в консолі" #: draksplash:124 #, c-format msgid "Save theme" msgstr "Зберегти тему" #: draksplash:187 #, c-format msgid "Please enter a theme name" msgstr "Введіть назву теми" #: draksplash:190 #, c-format msgid "Please select a splash image" msgstr "Виберіть малюнок для заставки" #: draksplash:193 #, c-format msgid "saving Bootsplash theme..." msgstr "зберігається тема Bootsplash..." #: draksplash:202 #, c-format msgid "Unable to load image file %s" msgstr "Неможливо завантажити файл малюнку %s" #: draksplash:213 #, c-format msgid "choose image" msgstr "виберіть малюнок" #: draksplash:228 #, c-format msgid "Color selection" msgstr "Вибір кольору" #: drakups:71 #, c-format msgid "Connected through a serial port or an usb cable" msgstr "Під'єднано через послідовний порт або кабель usb" #: drakups:72 #, c-format msgid "Manual configuration" msgstr "Налаштування вручну" #: drakups:78 #, c-format msgid "Add an UPS device" msgstr "Додати пристрій ББЖ" #: drakups:81 #, c-format msgid "" "Welcome to the UPS configuration utility.\n" "\n" "Here, you'll add a new UPS to your system.\n" msgstr "" "Ласкаво просимо до інструменту налаштування UPS.\n" "\n" "Тут Ви можете додати новий UPS до системи.\n" #: drakups:88 #, c-format msgid "" "We're going to add an UPS device.\n" "\n" "Do you want to autodetect UPS devices connected to this machine or to " "manually select them?" msgstr "" "Ми збираємося додати пристрій UPS.\n" "\n" "Ви надаєте перевагу автоматичному визначенню під'єднаного пристрою UPS, чи ?" #: drakups:91 #, c-format msgid "Autodetection" msgstr "Автовизначення" #: drakups:99 harddrake2:370 #, c-format msgid "Detection in progress" msgstr "Триває автовизначення" #: drakups:118 drakups:157 logdrake:457 logdrake:463 #, c-format msgid "Congratulations" msgstr "Вітаємо" #: drakups:119 #, c-format msgid "The wizard successfully added the following UPS devices:" msgstr "Помічник успішно додав наступні пристрої UPS:" #: drakups:121 #, c-format msgid "No new UPS devices was found" msgstr "Не знайдено жодного нового пристрою UPS" #: drakups:126 drakups:138 #, c-format msgid "UPS driver configuration" msgstr "Налаштування драйвера UPS" #: drakups:126 #, c-format msgid "Please select your UPS model." msgstr "Будь ласка, вкажіть модель UPS." #: drakups:127 #, c-format msgid "Manufacturer / Model:" msgstr "Виробник/модель:" #: drakups:138 #, c-format msgid "" "We are configuring the \"%s\" UPS from \"%s\".\n" "Please fill in its name, its driver and its port." msgstr "" "Ми налаштовуємо UPS \"%s\" з \"%s\".\n" "Будь ласка, введіть його назву, драйвер і порт." #: drakups:143 #, c-format msgid "Name:" msgstr "Назва:" #: drakups:143 #, c-format msgid "The name of your ups" msgstr "Назва UPS" #: drakups:144 #, c-format msgid "Driver:" msgstr "Драйвер:" #: drakups:144 #, c-format msgid "The driver that manages your ups" msgstr "Драйвер, який керує Вашим UPS" #: drakups:145 #, c-format msgid "Port:" msgstr "Порт:" #: drakups:147 #, c-format msgid "The port on which is connected your ups" msgstr "Порт, до якого під'єднано Ваш UPS" #: drakups:157 #, c-format msgid "The wizard successfully configured the new \"%s\" UPS device." msgstr "Помічник успішно налаштував новий пристрій UPS\"%s\"." #: drakups:248 #, c-format msgid "UPS devices" msgstr "Пристрої UPS" #: drakups:249 drakups:268 drakups:284 harddrake2:88 harddrake2:114 #: harddrake2:121 #, c-format msgid "Name" msgstr "Назва" #: drakups:249 harddrake2:136 #, c-format msgid "Driver" msgstr "Драйвер" #: drakups:249 harddrake2:54 #, c-format msgid "Port" msgstr "Порт" #: drakups:267 #, c-format msgid "UPS users" msgstr "Користувачі UPS" #: drakups:283 #, c-format msgid "Access Control Lists" msgstr "Контрольні списки доступу" #: drakups:284 #, c-format msgid "IP address" msgstr "IP-адреса" #: drakups:284 #, c-format msgid "IP mask" msgstr "Маска IP" #: drakups:296 #, c-format msgid "Rules" msgstr "Правила" #: drakups:297 #, c-format msgid "Action" msgstr "Дія" #: drakups:297 harddrake2:85 #, c-format msgid "Level" msgstr "Рівень" #: drakups:297 #, c-format msgid "ACL name" msgstr "Назва ACL" #: drakups:297 finish-install:171 #, c-format msgid "Password" msgstr "Пароль" #: drakups:329 #, c-format msgid "UPS Management" msgstr "Керування ББЖ" #: drakups:333 drakups:342 #, c-format msgid "DrakUPS" msgstr "DrakUPS" #: drakups:339 #, c-format msgid "Welcome to the UPS configuration tools" msgstr "Ласкаво просимо до інструментів налаштування UPS" #: drakxtv:67 #, c-format msgid "No TV Card detected!" msgstr "Не знайдено карт ТБ!" #. -PO: keep the double empty lines between sections, this is formatted a la LaTeX #: drakxtv:69 #, c-format msgid "" "No TV Card has been detected on your machine. Please verify that a Linux-" "supported Video/TV Card is correctly plugged in.\n" "\n" "\n" "You can visit our hardware database at:\n" "\n" "\n" "http://www.mandrivalinux.com/en/hardware.php3" msgstr "" "На Вашій машині не виявлено ТБ-карт. Будь ласка, перевірте, чи Linux-сумісну " "Відео/ТБ-карту було правильно встановлено.\n" "\n" "\n" "Ви можете відвідати нашу базу даних обладнання на:\n" "\n" "\n" "http://www.mandrivalinux.com/en/hardware.php3" #: finish-install:56 #, c-format msgid "Keyboard" msgstr "Клавіатура" #: finish-install:57 #, c-format msgid "Please, choose your keyboard layout." msgstr "Будь ласка, виберіть розкладку клавіатури." #: finish-install:169 finish-install:187 finish-install:199 #, c-format msgid "Encrypted home partition" msgstr "Зашифрований розділ домівки" #: finish-install:169 #, c-format msgid "Please enter a password for the %s user" msgstr "Введіть пароль користувача %s" #: finish-install:172 #, c-format msgid "Password (again)" msgstr "Пароль (ще раз)" #: finish-install:187 #, c-format msgid "Creating encrypted home partition" msgstr "Створити зашифрований розділ домівки" #: finish-install:199 #, c-format msgid "Formatting encrypted home partition" msgstr "Форматування зашифрованого розділу домівки" #: harddrake2:28 #, c-format msgid "Alternative drivers" msgstr "Альтернативні драйвери" #: harddrake2:29 #, c-format msgid "the list of alternative drivers for this sound card" msgstr "список альтернативних драйверів для цієї звукової карти" #: harddrake2:31 harddrake2:123 #, c-format msgid "Bus" msgstr "Шина" #: harddrake2:32 #, c-format msgid "this is the physical bus on which the device is plugged (eg: PCI, USB, ...)" msgstr "це фізична шина, до якої приєднано пристрій (напр: PCI, USB, ...)" #: harddrake2:34 harddrake2:149 #, c-format msgid "Bus identification" msgstr "Ідентифікація шини" #: harddrake2:35 #, c-format msgid "" "- PCI and USB devices: this lists the vendor, device, subvendor and " "subdevice PCI/USB ids" msgstr "" "- пристрої PCI і USB : тут перелічені PCI/USB ідентифікатори виробника, " "пристрою, вторинних виробника і пристрою" #: harddrake2:37 #, c-format msgid "Location on the bus" msgstr "Розташування на шині" #: harddrake2:38 #, c-format msgid "" "- pci devices: this gives the PCI slot, device and function of this card\n" "- eide devices: the device is either a slave or a master device\n" "- scsi devices: the scsi bus and the scsi device ids" msgstr "" "- пристрої pci: це визначає PCI-слот, пристрій і призначення карти\n" "- пристрої eide: пристрій є або вторинним, або головним\n" "- пристрої scsi: ідентифікатори шини і пристрою scsi" #: harddrake2:41 #, c-format msgid "Drive capacity" msgstr "Ємність пристрою" #: harddrake2:41 #, c-format msgid "special capacities of the driver (burning ability and or DVD support)" msgstr "спеціальні можливості драйвера (можливість записування і/чи підтримка DVD)" #: harddrake2:42 #, c-format msgid "Description" msgstr "Опис" #: harddrake2:42 #, c-format msgid "this field describes the device" msgstr "це поле описує пристрій" #: harddrake2:43 #, c-format msgid "Old device file" msgstr "Файл старого пристрою" #: harddrake2:44 #, c-format msgid "old static device name used in dev package" msgstr "в пакунку dev використовується назва старого статичного пристрою" #. -PO: here "module" is the "jargon term" for a kernel driver #: harddrake2:47 #, c-format msgid "Module" msgstr "Модуль" #: harddrake2:47 #, c-format msgid "the module of the GNU/Linux kernel that handles the device" msgstr "модуль в ядрі GNU/Linux, який керує пристроєм" #: harddrake2:48 #, c-format msgid "Extended partitions" msgstr "Додаткові розділи" #: harddrake2:48 #, c-format msgid "the number of extended partitions" msgstr "кількість додаткових розділів" #: harddrake2:49 #, c-format msgid "Geometry" msgstr "Геометрія" #: harddrake2:49 #, c-format msgid "Cylinder/head/sectors geometry of the disk" msgstr "Геометрія диску циліндр/головка/сектори" #: harddrake2:50 #, c-format msgid "Disk controller" msgstr "Контролер диску" #: harddrake2:50 #, c-format msgid "the disk controller on the host side" msgstr "контролер диску зі сторони машини" #: harddrake2:51 #, c-format msgid "Identifier" msgstr "Ідентифікатор" #: harddrake2:51 #, c-format msgid "usually the device serial number" msgstr "зазвичай серійний номер диску" #: harddrake2:52 #, c-format msgid "Media class" msgstr "Клас носія" #: harddrake2:52 #, c-format msgid "class of hardware device" msgstr "клас пристрою" #: harddrake2:53 harddrake2:86 #, c-format msgid "Model" msgstr "Модель" #: harddrake2:53 #, c-format msgid "hard disk model" msgstr "модель твердого диску" #: harddrake2:54 #, c-format msgid "network printer port" msgstr "мережевий порт друкарки" #: harddrake2:55 #, c-format msgid "Primary partitions" msgstr "Первинні розділи" #: harddrake2:55 #, c-format msgid "the number of the primary partitions" msgstr "кількість первинних розділів" #: harddrake2:56 harddrake2:91 #, c-format msgid "Vendor" msgstr "Виробник" #: harddrake2:56 #, c-format msgid "the vendor name of the device" msgstr "назва виробника пристрою" #: harddrake2:57 #, c-format msgid "PCI domain" msgstr "PCI-домен" #: harddrake2:57 #, c-format msgid "the PCI domain of the device" msgstr "PCI-домен пристрою" #: harddrake2:58 #, c-format msgid "Bus PCI #" msgstr "Шина PCI #" #: harddrake2:58 #, c-format msgid "the PCI bus on which the device is plugged" msgstr "шина PCI, до якої під'єднано пристрій" #: harddrake2:59 #, c-format msgid "PCI device #" msgstr "# пристрою PCI" #: harddrake2:59 #, c-format msgid "PCI device number" msgstr "номер пристрою PCI" #: harddrake2:60 #, c-format msgid "PCI function #" msgstr "# функції PCI" #: harddrake2:60 #, c-format msgid "PCI function number" msgstr "номер функції PCI" #: harddrake2:61 #, c-format msgid "Vendor ID" msgstr "ID виробника" #: harddrake2:61 #, c-format msgid "this is the standard numerical identifier of the vendor" msgstr "це стандартний номерний ідентифікатор виробника" #: harddrake2:62 #, c-format msgid "Device ID" msgstr "ID пристрою" #: harddrake2:62 #, c-format msgid "this is the numerical identifier of the device" msgstr "це номерний ідентифікатор пристрою" #: harddrake2:63 #, c-format msgid "Sub vendor ID" msgstr "додатковий ID виробника" #: harddrake2:63 #, c-format msgid "this is the minor numerical identifier of the vendor" msgstr "це додатковий номерний ідентифікатор виробника" #: harddrake2:64 #, c-format msgid "Sub device ID" msgstr "додатковий ID пристрою" #: harddrake2:64 #, c-format msgid "this is the minor numerical identifier of the device" msgstr "це додатковий номерний ідентифікатор пристрою" #: harddrake2:65 #, c-format msgid "Device USB ID" msgstr "ID пристрою USB" #: harddrake2:65 #, c-format msgid ".." msgstr ".." #: harddrake2:69 #, c-format msgid "Bogomips" msgstr "Bogomips" #: harddrake2:69 #, c-format msgid "" "the GNU/Linux kernel needs to run a calculation loop at boot time to " "initialize a timer counter. Its result is stored as bogomips as a way to " "\"benchmark\" the cpu." msgstr "" "ядро GNU/Linux потребує запуску під час завантаження обчислювального циклу, " "щоб ініціалізувати лічильник часу. Його результат зберігається як спосіб " "оцінки продуктивності процесора." #: harddrake2:70 #, c-format msgid "Cache size" msgstr "Розмір кешу" #: harddrake2:70 #, c-format msgid "size of the (second level) cpu cache" msgstr "розмір кешу процесора другого рівня" #. -PO: here "comas" is the medical coma, not the lexical coma!! #: harddrake2:73 #, c-format msgid "Coma bug" msgstr "Coma bug" #: harddrake2:73 #, c-format msgid "whether this cpu has the Cyrix 6x86 Coma bug" msgstr "якщо цей процесор має помилку Cyrix 6x86 Coma" #: harddrake2:74 #, c-format msgid "Cpuid family" msgstr "Сімейство cpu" #: harddrake2:74 #, c-format msgid "family of the cpu (eg: 6 for i686 class)" msgstr "сімейство cpu (напр. 6 для класу i686)" #: harddrake2:75 #, c-format msgid "Cpuid level" msgstr "Рівень cpuid" #: harddrake2:75 #, c-format msgid "information level that can be obtained through the cpuid instruction" msgstr "інформаційний рівень, який може бути досягнутий інструкцією cpuid" #: harddrake2:76 #, c-format msgid "Frequency (MHz)" msgstr "Частота (МГц)" #: harddrake2:76 #, c-format msgid "" "the CPU frequency in MHz (Megahertz which in first approximation may be " "coarsely assimilated to number of instructions the cpu is able to execute " "per second)" msgstr "" "частота процесора в МГц (мегагерцах, які в першому наближенні можуть бути " "наближено порівняні з числом інструкцій, які процесор може виконати за одну " "секунду)" #: harddrake2:77 #, c-format msgid "Flags" msgstr "Прапорці" #: harddrake2:77 #, c-format msgid "CPU flags reported by the kernel" msgstr "Прапорці CPU, повідомлені ядром" #: harddrake2:78 #, c-format msgid "Fdiv bug" msgstr "Помилка Fdiv" #: harddrake2:79 #, c-format msgid "" "Early Intel Pentium chips manufactured have a bug in their floating point " "processor which did not achieve the required precision when performing a " "Floating point DIVision (FDIV)" msgstr "" "Перші чіпи Intel Pentium мали помилку в математичному співпроцесорі, яка не " "забезпечувала необхідної точності при діленні з плаваючою крапкою (FDIV)" #: harddrake2:80 #, c-format msgid "Is FPU present" msgstr "Чи є FPU" #: harddrake2:80 #, c-format msgid "yes means the processor has an arithmetic coprocessor" msgstr "'так' означає, що процесор має арифметичний співпроцесор" #: harddrake2:81 #, c-format msgid "Whether the FPU has an irq vector" msgstr "Чи має FPU вектор irq" #: harddrake2:81 #, c-format msgid "yes means the arithmetic coprocessor has an exception vector attached" msgstr "" "так означає, що арифметичний співпроцесор має вмонтований вектор виняткових " "операцій" #: harddrake2:82 #, c-format msgid "F00f bug" msgstr "Помилка F00f" #: harddrake2:82 #, c-format msgid "early pentiums were buggy and freezed when decoding the F00F bytecode" msgstr "ранні пентіуми мали помилку і зависали при декодуванні F00F" #: harddrake2:83 #, c-format msgid "Halt bug" msgstr "Помилка зупину" #: harddrake2:84 #, c-format msgid "" "Some of the early i486DX-100 chips cannot reliably return to operating mode " "after the \"halt\" instruction is used" msgstr "" "Деякі з ранніх чіпів i486DX-100 не могли точно повертатися в робочий режим " "після використання інструкції \"halt\"" #: harddrake2:85 #, c-format msgid "sub generation of the cpu" msgstr "покоління процесора" #: harddrake2:86 #, c-format msgid "generation of the cpu (eg: 8 for Pentium III, ...)" msgstr "покоління процесора (напр. 8 для Pentium III, ...)" #: harddrake2:87 #, c-format msgid "Model name" msgstr "Назва моделі" #: harddrake2:87 #, c-format msgid "official vendor name of the cpu" msgstr "офіційна назва виробника процесора" #: harddrake2:88 #, c-format msgid "the name of the CPU" msgstr "назва CPU" #: harddrake2:89 #, c-format msgid "Processor ID" msgstr "ID процесора" #: harddrake2:89 #, c-format msgid "the number of the processor" msgstr "номер процесора" #: harddrake2:90 #, c-format msgid "Model stepping" msgstr "Покращення моделі" #: harddrake2:90 #, c-format msgid "stepping of the cpu (sub model (generation) number)" msgstr "версія процесора (номер (покоління) моделі)" #: harddrake2:91 #, c-format msgid "the vendor name of the processor" msgstr "назва виробника процесора" #: harddrake2:92 #, c-format msgid "Write protection" msgstr "Захист від запису" #: harddrake2:92 #, c-format msgid "" "the WP flag in the CR0 register of the cpu enforce write protection at the " "memory page level, thus enabling the processor to prevent unchecked kernel " "accesses to user memory (aka this is a bug guard)" msgstr "" "прапорець WP регістра CR0 процесора встановлює захист від запису на рівень " "сторінки пам'яті, таким чином, процесором вмикається захист неперевіреного " "доступу з ядра до пам'яті користувача (отже, це захист від багів)" #: harddrake2:96 #, c-format msgid "Floppy format" msgstr "Форматувати дискету" #: harddrake2:96 #, c-format msgid "format of floppies supported by the drive" msgstr "формати дискет, які підтримуються дисководом" #: harddrake2:100 #, c-format msgid "Channel" msgstr "Канал" #: harddrake2:100 #, c-format msgid "EIDE/SCSI channel" msgstr "Канал EIDE/SCSI" #: harddrake2:101 #, c-format msgid "Disk identifier" msgstr "Ідентифікатор диску" #: harddrake2:101 #, c-format msgid "usually the disk serial number" msgstr "звичайний серійний номер диску" #: harddrake2:102 #, c-format msgid "Logical unit number" msgstr "Логічний номер модуля" #: harddrake2:102 #, c-format msgid "" "the SCSI target number (LUN). SCSI devices connected to a host are uniquely " "identified by a\n" "channel number, a target id and a logical unit number" msgstr "" "номер пристрою SCSI (LUN). Під'єднані до комп'ютера пристрої SCSI унікально\n" "ідентифікуються номером каналу, ID та логічним номером модуля" #. -PO: here, "size" is the size of the ram chip (eg: 128Mo, 256Mo, ...) #: harddrake2:109 #, c-format msgid "Installed size" msgstr "Об'єм встановленого" #: harddrake2:109 #, c-format msgid "Installed size of the memory bank" msgstr "Об'єм встановленої мікросхеми пам'яті" #: harddrake2:110 #, c-format msgid "Enabled Size" msgstr "Доступний об'єм" #: harddrake2:110 #, c-format msgid "Enabled size of the memory bank" msgstr "Доступний об'єм мікросхеми пам'яті" #: harddrake2:111 harddrake2:120 #, c-format msgid "Type" msgstr "Тип" #: harddrake2:111 #, c-format msgid "type of the memory device" msgstr "тип мікросхеми пам'яті" #: harddrake2:112 #, c-format msgid "Speed" msgstr "Швидкодія" #: harddrake2:112 #, c-format msgid "Speed of the memory bank" msgstr "Швидкодія мікросхеми пам'яті" #: harddrake2:113 #, c-format msgid "Bank connections" msgstr "З'єднання мікросхеми" #: harddrake2:114 #, c-format msgid "Socket designation of the memory bank" msgstr "Призначення сокета для мікросхеми пам'яті" #: harddrake2:118 #, c-format msgid "Device file" msgstr "Файл пристрою" #: harddrake2:118 #, c-format msgid "the device file used to communicate with the kernel driver for the mouse" msgstr "пристрій файла використовується для зв'язку з драйвером ядра для миші" #: harddrake2:119 #, c-format msgid "Emulated wheel" msgstr "Емульоване коліщатко" #: harddrake2:119 #, c-format msgid "whether the wheel is emulated or not" msgstr "чи емулюється коліщатко, чи ні" #: harddrake2:120 #, c-format msgid "the type of the mouse" msgstr "тип миші" #: harddrake2:121 #, c-format msgid "the name of the mouse" msgstr "назва миші" #: harddrake2:122 #, c-format msgid "Number of buttons" msgstr "Кількість кнопок" #: harddrake2:122 #, c-format msgid "the number of buttons the mouse has" msgstr "кількість кнопок миші" #: harddrake2:123 #, c-format msgid "the type of bus on which the mouse is connected" msgstr "тип шини, до якої під'єднано мишу" #: harddrake2:124 #, c-format msgid "Mouse protocol used by X11" msgstr "Протокол миші, що використовується X11" #: harddrake2:124 #, c-format msgid "the protocol that the graphical desktop use with the mouse" msgstr "протокол, який графічна стільниця використовує з мишею" #: harddrake2:131 harddrake2:140 harddrake2:147 harddrake2:155 harddrake2:335 #, c-format msgid "Identification" msgstr "Ідентифікація" #: harddrake2:132 harddrake2:148 #, c-format msgid "Connection" msgstr "Під'єднання" #: harddrake2:141 #, c-format msgid "Performances" msgstr "Характеристики" #: harddrake2:142 #, c-format msgid "Bugs" msgstr "Помилки" #: harddrake2:143 #, c-format msgid "FPU" msgstr "FPU" #: harddrake2:150 #, c-format msgid "Device" msgstr "Пристрій: " #: harddrake2:151 #, c-format msgid "Partitions" msgstr "Розділи" #: harddrake2:156 #, c-format msgid "Features" msgstr "Можливості" #. -PO: please keep all "/" characters !!! #: harddrake2:179 logdrake:78 #, c-format msgid "/_Options" msgstr "/Параметри" #: harddrake2:180 harddrake2:209 logdrake:80 #, c-format msgid "/_Help" msgstr "/Довідка" #: harddrake2:184 #, c-format msgid "/Autodetect _printers" msgstr "/Користуватися автовизначенням друкарок" #: harddrake2:185 #, c-format msgid "/Autodetect _modems" msgstr "/Автовизначення модемів" #: harddrake2:186 #, c-format msgid "/Autodetect _jaz drives" msgstr "/Автоматично визначати драйвери jaz" #: harddrake2:187 #, c-format msgid "/Autodetect parallel _zip drives" msgstr "/Автовизначення паралельних приводів j_az" #: harddrake2:191 #, c-format msgid "Hardware Configuration" msgstr "Налаштування обладнання" #: harddrake2:198 #, c-format msgid "/_Quit" msgstr "/Вийти" #: harddrake2:211 #, c-format msgid "/_Fields description" msgstr "/Описи полів" #: harddrake2:213 #, c-format msgid "Harddrake help" msgstr "Довідка HardDrake" #: harddrake2:222 #, c-format msgid "Select a device!" msgstr "Виберіть пристрій !" #: harddrake2:222 #, c-format msgid "" "Once you've selected a device, you'll be able to see the device information " "in fields displayed on the right frame (\"Information\")" msgstr "" "Після того, як Ви вибрали пристрій, зможете побачити інформацію про нього в " "полях, що відображаються у правому вікні (\"Інформація\")" #: harddrake2:228 #, c-format msgid "/_Report Bug" msgstr "/_R Повідомити про помилку" #: harddrake2:230 #, c-format msgid "/_About..." msgstr "/Про..." #: harddrake2:233 #, c-format msgid "Harddrake" msgstr "Harddrake" #: harddrake2:237 #, c-format msgid "This is HardDrake, a %s hardware configuration tool." msgstr "Це HardDrake - інструмент налаштування обладнання %s." #: harddrake2:270 #, c-format msgid "Detected hardware" msgstr "Знайдене обладнання" #: harddrake2:273 scannerdrake:286 #, c-format msgid "Information" msgstr "Інформація" #: harddrake2:275 #, c-format msgid "Set current driver options" msgstr "Встановити параметри поточного драйвера" #: harddrake2:282 #, c-format msgid "Run config tool" msgstr "Запустити інструмент налаштування" #: harddrake2:302 #, c-format msgid "Click on a device in the left tree in order to display its information here." msgstr "Клацніть на пристрої в лівому дереві, щоб побачити інформацію про нього." #: harddrake2:322 notify-x11-free-driver-switch:13 #, c-format msgid "unknown" msgstr "невідома" #: harddrake2:323 #, c-format msgid "Unknown" msgstr "Невідомий" #: harddrake2:343 #, c-format msgid "Misc" msgstr "Misc" #: harddrake2:418 #, c-format msgid "secondary" msgstr "вторинний" #: harddrake2:418 #, c-format msgid "primary" msgstr "первинний" #: harddrake2:422 #, c-format msgid "burner" msgstr "записувач" #: harddrake2:422 #, c-format msgid "DVD" msgstr "DVD" #: harddrake2:474 #, c-format msgid "Unknown/Others" msgstr "Невідомий/Інші" #: harddrake2:516 #, c-format msgid "The following packages need to be installed:\n" msgstr "Наступні пакунки повинні бути встановлені:\n" #: localedrake:38 #, c-format msgid "LocaleDrake" msgstr "LocaleDrake" #: localedrake:44 #, c-format msgid "You should install the following packages: %s" msgstr "Вам потрібно встановити наступні пакунки: %s" #. -PO: the following is used to combine packages names. eg: "initscripts, harddrake, yudit" #: localedrake:47 #, c-format msgid ", " msgstr ", " #: logdrake:51 #, c-format msgid "Mandriva Linux Tools Logs" msgstr "Журнал інструментів Mandriva Linux" #: logdrake:65 #, c-format msgid "Show only for the selected day" msgstr "Показувати лише для виділеного дня" #: logdrake:72 #, c-format msgid "/File/_New" msgstr "/Файл/Новий" #: logdrake:72 #, c-format msgid "<control>N" msgstr "<control>N" #: logdrake:73 #, c-format msgid "/File/_Open" msgstr "/Файл/_Відкрити" #: logdrake:73 #, c-format msgid "<control>O" msgstr "<control>O" #: logdrake:74 #, c-format msgid "/File/_Save" msgstr "/Файл/Записати" #: logdrake:74 #, c-format msgid "<control>S" msgstr "<control>S" #: logdrake:75 #, c-format msgid "/File/Save _As" msgstr "/Файл/Записати, як" #: logdrake:76 #, c-format msgid "/File/-" msgstr "/Файл/-" #: logdrake:79 #, c-format msgid "/Options/Test" msgstr "/Параметри/Тест" #: logdrake:81 #, c-format msgid "/Help/_About..." msgstr "/Довідка/Про..." #: logdrake:110 #, c-format msgid "" "_:this is the auth.log log file\n" "Authentication" msgstr "Розпізнавання" #: logdrake:111 #, c-format msgid "" "_:this is the user.log log file\n" "User" msgstr "Користувач" #: logdrake:112 #, c-format msgid "" "_:this is the /var/log/messages log file\n" "Messages" msgstr "Повідомлення" #: logdrake:113 #, c-format msgid "" "_:this is the /var/log/syslog log file\n" "Syslog" msgstr "Системний журнал" #: logdrake:117 #, c-format msgid "search" msgstr "пошук" #: logdrake:129 #, c-format msgid "A tool to monitor your logs" msgstr "Інструмент для доглядання за журнальними файлами" #: logdrake:131 #, c-format msgid "Settings" msgstr "Налаштування" #: logdrake:134 #, c-format msgid "Matching" msgstr "Співпадає з" #: logdrake:135 #, c-format msgid "but not matching" msgstr "але не відповідає" #: logdrake:138 #, c-format msgid "Choose file" msgstr "Виберіть файл" #: logdrake:150 #, c-format msgid "Calendar" msgstr "Календар" #: logdrake:159 #, c-format msgid "Content of the file" msgstr "Зміст файла" #: logdrake:163 logdrake:407 #, c-format msgid "Mail alert" msgstr "Поштове повідомлення" #: logdrake:170 #, c-format msgid "The alert wizard has failed unexpectedly:" msgstr "Помічник нагадування несподівано перервався:" #: logdrake:174 #, c-format msgid "Save" msgstr "Зберегти" #: logdrake:222 #, c-format msgid "please wait, parsing file: %s" msgstr "будь ласка, зачекайте, проходження файла: %s" #: logdrake:244 #, c-format msgid "Sorry, log file isn't available!" msgstr "Файл журналу недоступний" #: logdrake:292 #, c-format msgid "Error while opening \"%s\" log file: %s\n" msgstr "Помилка при відкриванні файла журналу \"%s\": %s\n" #: logdrake:385 #, c-format msgid "Apache World Wide Web Server" msgstr "Сервер World Wide Web Apache" #: logdrake:386 #, c-format msgid "Domain Name Resolver" msgstr "Розпізнавач назв домену" #: logdrake:387 #, c-format msgid "Ftp Server" msgstr "Сервер Ftp" #: logdrake:388 #, c-format msgid "Postfix Mail Server" msgstr "Поштовий сервер postfix" #: logdrake:389 #, c-format msgid "Samba Server" msgstr "Сервер Samba" #: logdrake:390 #, c-format msgid "SSH Server" msgstr "Сервер SSH " #: logdrake:391 #, c-format msgid "Webmin Service" msgstr "Сервіс Webmin" #: logdrake:392 #, c-format msgid "Xinetd Service" msgstr "Сервіс xinetd " #: logdrake:401 #, c-format msgid "Configure the mail alert system" msgstr "Налаштувати систему поштового нагадування" #: logdrake:402 #, c-format msgid "Stop the mail alert system" msgstr "Зупинити систему поштового нагадування" #: logdrake:410 #, c-format msgid "Mail alert configuration" msgstr "Налаштування поштового оповіщення" #: logdrake:411 #, c-format msgid "" "Welcome to the mail configuration utility.\n" "\n" "Here, you'll be able to set up the alert system.\n" msgstr "" "Ласкаво просимо до конфігураційної програми для пошти.\n" "\n" "Тут Ви можете встановити систему оповіщення.\n" #: logdrake:414 #, c-format msgid "What do you want to do?" msgstr "Що Ви хочете зробити?" #: logdrake:421 #, c-format msgid "Services settings" msgstr "Налаштування сервісів" #: logdrake:422 #, c-format msgid "" "You will receive an alert if one of the selected services is no longer " "running" msgstr "" "Ви отримаєте повідомлення, якщо один з вибраних сервісів більше не " "працюватиме" #: logdrake:429 #, c-format msgid "Load setting" msgstr "Завантажити налаштування" #: logdrake:430 #, c-format msgid "You will receive an alert if the load is higher than this value" msgstr "Ви отримаєте повідомлення, якщо завантаження більше за цю величину" #: logdrake:431 #, c-format msgid "" "_: load here is a noun, the load of the system\n" "Load" msgstr "Завантаження" #: logdrake:436 #, c-format msgid "Alert configuration" msgstr "Налаштування попередження" #: logdrake:437 #, c-format msgid "Please enter your email address below " msgstr "Будь ласка, введіть нижче свою електронну адресу" #: logdrake:438 #, c-format msgid "and enter the name (or the IP) of the SMTP server you wish to use" msgstr "і введіть назву (або IP-адресу) сервера SMTP, який Ви хочете використовувати" #: logdrake:445 #, c-format msgid "\"%s\" neither is a valid email nor is an existing local user!" msgstr "" "\"%s\" не є ні правильною електронною адресою, ні існуючим локальним " "користувачем!" #: logdrake:450 #, c-format msgid "" "\"%s\" is a local user, but you did not select a local smtp, so you must use " "a complete email address!" msgstr "" "\"%s\" є локальним користувачем, але Ви не вибрали локальний smtp, тому Ви " "повинні використовувати повну електронну адресу!" #: logdrake:457 #, c-format msgid "The wizard successfully configured the mail alert." msgstr "Помічник успішно налаштував попередження про пошту." #: logdrake:463 #, c-format msgid "The wizard successfully disabled the mail alert." msgstr "Помічник успішно вимкнув попередження про пошту." #: logdrake:522 #, c-format msgid "Save as.." msgstr "Зберегти як.." #: notify-x11-free-driver-switch:15 #, c-format msgid "" "The proprietary driver for your graphic card can not be found, the system is " "now using the free software driver (%s)." msgstr "" "Драйвер виробника для Вашої графічної плати не знайдено, система " "використовує зараз вільний драйвер (%s)." #: scannerdrake:51 #, c-format msgid "" "SANE packages need to be installed to use scanners.\n" "\n" "Do you want to install the SANE packages?" msgstr "" "Для використання сканера повинні бути встановлені пакунки SANE.\n" "\n" "Ви хочете встановити пакунки SANE?" #: scannerdrake:55 #, c-format msgid "Aborting Scannerdrake." msgstr "Вихід зі Scannerdrake." #: scannerdrake:60 #, c-format msgid "Could not install the packages needed to set up a scanner with Scannerdrake." msgstr "" "Неможливо встановити пакунки, необхідні для встановлення сканерів з " "допомогою Scannerdrake." #: scannerdrake:61 #, c-format msgid "Scannerdrake will not be started now." msgstr "Scannerdrake не буде запущено." #: scannerdrake:67 scannerdrake:505 #, c-format msgid "Searching for configured scanners..." msgstr "Йде пошук налаштованих сканерів ..." #: scannerdrake:71 scannerdrake:509 #, c-format msgid "Searching for new scanners..." msgstr "Йде пошук нових сканерів ..." #: scannerdrake:79 scannerdrake:531 #, c-format msgid "Re-generating list of configured scanners..." msgstr "Перестворюється список налаштованих сканерів ..." #: scannerdrake:101 #, c-format msgid "The %s is not supported by this version of %s." msgstr "%s не підтримується цією версією %s." #: scannerdrake:104 scannerdrake:115 #, c-format msgid "Confirmation" msgstr "Підтвердження" #: scannerdrake:104 #, c-format msgid "%s found on %s, configure it automatically?" msgstr "Знайдено %s на %s, налаштувати автоматично?" #: scannerdrake:116 #, c-format msgid "%s is not in the scanner database, configure it manually?" msgstr "%s немає в базі даних про сканери, налаштуєте вручну?" #: scannerdrake:130 #, c-format msgid "Scanner configuration" msgstr "Налаштування сканера" #: scannerdrake:131 #, c-format msgid "Select a scanner model (Detected model: %s, Port: %s)" msgstr "Виберіть модель сканера (знайдено модель - %s, порт - %s)" #: scannerdrake:133 #, c-format msgid "Select a scanner model (Detected model: %s)" msgstr "Виберіть модель сканера (знайдено модель - %s)" #: scannerdrake:134 #, c-format msgid "Select a scanner model (Port: %s)" msgstr "Виберіть модель сканера (порт - %s)" #: scannerdrake:136 scannerdrake:139 #, c-format msgid " (UNSUPPORTED)" msgstr " (НЕ ПІДТРИМУЄТЬСЯ)" #: scannerdrake:142 #, c-format msgid "The %s is not supported under Linux." msgstr "%s не підтримується Лінаксом." #: scannerdrake:169 scannerdrake:183 #, c-format msgid "Do not install firmware file" msgstr "Не встановлювати файл виробника" #: scannerdrake:172 scannerdrake:222 #, c-format msgid "Scanner Firmware" msgstr "Програмне забезпечення виробника сканера" #: scannerdrake:173 scannerdrake:225 #, c-format msgid "" "It is possible that your %s needs its firmware to be uploaded everytime when " "it is turned on." msgstr "" "Можливо, що Ваш %s потребує щоб його програма виробника завантажувалася в " "нього кожного разу при вмиканні." #: scannerdrake:174 scannerdrake:226 #, c-format msgid "If this is the case, you can make this be done automatically." msgstr "В цьому випадку Ви можете зробити так, щоб це виконувалось автоматично." #: scannerdrake:175 scannerdrake:229 #, c-format msgid "" "To do so, you need to supply the firmware file for your scanner so that it " "can be installed." msgstr "" "Щоб зробити це, Вам необхідно надати файл виробника для Вашого сканера, щоб " "він міг бути встановлений." #: scannerdrake:176 scannerdrake:230 #, c-format msgid "" "You find the file on the CD or floppy coming with the scanner, on the " "manufacturer's home page, or on your Windows partition." msgstr "" "Ви можете знайти файл на диску чи дискеті, що поставлялись зі сканером, на " "домашній сторінці виробника, або на Вашому розділі Windows." #: scannerdrake:178 scannerdrake:237 #, c-format msgid "Install firmware file from" msgstr "Встановити програму виробника з" #: scannerdrake:180 scannerdrake:188 scannerdrake:239 scannerdrake:246 #, c-format msgid "CD-ROM" msgstr "CD-ROM" #: scannerdrake:181 scannerdrake:190 scannerdrake:240 scannerdrake:248 #, c-format msgid "Floppy Disk" msgstr "Дискета" #: scannerdrake:182 scannerdrake:192 scannerdrake:241 scannerdrake:250 #, c-format msgid "Other place" msgstr "Інше місце" #: scannerdrake:198 #, c-format msgid "Select firmware file" msgstr "Виберіть файл виробника" #: scannerdrake:201 scannerdrake:260 #, c-format msgid "The firmware file %s does not exist or is unreadable!" msgstr "Файл виробника %s не існує або недоступний!" #: scannerdrake:224 #, c-format msgid "" "It is possible that your scanners need their firmware to be uploaded " "everytime when they are turned on." msgstr "" "Можливо, Ваші сканери потребують програми виробника для завантаження щоразу " "при увімкненні." #: scannerdrake:228 #, c-format msgid "" "To do so, you need to supply the firmware files for your scanners so that it " "can be installed." msgstr "" "Щоб це зробити, Вам необхідно надати файли виробника для Ваших сканерів, щоб " "їх можна було встановити." #: scannerdrake:231 #, c-format msgid "" "If you have already installed your scanner's firmware you can update the " "firmware here by supplying the new firmware file." msgstr "" "Якщо Ви вже встановили програму виробника для сканера, можете зараз його " "поновити, надавши новий файл виробника." #: scannerdrake:233 #, c-format msgid "Install firmware for the" msgstr "Встановити програму виробника для" #: scannerdrake:256 #, c-format msgid "Select firmware file for the %s" msgstr "Виберіть файл виробника для %s" #: scannerdrake:274 #, c-format msgid "Could not install the firmware file for the %s!" msgstr "Не вдалося встановити файл виробника для %s!" #: scannerdrake:287 #, c-format msgid "The firmware file for your %s was successfully installed." msgstr "Файл виробника для %s успішно встановлено." #: scannerdrake:297 #, c-format msgid "The %s is unsupported" msgstr "Пристрій %s не підтримується" #: scannerdrake:302 #, c-format msgid "" "The %s must be configured by system-config-printer.\n" "You can launch system-config-printer from the %s Control Center in Hardware " "section." msgstr "" "Потрібно налаштувати %s з допомогою system-config-printer.\n" "Ви можете запустити system-config-printer з Центру Керування Мандріва в " "розділі %s." #: scannerdrake:320 #, c-format msgid "Setting up kernel modules..." msgstr "Встановлення модулів ядра..." #: scannerdrake:330 scannerdrake:337 scannerdrake:367 #, c-format msgid "Auto-detect available ports" msgstr "Автоматично визначити наявні порти" #: scannerdrake:331 scannerdrake:377 #, c-format msgid "Device choice" msgstr "Вибір пристрою" #: scannerdrake:332 scannerdrake:378 #, c-format msgid "Please select the device where your %s is attached" msgstr "Будь ласка, вкажіть пристрій, до якого під'єднано Ваш %s" #: scannerdrake:333 #, c-format msgid "(Note: Parallel ports cannot be auto-detected)" msgstr "(Зауваження: паралельні порти не можуть бути автовизначені)" #: scannerdrake:335 scannerdrake:380 #, c-format msgid "choose device" msgstr "виберіть пристрій" #: scannerdrake:369 #, c-format msgid "Searching for scanners..." msgstr "Йде пошук сканерів ..." #: scannerdrake:405 scannerdrake:412 #, c-format msgid "Attention!" msgstr "Увага!" #: scannerdrake:406 #, c-format msgid "" "Your %s cannot be configured fully automatically.\n" "\n" "Manual adjustments are required. Please edit the configuration file /etc/" "sane.d/%s.conf. " msgstr "" "%s неможливо налаштувати повністю автоматично.\n" "\n" "Потрібно підправити дещо вручну. Будь ласка, внесіть необхідні зміни у файл /" "etc/sane.d/%s.conf. " #: scannerdrake:407 scannerdrake:416 #, c-format msgid "" "More info in the driver's manual page. Run the command \"man sane-%s\" to " "read it." msgstr "" "Детальніше читайте в документації до драйвера. Виконайте команду \"man sane-%" "s\", щоб прочитати її." #: scannerdrake:409 scannerdrake:418 #, c-format msgid "" "After that you may scan documents using \"XSane\" or \"Kooka\" from " "Multimedia/Graphics in the applications menu." msgstr "" "Після цього Ви зможете сканувати документи з допомогою \"XSane\" або \"Kooka" "\" з меню програм Мультимедія/Графіка." #: scannerdrake:413 #, c-format msgid "" "Your %s has been configured, but it is possible that additional manual " "adjustments are needed to get it to work. " msgstr "" "%s було налаштовано, але, можливо, потрібно дещо підправити вручну, щоб все " "працювало. " #: scannerdrake:414 #, c-format msgid "" "If it does not appear in the list of configured scanners in the main window " "of Scannerdrake or if it does not work correctly, " msgstr "" "Якщо він не з'являється в списку налаштованих сканерів в головному вікні " "Scannerdrake, або не працює правильно, " #: scannerdrake:415 #, c-format msgid "edit the configuration file /etc/sane.d/%s.conf. " msgstr "внесіть виправлення в конфігураційний файл /etc/sane.d/%s.conf. " #: scannerdrake:420 #, c-format msgid "Congratulations!" msgstr "Вітання!" #: scannerdrake:421 #, c-format msgid "" "Your %s has been configured.\n" "You may now scan documents using \"XSane\" or \"Kooka\" from Multimedia/" "Graphics in the applications menu." msgstr "" "Ваш %s було налаштовано.\n" "Тепер Ви можете сканувати документи з допомогою \"XSane\" або \"Kooka\" з " "меню програм Мультимедія/Графіка." #: scannerdrake:446 #, c-format msgid "" "The following scanners\n" "\n" "%s\n" "are available on your system.\n" msgstr "" "Наступні сканери\n" "\n" "%s\n" "доступні у Вашій системі.\n" #: scannerdrake:447 #, c-format msgid "" "The following scanner\n" "\n" "%s\n" "is available on your system.\n" msgstr "" "Наступний сканер\n" "\n" "%s\n" "доступний у Вашій системі.\n" #: scannerdrake:449 scannerdrake:452 #, c-format msgid "There are no scanners found which are available on your system.\n" msgstr "Не знайдено доступних сканерів у Вашій системі.\n" #: scannerdrake:460 #, c-format msgid "Scanner Management" msgstr "Керування сканером" #: scannerdrake:466 #, c-format msgid "Search for new scanners" msgstr "Шукати нові сканери" #: scannerdrake:472 #, c-format msgid "Add a scanner manually" msgstr "Додати сканер вручну" #: scannerdrake:479 #, c-format msgid "Install/Update firmware files" msgstr "Встановити/Поновити файли виробника" #: scannerdrake:485 #, c-format msgid "Scanner sharing" msgstr "Спільний доступ до сканера" #: scannerdrake:544 scannerdrake:709 #, c-format msgid "All remote machines" msgstr "Всі віддалені машини" #: scannerdrake:556 scannerdrake:859 #, c-format msgid "This machine" msgstr "Ця машина" #: scannerdrake:595 #, c-format msgid "Scanner Sharing" msgstr "Спільний доступ до сканера" #: scannerdrake:596 #, c-format msgid "" "Here you can choose whether the scanners connected to this machine should be " "accessible by remote machines and by which remote machines." msgstr "" "Тут Ви можете вказати, чи приєднані до цієї машини сканери можуть бути " "доступними до віддалених машин, і до яких саме." #: scannerdrake:597 #, c-format msgid "" "You can also decide here whether scanners on remote machines should be made " "available on this machine." msgstr "" "Тут Ви можете також вирішити, чи сканери з віддалених машин будуть " "доступними на цій машині." #: scannerdrake:600 #, c-format msgid "The scanners on this machine are available to other computers" msgstr "Сканери з цієї машини є доступними для інших комп'ютерів" #: scannerdrake:602 #, c-format msgid "Scanner sharing to hosts: " msgstr "Сканер є доступним для машин: " #: scannerdrake:607 scannerdrake:624 #, c-format msgid "No remote machines" msgstr "Немає віддалених машин" #: scannerdrake:616 #, c-format msgid "Use scanners on remote computers" msgstr "Використовувати сканери на віддалених комп'ютерах" #: scannerdrake:619 #, c-format msgid "Use the scanners on hosts: " msgstr "Використовувати сканери на машинах: " #: scannerdrake:646 scannerdrake:718 scannerdrake:868 #, c-format msgid "Sharing of local scanners" msgstr "Спільний доступ до локальних сканерів" #: scannerdrake:647 #, c-format msgid "" "These are the machines on which the locally connected scanner(s) should be " "available:" msgstr "Це перелік машин, на яких можуть бути доступними локально приєднані сканери:" #: scannerdrake:658 scannerdrake:808 #, c-format msgid "Add host" msgstr "Додати машину" #: scannerdrake:664 scannerdrake:814 #, c-format msgid "Edit selected host" msgstr "Редактувати вибрану машину" #: scannerdrake:673 scannerdrake:823 #, c-format msgid "Remove selected host" msgstr "Видалити вибрану машину" #: scannerdrake:682 scannerdrake:832 #, c-format msgid "Done" msgstr "Зроблено" #: scannerdrake:697 scannerdrake:705 scannerdrake:710 scannerdrake:756 #: scannerdrake:847 scannerdrake:855 scannerdrake:860 scannerdrake:906 #, c-format msgid "Name/IP address of host:" msgstr "Назва/IP-адреса машини:" #: scannerdrake:719 scannerdrake:869 #, c-format msgid "Choose the host on which the local scanners should be made available:" msgstr "Виберіть машину, на якій локальні сканери повинні бути доступними:" #: scannerdrake:730 scannerdrake:880 #, c-format msgid "You must enter a host name or an IP address.\n" msgstr "Вам потрібно ввести або назву машини, або IP-адресу.\n" #: scannerdrake:741 scannerdrake:891 #, c-format msgid "This host is already in the list, it cannot be added again.\n" msgstr "Ця машина вже є в списку, її не можна додати знову.\n" #: scannerdrake:796 #, c-format msgid "Usage of remote scanners" msgstr "Використання віддалених сканерів" #: scannerdrake:797 #, c-format msgid "These are the machines from which the scanners should be used:" msgstr "Це перелік машин, з яких можна використовувати сканери:" #: scannerdrake:954 #, c-format msgid "" "saned needs to be installed to share the local scanner(s).\n" "\n" "Do you want to install the saned package?" msgstr "" "для того, щоб надати спільний доступ до локальних сканерів\n" "потрібно встановити saned.\n" "\n" "Ви хочете встановити пакунок saned?" #: scannerdrake:958 scannerdrake:962 #, c-format msgid "Your scanner(s) will not be available on the network." msgstr "Ваші сканери не будуть доступними в мережі." #: scannerdrake:961 #, c-format msgid "Could not install the packages needed to share your scanner(s)." msgstr "" "Неможливо встановити пакунки, необхідні для організації спільного доступу до " "сканерів." #: service_harddrake:134 #, c-format msgid "Some devices in the \"%s\" hardware class were removed:\n" msgstr "Деякі пристрої в обладнанні класу \"%s\" було видалено:\n" #: service_harddrake:135 #, c-format msgid "- %s was removed\n" msgstr "- було видалено %s\n" #: service_harddrake:138 #, c-format msgid "Some devices were added: %s\n" msgstr "Деякі пристрої було додано: %s\n" #: service_harddrake:139 #, c-format msgid "- %s was added\n" msgstr "- було додано- %s\n" #: service_harddrake:264 #, c-format msgid "Hardware probing in progress" msgstr "Відбувається визначення пристроїв" #: service_harddrake_confirm:7 #, c-format msgid "Hardware changes in \"%s\" class (%s seconds to answer)" msgstr "Зміни обладнання в класі \"%s\" (%s секунд на відповідь)" #: service_harddrake_confirm:8 #, c-format msgid "Do you want to run the appropriate config tool?" msgstr "Чи хочете Ви запустити відповідний інструмент налаштування?" #: ../menu/localedrake-system.desktop.in.h:1 msgid "System Regional Settings" msgstr "Регіональні налаштування системи" #: ../menu/localedrake-system.desktop.in.h:2 msgid "System wide language & country configurator" msgstr "Налаштовувач мови і регіональних налаштувань системи" #: ../menu/harddrake.desktop.in.h:1 msgid "HardDrake" msgstr "HardDrake" #: ../menu/harddrake.desktop.in.h:2 msgid "Hardware Central Configuration/information tool" msgstr "Інструмент центрального налаштування обладнання/інформації" #: ../menu/harddrake.desktop.in.h:3 msgid "Hardware Configuration Tool" msgstr "Інструмент налаштування обладнання" #: ../menu/localedrake-user.desktop.in.h:1 msgid "Language & country configuration" msgstr "Налаштування мови і країни" #: ../menu/localedrake-user.desktop.in.h:2 msgid "Regional Settings" msgstr "Регіональні налаштування"