summaryrefslogtreecommitdiffstats
path: root/perl-install/install/share/po/cs.po
blob: 2a428ba707997328248a4f3e150c5451e0dfd23a (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
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
# Translation of cs.po to Czech
# Copyright (C) 1999,2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
#
# Radek Vybiral <Radek.Vybiral@vsb.cz>, 2000, 2001-2003.
# Michal Bukovjan <bukm@centrum.cz>, 2002-2003, 2004, 2005, 2006, 2007, 2008, 2009.
msgid ""
msgstr ""
"Project-Id-Version: cs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-05-19 02:52+0200\n"
"PO-Revision-Date: 2009-09-17 23:59+0200\n"
"Last-Translator: Michal Bukovjan <bukm@centrum.cz>\n"
"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 0.3\n"

#: ../../advertising/01_IM_mageia.pl:1 ../../advertising/02_IM_mageia.pl:1
#: ../../advertising/03_IM_mageia.pl:1
#, c-format
msgid "Mageia, the new Linux distribution"
msgstr ""

#: any.pm:109
#, c-format
msgid "Do you have further supplementary media?"
msgstr "Máte ještě nějaké další doplňující zdroje?"

#. -PO: keep the double empty lines between sections, this is formatted a la LaTeX
#: any.pm:112
#, c-format
msgid ""
"The following media have been found and will be used during install: %s.\n"
"\n"
"\n"
"Do you have a supplementary installation medium to configure?"
msgstr ""
"Byly nalezeny a při instalaci budou použity následující zdroje: %s.\n"
"\n"
"\n"
"Chcete nastavit ještě nějaké další doplňující instalační zdroje?"

#: any.pm:120
#, c-format
msgid "CD-ROM"
msgstr "CD-ROM"

#: any.pm:121
#, c-format
msgid "Network (HTTP)"
msgstr "Síť (HTTP)"

#: any.pm:122
#, c-format
msgid "Network (FTP)"
msgstr "Síť (FTP)"

#: any.pm:123
#, c-format
msgid "Network (NFS)"
msgstr "Síť (NFS)"

#: any.pm:165
#, c-format
msgid "URL of the mirror?"
msgstr "URL zrcadla?"

#: any.pm:171
#, c-format
msgid "URL must start with ftp:// or http://"
msgstr "URL musí začínat na ftp:// nebo http://"

#: any.pm:182
#, c-format
msgid "Contacting %s web site to get the list of available mirrors..."
msgstr "Kontaktuji web %s pro získání seznamu dostupných zrcadel..."

#: any.pm:187
#, c-format
msgid "Failed contacting %s web site to get the list of available mirrors"
msgstr "Selhalo kontaktování webu %s pro získání seznamu dostupných zrcadel"

#: any.pm:197
#, c-format
msgid "Choose a mirror from which to get the packages"
msgstr "Zvolte si zrcadlo (mirror) pro stahování balíčků"

#: any.pm:227
#, c-format
msgid "NFS setup"
msgstr "Nastavení NFS"

#: any.pm:228
#, c-format
msgid "Please enter the hostname and directory of your NFS media"
msgstr "Zadejte prosím název počítače a adresář vašeho zařízení NFS"

#: any.pm:232
#, c-format
msgid "Hostname missing"
msgstr "Chybí název počítače"

#: any.pm:233
#, c-format
msgid "Directory must begin with \"/\""
msgstr "Adresář musí začínat znakem \"/\""

#: any.pm:237
#, c-format
msgid "Hostname of the NFS mount ?"
msgstr "Název počítače připojení NFS?"

#: any.pm:238
#, c-format
msgid "Directory"
msgstr "Adresář"

#: any.pm:260
#, c-format
msgid "Supplementary"
msgstr "Dodatečný"

#: any.pm:295
#, c-format
msgid ""
"Can't find a package list file on this mirror. Make sure the location is "
"correct."
msgstr ""
"Nelze nalézt soubor hdlist na tomto zrcadle. Ujistěte se, že umístění je "
"správné."

#: any.pm:334
#, c-format
msgid "Looking at packages already installed..."
msgstr "Prohledávám již instalované balíčky..."

#: any.pm:369
#, c-format
msgid "Finding packages to upgrade..."
msgstr "Vyhledávám balíčky pro aktualizaci..."

#: any.pm:388
#, c-format
msgid "Removing packages prior to upgrade..."
msgstr "Odstraňují se balíčky před aktualizací..."

#. -PO: keep the double empty lines between sections, this is formatted a la LaTeX
#: any.pm:594
#, c-format
msgid ""
"The following packages will be removed to allow upgrading your system: %s\n"
"\n"
"\n"
"Do you really want to remove these packages?\n"
msgstr ""
"Následující balíčky budou odebrány, aby bylo možné systém aktualizovat: %s\n"
"\n"
"\n"
"Opravdu chcete odebrat tyto balíčky?\n"

#: any.pm:813
#, c-format
msgid "Error reading file %s"
msgstr "Chyba při čtení souboru %s"

#: any.pm:1020
#, c-format
msgid "The following disk(s) were renamed:"
msgstr "Následující disk(y) byly přejmenovány:"

#: any.pm:1022
#, c-format
msgid "%s (previously named as %s)"
msgstr "%s (předchozí název %s)"

#: any.pm:1079
#, c-format
msgid "HTTP"
msgstr "HTTP"

#: any.pm:1079
#, c-format
msgid "FTP"
msgstr "FTP"

#: any.pm:1079
#, c-format
msgid "NFS"
msgstr "NFS"

#: any.pm:1098 steps_interactive.pm:938
#, c-format
msgid "Network"
msgstr "Síť"

#: any.pm:1102
#, c-format
msgid "Please choose a media"
msgstr "Prosím vyberte zdroj"

#: any.pm:1118
#, c-format
msgid "File already exists. Overwrite it?"
msgstr "Soubor již existuje. Přepsat?"

#: any.pm:1122
#, c-format
msgid "Permission denied"
msgstr "Přístup odepřen"

#: any.pm:1170
#, c-format
msgid "Bad NFS name"
msgstr "Chybný název NFS"

#: any.pm:1191
#, c-format
msgid "Bad media %s"
msgstr "Chybný zdroj %s"

#: any.pm:1234
#, c-format
msgid "Cannot make screenshots before partitioning"
msgstr "Nelze provést sejmutí obrazovky před rozdělením disků"

#: any.pm:1242
#, c-format
msgid "Screenshots will be available after install in %s"
msgstr "Sejmuté obrazovky budou dostupné po instalaci v adresáři %s"

#: gtk.pm:131
#, c-format
msgid "Installation"
msgstr "Instalace"

#: gtk.pm:135 share/meta-task/compssUsers.pl:43
#, c-format
msgid "Configuration"
msgstr "Nastavení"

#: install2.pm:168
#, c-format
msgid "You must also format %s"
msgstr "Musíte také naformátovat %s"

#: interactive.pm:16
#, c-format
msgid ""
"Some hardware on your computer needs ``proprietary'' drivers to work.\n"
"You can find some information about them at: %s"
msgstr ""
"Některé části vašeho hardware potřebují pro svoji práci 'proprietární' "
"ovladače.\n"
"Další informace o těchto ovladačích můžete nalézt na: %s"

#: interactive.pm:22
#, c-format
msgid "Bringing up the network"
msgstr "Startuji síť"

#: interactive.pm:27
#, c-format
msgid "Bringing down the network"
msgstr "Zastavuji síť"

#: media.pm:399
#, c-format
msgid "Please wait, retrieving file"
msgstr "Prosím počkejte, získávám soubor"

#: media.pm:715
#, c-format
msgid "unable to add medium"
msgstr "nelze přidat zdroj"

#: media.pm:755
#, c-format
msgid "Copying some packages on disks for future use"
msgstr "Kopíruji některé balíčky na disky pro budoucí použití"

#: media.pm:808
#, c-format
msgid "Copying in progress"
msgstr "Probíhá kopírování"

#: pkgs.pm:32
#, c-format
msgid "must have"
msgstr "musíte mít"

#: pkgs.pm:33
#, c-format
msgid "important"
msgstr "důležité"

#: pkgs.pm:34
#, c-format
msgid "very nice"
msgstr "nejméně důležité"

#: pkgs.pm:35
#, c-format
msgid "nice"
msgstr "nedůležité"

#: pkgs.pm:36
#, c-format
msgid "maybe"
msgstr "může se hodit"

#: pkgs.pm:239
#, c-format
msgid ""
"Some packages requested by %s cannot be installed:\n"
"%s"
msgstr ""
"Některé z balíčků vyžádaných od %s nelze nainstalovat:\n"
"%s"

#: pkgs.pm:327
#, c-format
msgid "An error occurred:"
msgstr "Nastala chyba:"

#: pkgs.pm:814
#, c-format
msgid "%d installation transactions failed"
msgstr "%d instalačních procesů selhalo"

#: pkgs.pm:815
#, c-format
msgid "Installation of packages failed:"
msgstr "Instalace balíčků selhala:"

#: share/meta-task/compssUsers.pl:13
#, c-format
msgid "Workstation"
msgstr "Pracovní stanice"

#: share/meta-task/compssUsers.pl:15
#, c-format
msgid "Office Workstation"
msgstr "Kancelářská stanice"

#: share/meta-task/compssUsers.pl:17
#, c-format
msgid ""
"Office programs: wordprocessors (LibreOffice Writer, Kword), spreadsheets "
"(LibreOffice Calc, Kspread), PDF viewers, etc"
msgstr ""
"Programy pro kancelář: textové procesory (LibreOffice Writer, Kword), "
"tabulkové procesory (LibreOffice Calc, Kspread), prohlížeče PDF a další"

#: share/meta-task/compssUsers.pl:22
#, c-format
msgid "Game station"
msgstr "Hry"

#: share/meta-task/compssUsers.pl:23
#, c-format
msgid "Amusement programs: arcade, boards, strategy, etc"
msgstr "Zábavné programy: deskové hry, strategie, atd."

#: share/meta-task/compssUsers.pl:26
#, c-format
msgid "Multimedia station"
msgstr "Multimediální stanice"

#: share/meta-task/compssUsers.pl:27
#, c-format
msgid "Sound and video playing/editing programs"
msgstr "Programy pro přehrávání/editaci zvuku a videa"

#: share/meta-task/compssUsers.pl:32
#, c-format
msgid "Internet station"
msgstr "Internetová stanice"

#: share/meta-task/compssUsers.pl:33
#, c-format
msgid ""
"Set of tools to read and send mail and news (mutt, tin..) and to browse the "
"Web"
msgstr ""
"Soubor nástrojů pro čtení a posílaní el. pošty a příspěvků do diskusních "
"skupin (mutt, tin..) a pro prohlížení Webu"

#: share/meta-task/compssUsers.pl:38
#, c-format
msgid "Network Computer (client)"
msgstr "Síťový počítač (klient)"

#: share/meta-task/compssUsers.pl:39
#, c-format
msgid "Clients for different protocols including ssh"
msgstr "Klienti pro různé verze protokolu ssh"

#: share/meta-task/compssUsers.pl:44
#, c-format
msgid "Tools to ease the configuration of your computer"
msgstr "Nástroje pro snadnou konfiguraci počítače"

#: share/meta-task/compssUsers.pl:48
#, c-format
msgid "Console Tools"
msgstr "Konzolové nástroje"

#: share/meta-task/compssUsers.pl:49
#, c-format
msgid "Editors, shells, file tools, terminals"
msgstr "Editory, shelly, souborové nástroje, terminály"

#: share/meta-task/compssUsers.pl:53 share/meta-task/compssUsers.pl:156
#: share/meta-task/compssUsers.pl:158
#, c-format
msgid "Development"
msgstr "Vývoj"

#: share/meta-task/compssUsers.pl:54 share/meta-task/compssUsers.pl:159
#, c-format
msgid "C and C++ development libraries, programs and include files"
msgstr "Knihovny pro vývoj v C a C++, programy a hlavičkové soubory"

#: share/meta-task/compssUsers.pl:57 share/meta-task/compssUsers.pl:163
#, c-format
msgid "Documentation"
msgstr "Dokumentace"

#: share/meta-task/compssUsers.pl:58 share/meta-task/compssUsers.pl:164
#, c-format
msgid "Books and Howto's on Linux and Free Software"
msgstr "Knihy a Howto o Linuxu a Svobodném Software"

#: share/meta-task/compssUsers.pl:62 share/meta-task/compssUsers.pl:167
#, c-format
msgid "LSB"
msgstr "LSB"

#: share/meta-task/compssUsers.pl:63 share/meta-task/compssUsers.pl:168
#, c-format
msgid "Linux Standard Base. Third party applications support"
msgstr "Standardní Báze Linuxu (LSB): Podpora aplikací jiných dodavatelů"

#: share/meta-task/compssUsers.pl:72
#, c-format
msgid "Web Server"
msgstr "Webový server"

#: share/meta-task/compssUsers.pl:73
#, c-format
msgid "Apache"
msgstr "Apache"

#: share/meta-task/compssUsers.pl:76
#, c-format
msgid "Groupware"
msgstr "Groupware"

#: share/meta-task/compssUsers.pl:77
#, c-format
msgid "Kolab Server"
msgstr "Server Kolab"

#: share/meta-task/compssUsers.pl:80 share/meta-task/compssUsers.pl:121
#, c-format
msgid "Firewall/Router"
msgstr "Firewall/Router"

#: share/meta-task/compssUsers.pl:81 share/meta-task/compssUsers.pl:122
#, c-format
msgid "Internet gateway"
msgstr "Internetová brána"

#: share/meta-task/compssUsers.pl:84
#, c-format
msgid "Mail/News"
msgstr "Pošta/Diskusní skupiny"

#: share/meta-task/compssUsers.pl:85
#, c-format
msgid "Postfix mail server, Inn news server"
msgstr "Poštovní server Postfix, server diskusních skupin Inn"

#: share/meta-task/compssUsers.pl:88
#, c-format
msgid "Directory Server"
msgstr "Server adresářových služeb"

#: share/meta-task/compssUsers.pl:92
#, c-format
msgid "FTP Server"
msgstr "Server FTP"

#: share/meta-task/compssUsers.pl:93
#, c-format
msgid "ProFTPd"
msgstr "ProFTPd"

#: share/meta-task/compssUsers.pl:96
#, c-format
msgid "DNS/NIS"
msgstr "DNS/NIS"

#: share/meta-task/compssUsers.pl:97
#, c-format
msgid "Domain Name and Network Information Server"
msgstr "Server pro domény a síťové informace"

#: share/meta-task/compssUsers.pl:100
#, c-format
msgid "File and Printer Sharing Server"
msgstr "Server pro sdílení souborů a tiskáren"

#: share/meta-task/compssUsers.pl:101
#, c-format
msgid "NFS Server, Samba server"
msgstr "Server NFS, server Samba"

#: share/meta-task/compssUsers.pl:104 share/meta-task/compssUsers.pl:117
#, c-format
msgid "Database"
msgstr "Databáze"

#: share/meta-task/compssUsers.pl:105
#, c-format
msgid "PostgreSQL and MySQL Database Server"
msgstr "Databázové servery PostgreSQL a MySQL"

#: share/meta-task/compssUsers.pl:109
#, c-format
msgid "Web/FTP"
msgstr "Web/FTP"

#: share/meta-task/compssUsers.pl:110
#, c-format
msgid "Apache, Pro-ftpd"
msgstr "Apache a Pro-ftpd"

#: share/meta-task/compssUsers.pl:113
#, c-format
msgid "Mail"
msgstr "Pošta"

#: share/meta-task/compssUsers.pl:114
#, c-format
msgid "Postfix mail server"
msgstr "Poštovní server Postfix"

#: share/meta-task/compssUsers.pl:118
#, c-format
msgid "PostgreSQL or MySQL database server"
msgstr "Databázové servery PostgreSQL nebo MySQL"

#: share/meta-task/compssUsers.pl:125
#, c-format
msgid "Network Computer server"
msgstr "Síťový server"

#: share/meta-task/compssUsers.pl:126
#, c-format
msgid "NFS server, SMB server, Proxy server, ssh server"
msgstr "NFS server, SMB server, Proxy server, SSH server"

#: share/meta-task/compssUsers.pl:132
#, c-format
msgid "Graphical Environment"
msgstr "Grafické prostředí"

#: share/meta-task/compssUsers.pl:134
#, c-format
msgid "KDE Workstation"
msgstr "Pracovní stanice s KDE"

#: share/meta-task/compssUsers.pl:135
#, c-format
msgid ""
"The K Desktop Environment, the basic graphical environment with a collection "
"of accompanying tools"
msgstr ""
"K Desktop Environment, základní grafické prostředí s kolekcí doprovodných "
"nástrojů"

#: share/meta-task/compssUsers.pl:139
#, c-format
msgid "GNOME Workstation"
msgstr "Pracovní stanice s GNOME"

#: share/meta-task/compssUsers.pl:140
#, c-format
msgid ""
"A graphical environment with user-friendly set of applications and desktop "
"tools"
msgstr ""
"Grafické prostředí s uživatelsky přívětivým seskupením aplikací a pracovní "
"plochou"

#: share/meta-task/compssUsers.pl:144
#, c-format
msgid "LXDE Desktop"
msgstr "LXDE Desktop"

#: share/meta-task/compssUsers.pl:146
#, c-format
msgid ""
"A lightweight & fast graphical environment with user-friendly set of "
"applications and desktop tools"
msgstr ""
"Jednoduché a rychlé grafické prostředí s uživatelsky přívětivou sadou "
"aplikací a nástrojů"

#: share/meta-task/compssUsers.pl:149
#, c-format
msgid "Other Graphical Desktops"
msgstr "Další grafické desktopy"

#: share/meta-task/compssUsers.pl:150
#, c-format
msgid "Window Maker, Enlightenment, Fvwm, etc"
msgstr "Window Maker, Enlightenment, Fvwm a další"

#: share/meta-task/compssUsers.pl:173
#, c-format
msgid "Utilities"
msgstr "Užitečné nástroje"

#: share/meta-task/compssUsers.pl:175 share/meta-task/compssUsers.pl:176
#, c-format
msgid "SSH Server"
msgstr "Server SSH"

#: share/meta-task/compssUsers.pl:180
#, c-format
msgid "Webmin"
msgstr "Webmin"

#: share/meta-task/compssUsers.pl:181
#, c-format
msgid "Webmin Remote Configuration Server"
msgstr "Server pro vzdálené nastavení Webminu"

#: share/meta-task/compssUsers.pl:185
#, c-format
msgid "Network Utilities/Monitoring"
msgstr "Síťové nástroje/Sledování"

#: share/meta-task/compssUsers.pl:186
#, c-format
msgid "Monitoring tools, processes accounting, tcpdump, nmap, ..."
msgstr "Nástroje pro sledování, evidenci procesů, tcpdump, nmap, ..."

#: share/meta-task/compssUsers.pl:190
#, c-format
msgid "Mageia Wizards"
msgstr "Průvodci Mageia"

#: share/meta-task/compssUsers.pl:191
#, c-format
msgid "Wizards to configure server"
msgstr "Průvodci nastavením serverů"

#: steps.pm:85
#, c-format
msgid ""
"An error occurred, but I do not know how to handle it nicely.\n"
"Continue at your own risk."
msgstr ""
"Stala se chyba, ale nevím, jak jí správně interpretovat.\n"
"Pokračujte na vlastní riziko."

#: steps.pm:443
#, c-format
msgid ""
"Some important packages did not get installed properly.\n"
"Either your cdrom drive or your cdrom is defective.\n"
"Check the cdrom on an installed computer using \"rpm -qpl media/main/*.rpm"
"\"\n"
msgstr ""
"Některé důležité balíčky nebyly správně nainstalované.\n"
"Je možné, že je poškozen CD disk nebo CD-ROM mechanika.\n"
"Zkontrolujete to použitím příkazu \"rpm -qpl media/main/*.rpm\"\n"

#: steps_auto_install.pm:71 steps_stdio.pm:27
#, c-format
msgid "Entering step `%s'\n"
msgstr "Začínám krok '%s'\n"

#: steps_curses.pm:22
#, c-format
msgid "%s Installation %s"
msgstr "%s Instalace %s"

#: steps_curses.pm:32
#, c-format
msgid "<Tab>/<Alt-Tab> between elements"
msgstr "<Tab>/<Alt-Tab> mezi prvky"

#: steps_gtk.pm:89
#, c-format
msgid "Xorg server is slow to start. Please wait..."
msgstr "Server Xorg startuje delší dobu. Prosím počkejte..."

#: steps_gtk.pm:206
#, c-format
msgid ""
"Your system is low on resources. You may have some problem installing\n"
"%s. If that occurs, you can try a text install instead. For this,\n"
"press `F1' when booting on CDROM, then enter `text'."
msgstr ""
"Váš systém má málo systémových prostředků. Při instalaci %s se\n"
"můžete setkat s různými problémy. Pokud se tak stane, zkuste textovou\n"
"verzi instalačního programu. Ta se spouští tak, že při startu\n"
"z CD mechaniky stisknete 'F1' a poté napíšete 'text'."

#: steps_gtk.pm:239
#, c-format
msgid "Install %s KDE Desktop"
msgstr "Instalovat pracovní prostředí %s KDE"

#: steps_gtk.pm:240
#, c-format
msgid "Install %s GNOME Desktop"
msgstr "Instalovat pracovní prostředí %s GNOME"

#: steps_gtk.pm:241
#, c-format
msgid "Custom install"
msgstr "Vlastní instalace"

#: steps_gtk.pm:262
#, c-format
msgid "KDE Desktop"
msgstr "KDE Desktop"

#: steps_gtk.pm:263
#, c-format
msgid "GNOME Desktop"
msgstr "GNOME Desktop"

#: steps_gtk.pm:264
#, c-format
msgid "Custom Desktop"
msgstr "Vlastní desktop"

#: steps_gtk.pm:270
#, c-format
msgid "Here's a preview of the '%s' desktop."
msgstr "Zde se nachází náhled pracovního prostředí %s."

#: steps_gtk.pm:298
#, c-format
msgid "Click on images in order to see a bigger preview"
msgstr "Klepněte na obrázky, chcete-li vidět větší náhled"

#: steps_gtk.pm:316 steps_interactive.pm:609 steps_list.pm:30
#, c-format
msgid "Package Group Selection"
msgstr "Výběr skupiny balíčků"

#: steps_gtk.pm:337 steps_interactive.pm:626
#, c-format
msgid "Individual package selection"
msgstr "Výběr jednotlivých balíčků"

#: steps_gtk.pm:361 steps_interactive.pm:546
#, c-format
msgid "Total size: %d / %d MB"
msgstr "Celková velikost: %d / %d MB"

#: steps_gtk.pm:403
#, c-format
msgid "Bad package"
msgstr "Špatný balíček"

#: steps_gtk.pm:405
#, c-format
msgid "Version: "
msgstr "Verze: "

#: steps_gtk.pm:406
#, c-format
msgid "Size: "
msgstr "Velikost: "

#: steps_gtk.pm:406
#, c-format
msgid "%d KB\n"
msgstr "%d KB\n"

#: steps_gtk.pm:407
#, c-format
msgid "Importance: "
msgstr "Důležitost: "

#: steps_gtk.pm:441
#, c-format
msgid "You cannot select/unselect this package"
msgstr "Nemůžete vybrat/nevybrat tento balíček"

#: steps_gtk.pm:445
#, c-format
msgid "due to missing %s"
msgstr "protože chybí %s"

#: steps_gtk.pm:446
#, c-format
msgid "due to unsatisfied %s"
msgstr "díky nesplněné závislosti %s"

#: steps_gtk.pm:447
#, c-format
msgid "trying to promote %s"
msgstr "pokus o postoupení %s"

#: steps_gtk.pm:448
#, c-format
msgid "in order to keep %s"
msgstr "aby bylo zachováno %s"

#: steps_gtk.pm:453
#, c-format
msgid ""
"You cannot select this package as there is not enough space left to install "
"it"
msgstr ""
"Nemůžete vybrat tento balíček, protože pro jeho instalaci není dost místa"

#: steps_gtk.pm:456
#, c-format
msgid "The following packages are going to be installed"
msgstr "Budou instalovány tyto balíčky"

#: steps_gtk.pm:457
#, c-format
msgid "The following packages are going to be removed"
msgstr "Budou odebrány tyto balíčky"

#: steps_gtk.pm:482
#, c-format
msgid "This is a mandatory package, it cannot be unselected"
msgstr "Toto je povinný balíček, nemůže být odstraněn"

#: steps_gtk.pm:484
#, c-format
msgid "You cannot unselect this package. It is already installed"
msgstr "Nemůžete odznačit tento balíček, je už nainstalovaný"

#: steps_gtk.pm:486
#, c-format
msgid "You cannot unselect this package. It must be upgraded"
msgstr "Tento balíček musí být aktualizován, nemůžete ho odznačit"

#: steps_gtk.pm:490
#, c-format
msgid "Show automatically selected packages"
msgstr "Ukázat automaticky vybrané balíčky"

#: steps_gtk.pm:496
#, c-format
msgid "Install"
msgstr "Instalovat"

#: steps_gtk.pm:499
#, c-format
msgid "Load/Save selection"
msgstr "Načíst/Uložit výběr"

#: steps_gtk.pm:500
#, c-format
msgid "Updating package selection"
msgstr "Aktualizuji výběr balíčků"

#: steps_gtk.pm:505
#, c-format
msgid "Minimal install"
msgstr "Minimální instalace"

#: steps_gtk.pm:518
#, c-format
msgid "Software Management"
msgstr "Správa softwaru"

#: steps_gtk.pm:518 steps_interactive.pm:431
#, c-format
msgid "Choose the packages you want to install"
msgstr "Vyberte si balíčky, které chcete nainstalovat"

#: steps_gtk.pm:535 steps_interactive.pm:640 steps_list.pm:32
#, c-format
msgid "Installing"
msgstr "Instaluji"

#: steps_gtk.pm:565
#, c-format
msgid "No details"
msgstr "Bez podrobností"

#: steps_gtk.pm:584
#, c-format
msgid "Time remaining:"
msgstr "Zbývající čas:"

#: steps_gtk.pm:585
#, c-format
msgid "(estimating...)"
msgstr "(odhaduji...)"

#: steps_gtk.pm:615
#, c-format
msgid "%d package"
msgid_plural "%d packages"
msgstr[0] "%d balíček"
msgstr[1] "%d balíčky"
msgstr[2] "%d balíčků"

#: steps_gtk.pm:670 steps_interactive.pm:804 steps_list.pm:43
#, c-format
msgid "Summary"
msgstr "Souhrn"

#: steps_gtk.pm:689
#, c-format
msgid "Configure"
msgstr "Nastavit"

#: steps_gtk.pm:706 steps_interactive.pm:800 steps_interactive.pm:950
#, c-format
msgid "not configured"
msgstr "nenastaveno"

#: steps_gtk.pm:740
#, c-format
msgid "Media Selection"
msgstr "Výběr zdrojů"

#: steps_gtk.pm:749 steps_interactive.pm:332
#, c-format
msgid ""
"The following installation media have been found.\n"
"If you want to skip some of them, you can unselect them now."
msgstr ""
"Byla nalezeny následující instalační zdroje.\n"
"Pokud chcete některé z nich vynechat, můžete je nyní odznačit."

#: steps_gtk.pm:765 steps_interactive.pm:338
#, c-format
msgid ""
"You have the option to copy the contents of the CDs onto the hard disk drive "
"before installation.\n"
"It will then continue from the hard disk drive and the packages will remain "
"available once the system is fully installed."
msgstr ""
"Máte možnost před instalací zkopírovat obsah CD na pevný disk.\n"
"Instalace pak bude pokračovat z pevného disku a balíčky zůstanou dostupné i "
"poté, co je systém plně nainstalován."

#: steps_gtk.pm:767 steps_interactive.pm:340
#, c-format
msgid "Copy whole CDs"
msgstr "Kopírovat celá CD"

#: steps_interactive.pm:39
#, c-format
msgid "An error occurred"
msgstr "Stala se chyba"

#: steps_interactive.pm:104
#, c-format
msgid "Please choose your keyboard layout"
msgstr "Vyberte si rozložení vaší klávesnice"

#: steps_interactive.pm:108
#, c-format
msgid "Here is the full list of available keyboards:"
msgstr "Zde je úplný seznam dostupných klávesnic:"

#: steps_interactive.pm:146
#, c-format
msgid "Install/Upgrade"
msgstr "Instalace/Aktualizace"

#: steps_interactive.pm:150
#, c-format
msgid "Is this an install or an upgrade?"
msgstr "Jedná se o instalaci nebo aktualizaci?"

#: steps_interactive.pm:152
#, c-format
msgid ""
"_: This is a noun:\n"
"Install"
msgstr "Instalace"

#: steps_interactive.pm:154
#, c-format
msgid "Upgrade %s"
msgstr "Aktualizace %s"

#: steps_interactive.pm:172
#, c-format
msgid "Encryption key for %s"
msgstr "Šifrovací klíč pro %s"

#: steps_interactive.pm:205
#, c-format
msgid "Cancel installation, reboot system"
msgstr "Zrušit instalaci, restartovat systém"

#: steps_interactive.pm:206
#, c-format
msgid "New Installation"
msgstr "Nová instalace"

#: steps_interactive.pm:207
#, c-format
msgid "Upgrade previous installation (not recommended)"
msgstr "Aktualizace předchozí instalace (nedoporučuje se)"

#: steps_interactive.pm:211
#, fuzzy, c-format
msgid ""
"Installer has detected that your installed Linux system could not\n"
"safely be upgraded to %s.\n"
"\n"
"New installation replacing your previous one is recommended.\n"
"\n"
"Warning : you should backup all your personal data before choosing \"New\n"
"Installation\"."
msgstr ""
"Instalátor zjistil, že váš instalovaný systém Mageia nemůže být\n"
"bezpečně povýšen na %s.\n"
"\n"
"Doporučujeme novou instalaci, která nahradí instalaci stávající.\n"
"\n"
"Varování: před volbou \"Nové instalace\" si zazálohujte veškerá vaše\n"
"osobní data."

#: steps_interactive.pm:253
#, c-format
msgid "IDE"
msgstr "IDE"

#: steps_interactive.pm:253
#, c-format
msgid "Configuring IDE"
msgstr "Nastavuji IDE"

#: steps_interactive.pm:290
#, c-format
msgid ""
"No free space for 1MB bootstrap! Install will continue, but to boot your "
"system, you'll need to create the bootstrap partition in DiskDrake"
msgstr ""
"Pro bootstrap není potřebné místo o velikosti 1MB! Instalace může "
"pokračovat, ale pro spuštění systému musíte vytvořit bootstrap oddíl pomocí "
"DiskDrake"

#: steps_interactive.pm:295
#, c-format
msgid ""
"You'll need to create a PPC PReP Boot bootstrap! Install will continue, but "
"to boot your system, you'll need to create the bootstrap partition in "
"DiskDrake"
msgstr ""
"Je nutné vytvořit zavedení PPC PReP Boot! Instalace může pokračovat, ale pro "
"zavedení systému musíte vytvořit zaváděcí oddíl pomocí DiskDrake"

#: steps_interactive.pm:371
#, c-format
msgid ""
"Change your Cd-Rom!\n"
"Please insert the Cd-Rom labelled \"%s\" in your drive and press Ok when "
"done.\n"
"If you do not have it, press Cancel to avoid installation from this Cd-Rom."
msgstr ""
"Vyměňte prosím CD!\n"
"Prosím vložte CD označené \"%s\" do mechaniky a stiskněte Ok.\n"
"Pokud toto CD nemáte, stiskněte Zrušit a toto CD nebude nainstalováno."

#: steps_interactive.pm:388
#, c-format
msgid "Looking for available packages..."
msgstr "Hledám dostupné balíčky..."

#: steps_interactive.pm:396
#, c-format
msgid ""
"Your system does not have enough space left for installation or upgrade "
"(%dMB > %dMB)"
msgstr ""
"Váš systém nemá dostatek volného místa pro instalaci nebo aktualizaci (%dMB "
"> %dMB)"

#: steps_interactive.pm:443
#, c-format
msgid ""
"Please choose load or save package selection.\n"
"The format is the same as auto_install generated files."
msgstr ""
"Vyberte si, zda chcete uložit nebo načíst výběr balíčků.\n"
"Formát je stejný jako u souborů generovaných pomocí auto_install."

#: steps_interactive.pm:445
#, c-format
msgid "Load"
msgstr "Načíst"

#: steps_interactive.pm:445
#, c-format
msgid "Save"
msgstr "Uložit"

#: steps_interactive.pm:453
#, c-format
msgid "Bad file"
msgstr "Chybný soubor"

#: steps_interactive.pm:469
#, c-format
msgid "KDE"
msgstr "KDE"

#: steps_interactive.pm:470
#, c-format
msgid "GNOME"
msgstr "GNOME"

#: steps_interactive.pm:473
#, c-format
msgid "Desktop Selection"
msgstr "Výběr pracovního prostředí"

#: steps_interactive.pm:474
#, c-format
msgid "You can choose your workstation desktop profile."
msgstr "Můžete vybrat profil vašeho pracovního prostředí."

#: steps_interactive.pm:560
#, c-format
msgid "Selected size is larger than available space"
msgstr "Velikost vybraných balíčků je větší než místo na disku"

#: steps_interactive.pm:576
#, c-format
msgid "Type of install"
msgstr "Typ instalace"

#: steps_interactive.pm:577
#, c-format
msgid ""
"You have not selected any group of packages.\n"
"Please choose the minimal installation you want:"
msgstr ""
"Nevybrali jste žádnou skupinu balíčků.\n"
"Vyberte si prosím alespoň minimální instalaci:"

#: steps_interactive.pm:582
#, c-format
msgid "With X"
msgstr "X prostředí"

#: steps_interactive.pm:583
#, c-format
msgid "Install suggested packages"
msgstr "Instalovat navrhované balíčky"

#: steps_interactive.pm:584
#, c-format
msgid "With basic documentation (recommended!)"
msgstr "Základní dokumentace (doporučeno!)"

#: steps_interactive.pm:585
#, c-format
msgid "Truly minimal install (especially no urpmi)"
msgstr "Opravdu minimální instalace (speciálně bez urpmi)"

#: steps_interactive.pm:641
#, c-format
msgid "Preparing installation"
msgstr "Připravuji instalaci"

#: steps_interactive.pm:649
#, c-format
msgid "Installing package %s"
msgstr "Instaluji balíček %s"

#: steps_interactive.pm:673
#, c-format
msgid "There was an error ordering packages:"
msgstr "Stala se chyba při řazení balíčků:"

#: steps_interactive.pm:673
#, c-format
msgid "Go on anyway?"
msgstr "Přesto pokračovat?"

#: steps_interactive.pm:677
#, c-format
msgid "Retry"
msgstr "Zkusit znovu"

#: steps_interactive.pm:678
#, c-format
msgid "Skip this package"
msgstr "Vynechat tento balíček"

#: steps_interactive.pm:679
#, c-format
msgid "Skip all packages from medium \"%s\""
msgstr "Vynechat všechny balíčky ze zdroje \"%s\""

#: steps_interactive.pm:680
#, c-format
msgid "Go back to media and packages selection"
msgstr "Vrátit se zpět k výběru zdrojů a balíčků"

#: steps_interactive.pm:683
#, c-format
msgid "There was an error installing package %s."
msgstr "Při instalaci balíčku %s nastala chyba."

#: steps_interactive.pm:702
#, c-format
msgid "Post-install configuration"
msgstr "Probíhá nastavování po instalaci"

#: steps_interactive.pm:709
#, c-format
msgid "Please ensure the Update Modules media is in drive %s"
msgstr ""
"Ujistěte se prosím, že se médium s aktualizovanými moduly nachází v jednotce "
"%s"

#: steps_interactive.pm:737 steps_list.pm:47
#, c-format
msgid "Updates"
msgstr "Aktualizace"

#: steps_interactive.pm:738
#, c-format
msgid ""
"You now have the opportunity to download updated packages. These packages\n"
"have been updated after the distribution was released. They may\n"
"contain security or bug fixes.\n"
"\n"
"To download these packages, you will need to have a working Internet \n"
"connection.\n"
"\n"
"Do you want to install the updates?"
msgstr ""
"Nyní máte možnost stáhnout aktualizované balíčky. Tyto balíčky byly\n"
"uvolněny až po vydání distribuce. Mohou obsahovat bezpečnostní\n"
"aktualizace nebo opravy chyb.\n"
"\n"
"Chcete-li získat tyto balíčky, musíte mít k dispozici funkční připojení\n"
"k Internetu.\n"
"\n"
"Chcete nainstalovat aktualizace?"

#: steps_interactive.pm:846
#, c-format
msgid "%s on %s"
msgstr "%s na %s"

#: steps_interactive.pm:878 steps_interactive.pm:885 steps_interactive.pm:898
#: steps_interactive.pm:915 steps_interactive.pm:930
#, c-format
msgid "Hardware"
msgstr "Hardware"

#: steps_interactive.pm:899 steps_interactive.pm:916
#, c-format
msgid "Sound card"
msgstr "Zvuková karta"

#: steps_interactive.pm:919
#, c-format
msgid "Do you have an ISA sound card?"
msgstr "Máte nějakou zvukovou kartu na ISA sběrnici?"

#: steps_interactive.pm:921
#, c-format
msgid ""
"Run \"alsaconf\" or \"sndconfig\" after installation to configure your sound "
"card"
msgstr ""
"Pro nastavení zvukové karty spusťte po instalaci \"alsaconf\" nebo "
"\"sndconfig\""

#: steps_interactive.pm:923
#, c-format
msgid "No sound card detected. Try \"harddrake\" after installation"
msgstr ""
"Nebyla nalezena zvuková karta. Zkuste spustit po instalaci \"harddrake\"."

#: steps_interactive.pm:931
#, c-format
msgid "Graphical interface"
msgstr "Grafické rozhraní"

#: steps_interactive.pm:937 steps_interactive.pm:948
#, c-format
msgid "Network & Internet"
msgstr "Síť & Internet"

#: steps_interactive.pm:949
#, c-format
msgid "Proxies"
msgstr "Proxy"

#: steps_interactive.pm:950
#, c-format
msgid "configured"
msgstr "nastaveno"

#: steps_interactive.pm:960
#, c-format
msgid "Security Level"
msgstr "Úroveň zabezpečení"

#: steps_interactive.pm:979
#, c-format
msgid "Firewall"
msgstr "Firewall"

#: steps_interactive.pm:983
#, c-format
msgid "activated"
msgstr "aktivováno"

#: steps_interactive.pm:983
#, c-format
msgid "disabled"
msgstr "vypnuto"

#: steps_interactive.pm:997
#, c-format
msgid "You have not configured X. Are you sure you really want this?"
msgstr ""
"Nemáte nastaveno prostředí X. Chcete jej skutečně ponechat nenastavené?"

#: steps_interactive.pm:1026
#, c-format
msgid "Preparing bootloader..."
msgstr "Připravuji zaváděcí program..."

#: steps_interactive.pm:1027
#, c-format
msgid "Be patient, this may take a while..."
msgstr "Prosím o strpení, může to chvíli trvat…"

#: steps_interactive.pm:1038
#, c-format
msgid ""
"You appear to have an OldWorld or Unknown machine, the yaboot bootloader "
"will not work for you. The install will continue, but you'll need to use "
"BootX or some other means to boot your machine. The kernel argument for the "
"root fs is: root=%s"
msgstr ""
"Zdá se, že máte počítač OldWorld nebo jiný, neznámý, na kterém nebude "
"zavaděč Yaboot pracovat. Instalace bude pokračovat, ale budete potřebovat "
"BootX nebo jiný nástroj pro zavedení systému. Parametr jádra pro kořenový "
"souborový systém je: root=%s"

#: steps_interactive.pm:1051
#, c-format
msgid ""
"In this security level, access to the files in the Windows partition is "
"restricted to the administrator."
msgstr ""
"V této úrovní zabezpečení je přístup k souborům na oddíle s Windows omezena "
"pouze na uživatele administrátor."

#: steps_interactive.pm:1083
#, c-format
msgid "Insert a blank floppy in drive %s"
msgstr "Vložte prázdnou disketu do %s"

#: steps_interactive.pm:1085
#, c-format
msgid "Creating auto install floppy..."
msgstr "Vytvářím disketu pro automatickou instalaci..."

#: steps_interactive.pm:1096
#, c-format
msgid ""
"Some steps are not completed.\n"
"\n"
"Do you really want to quit now?"
msgstr ""
"Některé kroky nebyly dokončeny.\n"
"\n"
"Chcete opravdu nyní skončit?"

#: steps_interactive.pm:1106
#, c-format
msgid "Congratulations"
msgstr "Gratulujeme"

#: steps_interactive.pm:1109
#, c-format
msgid "Reboot"
msgstr "Restartovat"

#. -PO: please keep the following messages very short: they must fit in the left list of the installer!!!
#: steps_list.pm:16
#, c-format
msgid ""
"_: Keep these entry short\n"
"Language"
msgstr "Jazyk"

#: steps_list.pm:16 steps_list.pm:23
#, c-format
msgid "Localization"
msgstr "Lokalizace"

#: steps_list.pm:17
#, c-format
msgid ""
"_: Keep these entry short\n"
"License"
msgstr "Licence"

#: steps_list.pm:18
#, c-format
msgid ""
"_: Keep these entry short\n"
"Mouse"
msgstr "Myš"

#: steps_list.pm:19 steps_list.pm:20
#, c-format
msgid ""
"_: Keep these entry short\n"
"Hard drive detection"
msgstr "Detekce pevných disků"

#: steps_list.pm:21 steps_list.pm:22
#, c-format
msgid ""
"_: Keep these entry short\n"
"Installation class"
msgstr "Třída instalace"

#: steps_list.pm:23
#, c-format
msgid ""
"_: Keep these entry short\n"
"Keyboard"
msgstr "Klávesnice"

#: steps_list.pm:24
#, c-format
msgid ""
"_: Keep these entry short\n"
"Security"
msgstr "Bezpečnost"

#: steps_list.pm:25
#, c-format
msgid ""
"_: Keep these entry short\n"
"Partitioning"
msgstr "Rozdělení disku"

#: steps_list.pm:27 steps_list.pm:28
#, c-format
msgid ""
"_: Keep these entry short\n"
"Formatting"
msgstr "Formátování"

#: steps_list.pm:29
#, c-format
msgid ""
"_: Keep these entry short\n"
"Choosing packages"
msgstr "Výběr balíčků"

#: steps_list.pm:31
#, c-format
msgid ""
"_: Keep these entry short\n"
"Installing"
msgstr "Instaluji"

#: steps_list.pm:34
#, c-format
msgid ""
"_: Keep these entry short\n"
"Users"
msgstr "Uživatelé"

#: steps_list.pm:36 steps_list.pm:37
#, c-format
msgid ""
"_: Keep these entry short\n"
"Networking"
msgstr "Sítě"

#: steps_list.pm:38 steps_list.pm:39
#, c-format
msgid ""
"_: Keep these entry short\n"
"Bootloader"
msgstr "Zaváděcí program"

#: steps_list.pm:40 steps_list.pm:41
#, c-format
msgid ""
"_: Keep these entry short\n"
"Configure X"
msgstr "Nastavení X"

#: steps_list.pm:42
#, c-format
msgid ""
"_: Keep these entry short\n"
"Summary"
msgstr "Souhrn"

#: steps_list.pm:44 steps_list.pm:45
#, c-format
msgid ""
"_: Keep these entry short\n"
"Services"
msgstr "Služby"

#: steps_list.pm:46
#, c-format
msgid ""
"_: Keep these entry short\n"
"Updates"
msgstr "Aktualizace"

#: steps_list.pm:48
#, c-format
msgid ""
"_: Keep these entry short\n"
"Exit"
msgstr "Konec"

#~ msgid "Your desktop on a USB key"
#~ msgstr "Vaše pracovní prostředí na USB klíči"

#~ msgid "The 100%% open source Mageia distribution"
#~ msgstr "Distribuce Mageia se 100%% otevřenými zdrojovými kódy"

#~ msgid "Explore Linux easily with Mageia One"
#~ msgstr "Zkoumejte Linux jednoduše díky Mageia One"

#~ msgid "A full Mageia desktop, with support"
#~ msgstr "Plné pracovní prostředí Mageia, s podporou"

#~ msgid "Mageia: distributions for everybody's needs"
#~ msgstr "Mageia: distribuce pro potřeby všech"

#~ msgid ""
#~ "Office programs: wordprocessors (kword, abiword), spreadsheets (kspread, "
#~ "gnumeric), pdf viewers, etc"
#~ msgstr ""
#~ "Programy pro kancelář: textové procesory (KWord, Abiword), tabulkové "
#~ "procesory (KSpread, Gnumeric), prohlížeče PDF a další"

#~ msgid ""
#~ "You have decided to upgrade your system to %s. KDE 3.5 has been detected\n"
#~ "on your system. This installer cannot preserve KDE 3.5 in an upgrade. If "
#~ "you choose to proceed, \n"
#~ "KDE 4 will replace KDE 3, and you will lose your personal KDE "
#~ "configuration settings. \n"
#~ "To upgrade with KDE 3.5 and your personal settings preserved, \n"
#~ "please reboot your system and upgrade using the Mandriva update applet."
#~ msgstr ""
#~ "Rozhodli jste se aktualizovat váš systém na %s. Na vašem systému bylo "
#~ "nalezeno\n"
#~ "prostředí KDE 3.5. Instalátor nemůže prostředí KDE 3.5 při aktualizaci "
#~ "zachovat. Pokud budete pokračovat,\n"
#~ "bude prostředí KDE 3 nahrazeno verzí KDE 4 a ztratíte tak svá osobní "
#~ "nastavení prostředí KDE.\n"
#~ "Chcete-li provést aktualizaci a zachovat svá osobní nastavení, "
#~ "restartujte prosím systém\n"
#~ "a aktualizujte systém pomocí apletu pro aktualizaci distribuce Mandriva."

#~ msgid "Proceed"
#~ msgstr "Pokračovat"

#~ msgid "retrieval of [%s] failed"
#~ msgstr "získání [%s] selhalo"
) : ())), callbacks => { complete => sub { unless ($menuchoice ne "") { $in->ask_warn('', _("You must choose/enter a printer/device!")); return (1,0); } return 0; }, changed => sub { if ($oldmenuchoice ne $menuchoice) { $device = $menuentries->{$menuchoice}; $oldmenuchoice = $menuchoice; } return 0; } }}, [ ($::expert ? { val => \$device } : ()), { val => \$menuchoice, list => \@menuentrieslist, not_edit => !$::expert, format => \&translate, allow_empty_list => 1, type => 'list' }, (((!$::expert) && ($do_auto_detect) && ($printer->{NEW})) ? { text => _("Manual configuration"), type => 'bool', val => \$manualconf } : ()), ] )) { return 0; } if ($device ne $menuentries->{$menuchoice}) { $menuchoice = ""; $do_auto_detect = 0; } if ($manualconf) { $printer->{MANUAL} = 1; } else { undef $printer->{MANUAL}; } } } #- Check whether the printer is an HP multi-function device and #- configure HPOJ if it is one my $ptaldevice = ""; my $isHPOJ = 0; if (!$do_auto_detect) { local $::isWizard = 0; $isHPOJ = $in->ask_yesorno(_("Local Printer"), _("Is your printer a multi-function device from HP (OfficeJet, PSC, PhotoSmart, LaserJet 1100/1200/1220/3200/3300 with scanner)?"), 0); } if (($menuchoice =~ /HP\s+OfficeJet/i) || ($menuchoice =~ /HP\s+PSC/i) || ($menuchoice =~ /HP\s+PhotoSmart/i) || ($menuchoice =~ /HP\s+LaserJet\s+1100/i) || ($menuchoice =~ /HP\s+LaserJet\s+1200/i) || ($menuchoice =~ /HP\s+LaserJet\s+1220/i) || ($menuchoice =~ /HP\s+LaserJet\s+3200/i) || ($menuchoice =~ /HP\s+LaserJet\s+33.0/i) || ($isHPOJ)) { # Install HPOJ package if ((!$::testing) && (!printer::files_exist((qw(/usr/sbin/ptal-mlcd /etc/ptal-start.conf))))) { my $w = $in->wait_message('', _("Installing HPOJ package...")); $in->do_pkgs->install('hpoj'); } # Configure and start HPOJ my $w = $in->wait_message ('', _("Checking device and configuring HPOJ ...")); $ptaldevice = printer::configure_hpoj($device, @parport); if ($ptaldevice) { # Configure scanning with SANE on the MF device if (($menuchoice =~ /HP\s+OfficeJet\s+[KVRGPD]/i) || ($menuchoice =~ /HP\s+PSC\s+[579]/i)) { # Install SANE if ((!$::testing) && (!printer::files_exist((qw(/usr/bin/scanimage /usr/bin/xscanimage /usr/bin/xsane /etc/sane.d/dll.conf), (printer::files_exist ('/usr/bin/gimp') ? '/usr/bin/xsane-gimp' : ()))))) { my $w = $in->wait_message ('', _("Installing SANE package...")); $in->do_pkgs->install('sane-backends', 'sane-frontends', 'xsane', if_($in->do_pkgs->is_installed ('gimp'),'xsane-gimp')); } # Configure the HP SANE backend printer::config_sane($ptaldevice); } # Inform user about how to scan with his MF device my $text = scanner_help($menuchoice, "ptal:/$ptaldevice"); if ($text) { $in->ask_warn(_("Scanning on your HP multi-function device"), $text); } # make the DeviceURI from $ptaldevice. $printer->{currentqueue}{'connect'} = "ptal:/" . $ptaldevice; } else { # make the DeviceURI from $device. $printer->{currentqueue}{'connect'} = "file:" . $device; } } else { # make the DeviceURI from $device. $printer->{currentqueue}{'connect'} = "file:" . $device; } #- if CUPS is the spooler, make sure that CUPS knows the device if ($printer->{SPOOLER} eq "cups") { my $w = $in->wait_message ('', _("Making printer port available for CUPS ...")); if ($ptaldevice eq "") { printer::assure_device_is_available_for_cups($device); } else { printer::assure_device_is_available_for_cups($ptaldevice); } } #- Read the printer driver database if necessary if ((keys %printer::thedb) == 0) { my $w = $in->wait_message('', _("Reading printer database ...")); printer::read_printer_db($printer->{SPOOLER}); } #- Search the database entry which matches the detected printer best my $descr = ""; foreach (@parport) { $device eq $_->{port} or next; if (($_->{val}{MANUFACTURER}) && ($_->{val}{MODEL})) { $descr = "$_->{val}{MANUFACTURER} $_->{val}{MODEL}"; } else { $descr = $_->{val}{DESCRIPTION}; } # Clean up the description from noise which makes the best match # difficult $descr =~ s/\s+Inc\.//; $descr =~ s/\s+Corp\.//; $descr =~ s/\s+SA\.//; $descr =~ s/\s+S\.\s*A\.//; $descr =~ s/\s+Ltd\.//; $descr =~ s/\s+International//; $descr =~ s/\s+Int\.//; $descr =~ s/\s+[Ss]eries//; $descr =~ s/\s+\(?[Pp]rinter\)?$//; $printer->{DBENTRY} = ""; for my $entry (keys(%printer::thedb)) { if ($entry =~ m!$descr!) { $printer->{DBENTRY} = $entry; last; } } if (!$printer->{DBENTRY}) { $printer->{DBENTRY} = bestMatchSentence ($descr, keys %printer::thedb); } # If the manufacturer was not guessed correctly, discard the # guess. $printer->{DBENTRY} =~ /^([^\|]+)\|/; my $guessedmake = lc($1); if (($descr !~ /$guessedmake/i) && (($guessedmake ne "hp") || ($descr !~ /Hewlett[\s-]+Packard/i))) {$printer->{DBENTRY} = ""}; } #- Pre-fill the "Description" field with the printer's model name if ((!$printer->{currentqueue}{'desc'}) && ($descr)) { $printer->{currentqueue}{'desc'} = $descr; $printer->{currentqueue}{'desc'} =~ s/\|/ /g; } #- When we have chosen a printer here, the question whether the #- automatically chosen model from the database is correct, should #- have "This model is correct" as default answer delete($printer->{MANUALMODEL}); 1; } sub setup_lpd { my ($printer, $in, $upNetwork) = @_; # Check whether the network functionality is configured and # running if (!check_network($printer, $in, $upNetwork)) {return 0}; $in->set_help('setupLPD') if $::isInstall; my ($uri, $remotehost, $remotequeue); my $queue = $printer->{OLD_QUEUE}; if (($printer->{configured}{$queue}) && ($printer->{currentqueue}{'connect'} =~ m/^lpd:/)) { $uri = $printer->{currentqueue}{'connect'}; $uri =~ m!^\s*lpd://([^/]+)/([^/]+)/?\s*$!; $remotehost = $1; $remotequeue = $2; } else { $remotehost = ""; $remotequeue = "lp"; } return if !$in->ask_from(_("Remote lpd Printer Options"), _("To use a remote lpd printer, you need to supply the hostname of the printer server and the printer name on that server."), [ { label => _("Remote host name"), val => \$remotehost }, { label => _("Remote printer name"), val => \$remotequeue } ], complete => sub { unless ($remotehost ne "") { $in->ask_warn('', _("Remote host name missing!")); return (1,0); } unless ($remotequeue ne "") { $in->ask_warn('', _("Remote printer name missing!")); return (1,1); } return 0; } ); #- make the DeviceURI from user input. $printer->{currentqueue}{'connect'} = "lpd://$remotehost/$remotequeue"; #- LPD does not support filtered queues to a remote LPD server by itself #- It needs an additional program as "rlpr" if (($printer->{SPOOLER} eq 'lpd') && (!$::testing) && (!printer::files_exist((qw(/usr/bin/rlpr))))) { $in->do_pkgs->install('rlpr'); } 1; } sub setup_smb { my ($printer, $in, $upNetwork) = @_; # Check whether the network functionality is configured and # running if (!check_network($printer, $in, $upNetwork)) {return 0}; $in->set_help('setupSMB') if $::isInstall; my ($uri, $smbuser, $smbpassword, $workgroup, $smbserver, $smbserverip, $smbshare); my $queue = $printer->{OLD_QUEUE}; if (($printer->{configured}{$queue}) && ($printer->{currentqueue}{'connect'} =~ m/^smb:/)) { $uri = $printer->{currentqueue}{'connect'}; $uri =~ m!^\s*smb://(.*)$!; my $parameters = $1; # Get the user's login and password from the URI if ($parameters =~ m!([^@]*)@([^@]+)!) { my $login = $1; $parameters = $2; if ($login =~ m!([^:]*):([^:]*)!) { $smbuser = $1; $smbpassword = $2; } else { $smbuser = $login; $smbpassword = ""; } } else { $smbuser = ""; $smbpassword = ""; } # Get the workgroup, server, and share name if ($parameters =~ m!([^/]*)/([^/]+)/([^/]+)$!) { $workgroup = $1; $smbserver = $2; $smbshare = $3; } elsif ($parameters =~ m!([^/]+)/([^/]+)$!) { $workgroup = ""; $smbserver = $1; $smbshare = $2; } else { die "The \"smb://\" URI must at least contain the server name and the share name!\n"; } if (network::is_ip($smbserver)) { $smbserverip = $smbserver; $smbserver = ""; } } return if !$in->ask_from(_("SMB (Windows 9x/NT) Printer Options"), _("To print to a SMB printer, you need to provide the SMB host name (Note! It may be different from its TCP/IP hostname!) and possibly the IP address of the print server, as well as the share name for the printer you wish to access and any applicable user name, password, and workgroup information."), [ { label => _("SMB server host"), val => \$smbserver }, { label => _("SMB server IP"), val => \$smbserverip }, { label => _("Share name"), val => \$smbshare }, { label => _("User name"), val => \$smbuser }, { label => _("Password"), val => \$smbpassword, hidden => 1 }, { label => _("Workgroup"), val => \$workgroup }, ], complete => sub { unless ((network::is_ip($smbserverip)) || ($smbserverip eq "")) { $in->ask_warn('', _("IP address should be in format 1.2.3.4")); return (1,1); } unless (($smbserver ne "") || ($smbserverip ne "")) { $in->ask_warn('', _("Either the server name or the server's IP must be given!")); return (1,0); } unless ($smbshare ne "") { $in->ask_warn('', _("Samba share name missing!")); return (1,2); } return 0; } ); #- make the DeviceURI from, try to probe for available variable to #- build a suitable URI. $printer->{currentqueue}{'connect'} = join '', ("smb://", ($smbuser && ($smbuser . ($smbpassword && ":$smbpassword") . "@")), ($workgroup && ("$workgroup/")), ($smbserver || $smbserverip), "/$smbshare"); if ((!$::testing) && (!printer::files_exist((qw(/usr/bin/smbclient))))) { $in->do_pkgs->install('samba-client'); } $printer->{SPOOLER} eq 'cups' and printer::restart_queue($printer); 1; } sub setup_ncp { my ($printer, $in, $upNetwork) = @_; # Check whether the network functionality is configured and # running if (!check_network($printer, $in, $upNetwork)) {return 0}; $in->set_help('setupNCP') if $::isInstall; my ($uri, $ncpuser, $ncppassword, $ncpserver, $ncpqueue); my $queue = $printer->{OLD_QUEUE}; if (($printer->{configured}{$queue}) && ($printer->{currentqueue}{'connect'} =~ m/^ncp:/)) { $uri = $printer->{currentqueue}{'connect'}; my $parameters = $uri =~ m!^\s*ncp://(.*)$!; # Get the user's login and password from the URI if ($parameters =~ m!([^@]*)@([^@]+)!) { my $login = $1; $parameters = $2; if ($login =~ m!([^:]*):([^:]*)!) { $ncpuser = $1; $ncppassword = $2; } else { $ncpuser = $login; $ncppassword = ""; } } else { $ncpuser = ""; $ncppassword = ""; } # Get the workgroup, server, and share name if ($parameters =~ m!([^/]+)/([^/]+)$!) { $ncpserver = $1; $ncpqueue = $2; } else { die "The \"ncp://\" URI must at least contain the server name and the share name!\n"; } } return if !$in->ask_from(_("NetWare Printer Options"), _("To print on a NetWare printer, you need to provide the NetWare print server name (Note! it may be different from its TCP/IP hostname!) as well as the print queue name for the printer you wish to access and any applicable user name and password."), [ { label => _("Printer Server"), val => \$ncpserver }, { label => _("Print Queue Name"), val => \$ncpqueue }, { label => _("User name"), val => \$ncpuser }, { label => _("Password"), val => \$ncppassword, hidden => 1 } ], complete => sub { unless ($ncpserver ne "") { $in->ask_warn('', _("NCP server name missing!")); return (1,0); } unless ($ncpqueue ne "") { $in->ask_warn('', _("NCP queue name missing!")); return (1,1); } return 0; } ); # Generate the Foomatic URI $printer->{currentqueue}{'connect'} = join '', ("ncp://", ($ncpuser && ($ncpuser . ($ncppassword && ":$ncppassword") . "@")), "$ncpserver/$ncpqueue"); if ((!$::testing) && (!printer::files_exist((qw(/usr/bin/nprint))))) { $in->do_pkgs->install('ncpfs'); } 1; } sub setup_socket { my ($printer, $in, $upNetwork) = @_; # Check whether the network functionality is configured and # running if (!check_network($printer, $in, $upNetwork)) {return 0}; $in->set_help('setupSocket') if $::isInstall; my ($hostname, $port, $uri, $remotehost,$remoteport); my $queue = $printer->{OLD_QUEUE}; if (($printer->{configured}{$queue}) && ($printer->{currentqueue}{'connect'} =~ m/^socket:/)) { $uri = $printer->{currentqueue}{'connect'}; ($remotehost, $remoteport) = $uri =~ m!^\s*socket://([^/:]+):([0-9]+)/?\s*$!; } else { $remotehost = ""; $remoteport = "9100"; } return if !$in->ask_from(_("TCP/Socket Printer Options"), _("To print to a TCP or socket printer, you need to provide the host name of the printer and optionally the port number. On HP JetDirect servers the port number is usually 9100, on other servers it can vary. See the manual of your hardware."), [ { label => _("Printer host name"), val => \$remotehost }, { label => _("Port"), val => \$remoteport } ], complete => sub { unless ($remotehost ne "") { $in->ask_warn('', _("Printer host name missing!")); return (1,0); } unless ($remoteport =~ /^[0-9]+$/) { $in->ask_warn('', _("The port number should be an integer!")); return (1,1); } return 0; } ); #- make the Foomatic URI $printer->{currentqueue}{'connect'} = join '', ("socket://$remotehost", $remoteport ? (":$remoteport") : ()); #- LPD and LPRng need netcat ('nc') to access to socket printers if ((($printer->{SPOOLER} eq 'lpd') || ($printer->{SPOOLER} eq 'lprng'))&& (!$::testing) && (!printer::files_exist((qw(/usr/bin/nc))))) { $in->do_pkgs->install('nc'); } 1; } sub setup_uri { my ($printer, $in, $upNetwork) = @_; $in->set_help('setupURI') if $::isInstall; return if !$in->ask_from(_("Printer Device URI"), _("You can specify directly the URI to access the printer. The URI must fulfill either the CUPS or the Foomatic specifications. Note that not all URI types are supported by all the spoolers."), [ { label => _("Printer Device URI"), val => \$printer->{currentqueue}{'connect'}, list => [ $printer->{currentqueue}{'connect'}, "file:/", "http://", "ipp://", "lpd://", "smb://", "ncp://", "socket://", "postpipe:\"\"", ], not_edit => 0 }, ], complete => sub { unless ($printer->{currentqueue}{'connect'} =~ /[^:]+:.+/) { $in->ask_warn('', _("A valid URI must be entered!")); return (1,0); } return 0; } ); # Non-local printer, check network and abort if no network available if (($printer->{currentqueue}{'connect'} !~ m!^file:/!) && (!check_network($printer, $in, $upNetwork))) {return 0}; # If the chosen protocol needs additional software, install it. # LPD does not support filtered queues to a remote LPD server by itself # It needs an additional program as "rlpr" if (($printer->{currentqueue}{'connect'} =~ /^lpd:/) && ($printer->{SPOOLER} eq 'lpd') && (!$::testing) && (!printer::files_exist((qw(/usr/bin/rlpr))))) { $in->do_pkgs->install('rlpr'); } if (($printer->{currentqueue}{'connect'} =~ /^smb:/) && (!$::testing) && (!printer::files_exist((qw(/usr/bin/smbclient))))) { $in->do_pkgs->install('samba-client'); } if (($printer->{currentqueue}{'connect'} =~ /^ncp:/) && (!$::testing) && (!printer::files_exist((qw(/usr/bin/nprint))))) { $in->do_pkgs->install('ncpfs'); } #- LPD and LPRng need netcat ('nc') to access to socket printers if (($printer->{currentqueue}{'connect'} =~ /^socket:/) && (($printer->{SPOOLER} eq 'lpd') || ($printer->{SPOOLER} eq 'lprng')) && (!$::testing) && (!printer::files_exist((qw(/usr/bin/nc))))) { $in->do_pkgs->install('nc'); } 1; } sub setup_postpipe { my ($printer, $in) = @_; $in->set_help('setupPostpipe') if $::isInstall; my $uri; my $commandline; my $queue = $printer->{OLD_QUEUE}; if (($printer->{configured}{$queue}) && ($printer->{currentqueue}{'connect'} =~ m/^postpipe:/)) { $uri = $printer->{currentqueue}{'connect'}; $uri =~ m!^\s*postpipe:\"(.*)\"$!; $commandline = $1; } else { $commandline = ""; } return if !$in->ask_from(_("Pipe into command"), _("Here you can specify any arbitrary command line into which the job should be piped instead of being sent directly to a printer."), [ { label => _("Command line"), val => \$commandline }, ], complete => sub { unless ($commandline ne "") { $in->ask_warn('', _("A command line must be entered!")); return (1,0); } return 0; } ); #- make the Foomatic URI $printer->{currentqueue}{'connect'} = "postpipe:$commandline"; 1; } sub choose_printer_name { my ($printer, $in) = @_; # Name, description, location $in->set_help('setupPrinterName') if $::isInstall; my $default = $printer->{currentqueue}{'queue'}; $in->ask_from_ ( { title => _("Enter Printer Name and Comments"), #cancel => !$printer->{configured}{$queue} ? '' : _("Remove queue"), callbacks => { complete => sub { unless ($printer->{currentqueue}{'queue'} =~ /^\w+$/) { $in->ask_warn('', _("Name of printer should contain only letters, numbers and the underscore")); return (1,0); } local $::isWizard = 0; if (($printer->{configured}{$printer->{currentqueue}{'queue'}}) && ($printer->{currentqueue}{'queue'} ne $default) && (!$in->ask_yesorno('', _("The printer \"%s\" already exists,\ndo you really want to overwrite its configuration?", $printer->{currentqueue}{'queue'}), 0))) { return (1,0); # Let the user correct the name } return 0; }, }, messages => _("Every printer needs a name (for example \"printer\"). The Description and Location fields do not need to be filled in. They are comments for the users.") }, [ { label => _("Name of printer"), val => \$printer->{currentqueue}{'queue'} }, { label => _("Description"), val => \$printer->{currentqueue}{'desc'} }, { label => _("Location"), val => \$printer->{currentqueue}{'loc'} }, ]) or return 0; $printer->{QUEUE} = $printer->{currentqueue}{'queue'}; 1; } sub get_db_entry { my ($printer, $in) = @_; #- Read the printer driver database if necessary if ((keys %printer::thedb) == 0) { my $w = $in->wait_message('', _("Reading printer database ...")); printer::read_printer_db($printer->{SPOOLER}); } my $w = $in->wait_message('', _("Preparing printer database ...")); my $queue = $printer->{OLD_QUEUE}; if ($printer->{configured}{$queue}) { # The queue was already configured if ($printer->{configured}{$queue}{'queuedata'}{'foomatic'}) { # The queue was configured with Foomatic my $driverstr; if ($printer->{configured}{$queue}{'queuedata'}{'driver'} eq "Postscript") { $driverstr = "PostScript"; } else { $driverstr = "GhostScript + $printer->{configured}{$queue}{'queuedata'}{'driver'}"; } my $make = uc($printer->{configured}{$queue}{'queuedata'}{'make'}); my $model = $printer->{configured}{$queue}{'queuedata'}{'model'}; if ($::expert) { $printer->{DBENTRY} = "$make|$model|$driverstr"; # database key contains the "(recommended)" for the # recommended driver, so add it if necessary if (!($printer::thedb{$printer->{DBENTRY}}{printer})) { $printer->{DBENTRY} .= " (recommended)"; } } else { $printer->{DBENTRY} = "$make|$model"; } $printer->{OLD_CHOICE} = $printer->{DBENTRY}; } elsif (($printer->{SPOOLER} eq "cups") && ($::expert) && ($printer->{configured}{$queue}{'queuedata'}{'ppd'})) { # Do we have a native CUPS driver or a PostScript PPD file? $printer->{DBENTRY} = printer::get_descr_from_ppd($printer) || $printer->{DBENTRY}; $printer->{OLD_CHOICE} = $printer->{DBENTRY}; } else { # Point the list cursor at least to manufacturer and model of the # printer $printer->{DBENTRY} = ""; my $make = uc($printer->{configured}{$queue}{'queuedata'}{'make'}); my $model = $printer->{configured}{$queue}{'queuedata'}{'model'}; my $key; for $key (keys %printer::thedb) { if ((($::expert) && ($key =~ /^$make\|$model\|.*\(recommended\)$/)) || ((!$::expert) && ($key =~ /^$make\|$model$/))) { $printer->{DBENTRY} = $key; } } if ($printer->{DBENTRY} eq "") { # Exact match of make and model did not work, try to clean # up the model name $model =~ s/PS//; $model =~ s/PostScript//; $model =~ s/Series//; for $key (keys %printer::thedb) { if ((($::expert) && ($key =~ /^$make\|$model\|.*\(recommended\)$/)) || ((!$::expert) && ($key =~ /^$make\|$model$/))) { $printer->{DBENTRY} = $key; } } } if (($printer->{DBENTRY} eq "") && ($make ne "")) { # Exact match with cleaned-up model did not work, try a best match my $matchstr = "$make|$model"; $printer->{DBENTRY} = bestMatchSentence($matchstr, keys %printer::thedb); # If the manufacturer was not guessed correctly, discard the # guess. $printer->{DBENTRY} =~ /^([^\|]+)\|/; my $guessedmake = lc($1); if (($matchstr !~ /$guessedmake/i) && (($guessedmake ne "hp") || ($matchstr !~ /Hewlett[\s-]+Packard/i))) {$printer->{DBENTRY} = ""}; } # Set the OLD_CHOICE to a non-existing value $printer->{OLD_CHOICE} = "XXX"; } } else { if (($::expert) && ($printer->{DBENTRY} !~ /(recommended)/)) { my ($make, $model) = $printer->{DBENTRY} =~ /^([^\|]+)\|([^\|]+)\|/; for my $key (keys %printer::thedb) { if ($key =~ /^$make\|$model\|.*\(recommended\)$/) { $printer->{DBENTRY} = $key; } } } $printer->{OLD_CHOICE} = $printer->{DBENTRY}; } } sub is_model_correct { my ($printer, $in) = @_; $in->set_help('chooseModel') if $::isInstall; my $dbentry = $printer->{DBENTRY}; $dbentry =~ s/\|/ /g; my $res = $in->ask_from_list_ (_("Your printer model"), _("Printerdrake has compared the model name resulting from the printer auto-detection with the models listed in its printer database to find the best match. This choice can be wrong, especially when your printer is not listed at all in the database. So check whether the choice is correct and click \"The model is correct\" if so and if not, click \"Select model manually\" so that you can choose your printer model manually on the next screen. For your printer Printerdrake has found: %s", $dbentry), [_("The model is correct"), _("Select model manually")], ($printer->{MANUALMODEL} ? _("Select model manually") : _("The model is correct"))); return 0 if !$res; $printer->{MANUALMODEL} = ($res eq _("Select model manually")); 1; } sub choose_model { my ($printer, $in) = @_; $in->set_help('chooseModel') if $::isInstall; #- Read the printer driver database if necessary if ((keys %printer::thedb) == 0) { my $w = $in->wait_message('', _("Reading printer database ...")); printer::read_printer_db($printer->{SPOOLER}); } if (!$printer::thedb{$printer->{DBENTRY}}) { $printer->{DBENTRY} = _("Raw printer (No driver)"); } # Choose the printer/driver from the list return ($printer->{DBENTRY} = $in->ask_from_treelist(_("Printer model selection"), _("Which printer model do you have?") . _(" Please check whether Printerdrake did the auto-detection of your printer model correctly. Search the correct model in the list when the cursor is standing on a wrong model or on \"Raw printer\".") . " " . _("If your printer is not listed, choose a compatible (see printer manual) or a similar one."), '|', [ keys %printer::thedb ], $printer->{DBENTRY})); } sub get_printer_info { my ($printer, $in) = @_; #- Read the printer driver database if necessary #if ((keys %printer::thedb) == 0) { # my $w = $in->wait_message('', _("Reading printer database ...")); # printer::read_printer_db($printer->{SPOOLER}); #} my $queue = $printer->{OLD_QUEUE}; my $oldchoice = $printer->{OLD_CHOICE}; my $newdriver = 0; if ((!$printer->{configured}{$queue}) || # New queue or (($oldchoice) && ($printer->{DBENTRY}) && # make/model/driver changed (($oldchoice ne $printer->{DBENTRY}) || ($printer->{currentqueue}{'driver'} ne $printer::thedb{$printer->{DBENTRY}}{'driver'})))) { delete($printer->{currentqueue}{printer}); delete($printer->{currentqueue}{ppd}); $printer->{currentqueue}{foomatic} = 0; # Read info from printer database foreach (qw(printer ppd driver make model)) { #- copy some parameter, shorter that way... $printer->{currentqueue}{$_} = $printer::thedb{$printer->{DBENTRY}}{$_}; } $newdriver = 1; } # Use the "printer" and not the "foomatic" field to identify a Foomatic # queue because in a new queue "foomatic" is not set yet. if (($printer->{currentqueue}{'printer'}) || # We have a Foomatic queue ($printer->{currentqueue}{'ppd'})) { # We have a CUPS+PPD queue if ($printer->{currentqueue}{'printer'}) { # Foomatic queue? # In case of a new queue "foomatic" was not set yet $printer->{currentqueue}{'foomatic'} = 1; # Now get the options for this printer/driver combo if (($printer->{configured}{$queue}) && ($printer->{configured}{$queue}{'queuedata'}{'foomatic'})) { # The queue was already configured with Foomatic ... if (!$newdriver) { # ... and the user didn't change the printer/driver $printer->{ARGS} = $printer->{configured}{$queue}{'args'}; } else { # ... and the user has chosen another printer/driver $printer->{ARGS} = printer::read_foomatic_options($printer); } } else { # The queue was not configured with Foomatic before # Set some special options $printer->{SPECIAL_OPTIONS} = ''; # Default page size depending on the country/language # (US/Canada -> Letter, Others -> A4) my $pagesize; if ($printer->{PAPERSIZE}) { $printer->{SPECIAL_OPTIONS} .= " -o PageSize=$printer->{PAPERSIZE}"; } elsif (($pagesize = $in->{lang}) || ($pagesize = $ENV{'LC_PAPER'}) || ($pagesize = $ENV{'LANG'}) || ($pagesize = $ENV{'LANGUAGE'}) || ($pagesize = $ENV{'LC_ALL'})) { if (($pagesize =~ /^en_CA/) || ($pagesize =~ /^fr_CA/) || ($pagesize =~ /^en_US/)) { $pagesize = "Letter"; } else { $pagesize = "A4"; } $printer->{SPECIAL_OPTIONS} .= " -o PageSize=$pagesize"; } # oki4w driver -> OKI winprinter which needs the # oki4daemon to work if ($printer->{currentqueue}{'driver'} eq 'oki4w') { if ($printer->{currentqueue}{'connect'} ne 'file:/dev/lp0') { $in->ask_warn(_("OKI winprinter configuration"), _("You are configuring an OKI laser winprinter. These printers\nuse a very special communication protocol and therefore they work only when connected to the first parallel port. When your printer is connected to another port or to a print server box please connect the printer to the first parallel port before you print a test page. Otherwise the printer will not work. Your connection type setting will be ignored by the driver.")); } $printer->{currentqueue}{'connect'} = 'file:/dev/null'; # Start the oki4daemon printer::start_service_on_boot('oki4daemon'); printer::start_service('oki4daemon'); # Set permissions if ($printer->{SPOOLER} eq 'cups') { printer::set_permissions('/dev/oki4drv', '660', 'lp', 'sys'); } elsif ($printer->{SPOOLER} eq 'pdq') { printer::set_permissions('/dev/oki4drv', '666'); } else { printer::set_permissions('/dev/oki4drv', '660', 'lp', 'lp'); } } elsif ($printer->{currentqueue}{'driver'} eq 'lexmarkinkjet') { # Set "Port" option if ($printer->{currentqueue}{'connect'} eq 'file:/dev/lp0') { $printer->{SPECIAL_OPTIONS} .= " -o Port=ParPort1"; } elsif ($printer->{currentqueue}{'connect'} eq 'file:/dev/lp1') { $printer->{SPECIAL_OPTIONS} .= " -o Port=ParPort2"; } elsif ($printer->{currentqueue}{'connect'} eq 'file:/dev/lp2') { $printer->{SPECIAL_OPTIONS} .= " -o Port=ParPort3"; } elsif ($printer->{currentqueue}{'connect'} eq 'file:/dev/usb/lp0') { $printer->{SPECIAL_OPTIONS} .= " -o Port=USB1"; } elsif ($printer->{currentqueue}{'connect'} eq 'file:/dev/usb/lp1') { $printer->{SPECIAL_OPTIONS} .= " -o Port=USB2"; } elsif ($printer->{currentqueue}{'connect'} eq 'file:/dev/usb/lp2') { $printer->{SPECIAL_OPTIONS} .= " -o Port=USB3"; } else { $in->ask_warn(_("Lexmark inkjet configuration"), _("The inkjet printer drivers provided by Lexmark only support local printers, no printers on remote machines or print server boxes. Please connect your printer to a local port or configure it on the machine where it is connected to.")); return 0; } # Set device permissions $printer->{currentqueue}{'connect'} =~ /^\s*file:(\S*)\s*$/; if ($printer->{SPOOLER} eq 'cups') { printer::set_permissions($1, '660', 'lp', 'sys'); } elsif ($printer->{SPOOLER} eq 'pdq') { printer::set_permissions($1, '666'); } else { printer::set_permissions($1, '660', 'lp', 'lp'); } # This is needed to have the device not blocked by the # spooler backend. $printer->{currentqueue}{'connect'} = 'file:/dev/null'; #install packages my $drivertype = $printer->{currentqueue}{'model'}; if ($drivertype eq 'Z22') {$drivertype = 'Z32';} if ($drivertype eq 'Z23') {$drivertype = 'Z33';} $drivertype = lc($drivertype); if (!printer::files_exist("/usr/local/lexmark/$drivertype/$drivertype")) { eval { $in->do_pkgs->install("lexmark-drivers-$drivertype") }; } if (!printer::files_exist("/usr/local/lexmark/$drivertype/$drivertype")) { # Driver installation failed, probably we do not have # the commercial CDs $in->ask_warn(_("Lexmark inkjet configuration"), _("To be able to print with your Lexmark inkjet and this configuration, you need the inkjet printer drivers provided by Lexmark (http://www.lexmark.com/). Go to the US site and click on the \"Drivers\" button. Then choose your model and afterwards \"Linux\" as operating system. The drivers come as RPM packages or shell scripts with interactive graphical installation. You do not need to do this configuration by the graphical frontends. Cancel directly after the license agreement. Then print printhead alignment pages with \"lexmarkmaintain\" and adjust the head alignment settings with this program.")); } } $printer->{ARGS} = printer::read_foomatic_options($printer); delete($printer->{SPECIAL_OPTIONS}); } } elsif ($printer->{currentqueue}{'ppd'}) { # CUPS+PPD queue? # If we had a Foomatic queue before, unmark the flag and initialize # the "printer" and "driver" fields $printer->{currentqueue}{'foomatic'} = 0; $printer->{currentqueue}{'printer'} = undef; $printer->{currentqueue}{'driver'} = "CUPS/PPD"; # Now get the options from this PPD file if ($printer->{configured}{$queue}) { # The queue was already configured if ((!$printer->{DBENTRY}) || (!$oldchoice) || ($printer->{DBENTRY} eq $oldchoice)) { # ... and the user didn't change the printer/driver $printer->{ARGS} = printer::read_cups_options($queue); } else { # ... and the user has chosen another printer/driver $printer->{ARGS} = printer::read_cups_options("/usr/share/cups/model/$printer->{currentqueue}{ppd}"); } } else { # The queue was not configured before $printer->{ARGS} = printer::read_cups_options("/usr/share/cups/model/$printer->{currentqueue}{ppd}"); } } } 1; } sub setup_options { my ($printer, $in) = @_; my @simple_options = ("PageSize", # Media properties "MediaType", "Form", "InputSlot", # Trays "Tray", "OutBin", "OutputBin", "FaceUp", "FaceDown", "Collate", "Manual", "ManualFeed", "Manualfeed", "ManualFeeder", "Feeder", "Duplex", # Double-sided printing "Binding", "Tumble", "DoubleSided", "Resolution", # Resolution/Quality "GSResolution", "JCLResolution", "Quality", "PrintQuality", "PrintoutQuality", "QualityType", "ImageType", "stpImageType", "InkType", # Colour/Gray/BW, 4-ink/6-ink "stpInkType", "Mode", "OutputMode", "OutputType", "ColorMode", "ColorModel", "PrintingMode", "Monochrome", "BlackOnly", "Grayscale", "GrayScale", "Colour", "Color", "Gamma", # Lighter/Darker "GammaCorrection", "GammaGeneral", "MasterGamma", "StpGamma", "stpGamma", "EconoMode", # Ink/Toner saving "Economode", "TonerSaving", "JCLEconomode", "HPNup", # Other useful options "InstalledMemory", # Laser printer hardware config "Option1", "Option2", "Option3", "Option4", "Option5", "Option6", "Option7", "Option8", "Option9", "Option10", "Option11", "Option12", "Option13", "Option14", "Option15", "Option16", "Option17", "Option18", "Option19", "Option20", "Option21", "Option22", "Option23", "Option24", "Option25", "Option26", "Option27", "Option28", "Option29", "Option30" ); $in->set_help('setupOptions') if $::isInstall; if (($printer->{currentqueue}{'printer'}) || # We have a Foomatic queue ($printer->{currentqueue}{'ppd'})) { # We have a CUPS+PPD queue # Set up the widgets for the option dialog my @widgets; my @userinputs; my @choicelists; my @shortchoicelists; my $i; for ($i = 0; $i <= $#{$printer->{ARGS}}; $i++) { my $optshortdefault = $printer->{ARGS}[$i]{'default'}; if ($printer->{ARGS}[$i]{'type'} eq 'enum') { # enumerated option push(@choicelists, []); push(@shortchoicelists, []); my $choice; for $choice (@{$printer->{ARGS}[$i]{'vals'}}) { push(@{$choicelists[$i]}, $choice->{'comment'}); push(@{$shortchoicelists[$i]}, $choice->{'value'}); if ($choice->{'value'} eq $optshortdefault) { push(@userinputs, $choice->{'comment'}); } } push(@widgets, { label => $printer->{ARGS}[$i]{'comment'}, val => \$userinputs[$i], not_edit => 1, list => \@{$choicelists[$i]}, advanced => !member($printer->{ARGS}[$i]{'name'}, @simple_options) }); } elsif ($printer->{ARGS}[$i]{'type'} eq 'bool') { # boolean option push(@choicelists, [$printer->{ARGS}[$i]{'name'}, $printer->{ARGS}[$i]{'name_false'}]); push(@shortchoicelists, []); push(@userinputs, $choicelists[$i][1-$optshortdefault]); push(@widgets, { label => $printer->{ARGS}[$i]{'comment'}, val => \$userinputs[$i], not_edit => 1, list => \@{$choicelists[$i]}, advanced => !member($printer->{ARGS}[$i]{'name'}, @simple_options) }); } else { # numerical option push(@choicelists, []); push(@shortchoicelists, []); push(@userinputs, $optshortdefault); push(@widgets, { label => $printer->{ARGS}[$i]{'comment'} . " ($printer->{ARGS}[$i]{'min'} ... " . "$printer->{ARGS}[$i]{'max'})", #type => 'range', #min => $printer->{ARGS}[$i]{'min'}, #max => $printer->{ARGS}[$i]{'max'}, val => \$userinputs[$i], advanced => !member($printer->{ARGS}[$i]{'name'}, @simple_options) }); } } # Show the options dialog. The call-back function does a # range check of the numerical options. my $windowtitle = "$printer->{currentqueue}{'make'} $printer->{currentqueue}{'model'}"; if ($::expert) { my $driver = undef; if ($driver = $printer->{currentqueue}{driver}) { if ($printer->{currentqueue}{foomatic}) { if ($driver eq 'Postscript') { $driver = "PostScript"; } else { $driver = "GhostScript + $driver"; } } elsif ($printer->{currentqueue}{ppd}) { if ($printer->{DBENTRY}) { $printer->{DBENTRY} =~ /^[^\|]*\|[^\|]*\|(.*)$/; $driver = $1; } else { $driver = printer::get_descr_from_ppd($printer); if ($driver =~ /^[^\|]*\|[^\|]*$/) { # No driver info $driver = "CUPS/PPD"; } else { $driver =~ /^[^\|]*\|[^\|]*\|(.*)$/; $driver = $1; } } } } if ($driver) { $windowtitle .= ", $driver"; } } # Do not show the options setup dialog when installing a new printer # in recommended mode without "Manual configuration" turned on. if ((!$printer->{NEW}) or ($::expert) or ($printer->{MANUAL})) { return 0 if !$in->ask_from ($windowtitle, _("Printer default settings You should make sure that the page size and the ink type/printing mode (if available) and also the hardware configuration of laser printers (memory, duplex unit, extra trays) are set correctly. Note that with a very high printout quality/resolution printing can get substantially slower."), \@widgets, complete => sub { my $i; for ($i = 0; $i <= $#{$printer->{ARGS}}; $i++) { if (($printer->{ARGS}[$i]{'type'} eq 'int') || ($printer->{ARGS}[$i]{'type'} eq 'float')) { unless (($printer->{ARGS}[$i]{'type'} ne 'int') || ($userinputs[$i] =~ /^[\-\+]?[0-9]+$/)) { $in->ask_warn('', _("Option %s must be an integer number!", $printer->{ARGS}[$i]{'comment'})); return (1, $i); } unless (($printer->{ARGS}[$i]{'type'} ne 'float') || ($userinputs[$i] =~ /^[\-\+]?[0-9\.]+$/)) { $in->ask_warn('', _("Option %s must be a number!", $printer->{ARGS}[$i]{'comment'})); return (1, $i); } unless (($userinputs[$i] >= $printer->{ARGS}[$i]{'min'}) && ($userinputs[$i] <= $printer->{ARGS}[$i]{'max'})) { $in->ask_warn('', _("Option %s out of range!", $printer->{ARGS}[$i]{'comment'})); return (1, $i); } } } return (0); } ); } # Read out the user's choices and generate the appropriate command # line arguments @{$printer->{currentqueue}{options}} = (); for ($i = 0; $i <= $#{$printer->{ARGS}}; $i++) { push(@{$printer->{currentqueue}{options}}, "-o"); if ($printer->{ARGS}[$i]{'type'} eq 'enum') { # enumerated option my $j; for ($j = 0; $j <= $#{$choicelists[$i]}; $j++) { if ($choicelists[$i][$j] eq $userinputs[$i]) { push(@{$printer->{currentqueue}{options}}, $printer->{ARGS}[$i]{'name'} . "=". $shortchoicelists[$i][$j]); } } } elsif ($printer->{ARGS}[$i]{'type'} eq 'bool') { # boolean option push(@{$printer->{currentqueue}{options}}, $printer->{ARGS}[$i]{'name'} . "=". (($choicelists[$i][0] eq $userinputs[$i]) ? "1" : "0")); } else { # numerical option push(@{$printer->{currentqueue}{options}}, $printer->{ARGS}[$i]{'name'} . "=" . $userinputs[$i]); } } } 1; } sub setasdefault { my ($printer, $in) = @_; $in->set_help('setupAsDefault') if $::isInstall; if (($printer->{DEFAULT} eq '') || # We have no default printer, # so set the current one as default ($in->ask_yesorno('', _("Do you want to set this printer (\"%s\")\nas the default printer?", $printer->{QUEUE}), 0))) { # Ask the user $printer->{DEFAULT} = $printer->{QUEUE}; printer::set_default_printer($printer); } } sub print_testpages { my ($printer, $in, $upNetwork) = @_; $in->set_help('printTestPages') if $::isInstall; # print test pages my $standard = 1; my $altletter = 0; my $alta4 = 0; my $photo = 0; my $ascii = 0; my $res2 = 0; my $res1 = $in->ask_from_ ({ title => _("Test pages"), messages => _("Please select the test pages you want to print. Note: the photo test page can take a rather long time to get printed and on laser printers with too low memory it can even not come out. In most cases it is enough to print the standard test page."), cancel => ((!$printer->{NEW}) ? _("Cancel") : ($::isWizard ? _("<- Previous") : _("No test pages"))), ok => ($::isWizard ? _("Next ->") : _("Print"))}, [ { text => _("Standard test page"), type => 'bool', val => \$standard }, ($::expert ? { text => _("Alternative test page (Letter)"), type => 'bool', val => \$altletter } : ()), ($::expert ? { text => _("Alternative test page (A4)"), type => 'bool', val => \$alta4 } : ()), { text => _("Photo test page"), type => 'bool', val => \$photo }, #{ text => _("Plain text test page"), type => 'bool', # val => \$ascii } ($::isWizard ? { text => _("Do not print any test page"), type => 'bool', val => \$res2 } : ()) ]); $res2 = 1 if (!($standard || $altletter || $alta4 || $photo || $ascii)); if ($res1 && !$res2) { my @lpq_output; { my $w = $in->wait_message('', _("Printing test page(s)...")); $upNetwork and do { &$upNetwork(); undef $upNetwork; sleep(1) }; my $stdtestpage = "/usr/share/printer-testpages/testprint.ps"; my $altlttestpage = "/usr/share/printer-testpages/testpage.ps"; my $alta4testpage = "/usr/share/printer-testpages/testpage-a4.ps"; my $phototestpage = "/usr/share/printer-testpages/photo-testpage.jpg"; my $asciitestpage = "/usr/share/printer-testpages/testpage.asc"; my @testpages; # Install the filter to convert the photo test page to PS if (($photo) && (!$::testing) && (!printer::files_exist((qw(/usr/bin/convert))))) { $in->do_pkgs->install('ImageMagick'); } # set up list of pages to print $standard && push (@testpages, $stdtestpage); $altletter && push (@testpages, $altlttestpage); $alta4 && push (@testpages, $alta4testpage); $photo && push (@testpages, $phototestpage); $ascii && push (@testpages, $asciitestpage); # print the stuff @lpq_output = printer::print_pages($printer, @testpages); } my $dialogtext; if (@lpq_output) { $dialogtext = _("Test page(s) have been sent to the printer. It may take some time before the printer starts. Printing status:\n%s\n\n", @lpq_output); } else { $dialogtext = _("Test page(s) have been sent to the printer. It may take some time before the printer starts.\n"); } if ($printer->{NEW} == 0) { $in->ask_warn('',$dialogtext); return 1; } else { $in->ask_yesorno('',$dialogtext . _("Did it work properly?"), 1) and return 1; } } else { return ($::isWizard ? $res1 : 1) ; } return 2; } sub printer_help { my ($printer, $in) = @_; my $spooler = $printer->{SPOOLER}; my $queue = $printer->{QUEUE}; my $default = $printer->{DEFAULT}; my $raw = 0; my $cupsremote = 0; my $scanning = ""; if ($printer->{configured}{$queue}) { if (($printer->{configured}{$queue}{'queuedata'}{'model'} eq _("Unknown model")) || ($printer->{configured}{$queue}{'queuedata'}{'model'} eq _("Raw printer"))) { $raw = 1; } # Information about scanning with HP's multi-function devices $scanning = scanner_help ($printer->{configured}{$queue}{'queuedata'}{'make'} . " " . $printer->{configured}{$queue}{'queuedata'}{'model'}, $printer->{configured}{$queue}{'queuedata'}{'connect'}); if ($scanning) { $scanning = "\n\n$scanning\n\n"; } } else { $cupsremote = 1; } my $dialogtext; if ($spooler eq "cups") { $dialogtext = _("To print a file from the command line (terminal window) you can either use the command \"%s <file>\" or a graphical printing tool: \"xpp <file>\" or \"kprinter <file>\". The graphical tools allow you to choose the printer and to modify the option settings easily. ", ($queue ne $default ? "lpr -P $queue" : "lpr")) . _("These commands you can also use in the \"Printing command\" field of the printing dialogs of many applications, but here do not supply the file name because the file to print is provided by the application. ") . (!$raw ? _(" The \"%s\" command also allows to modify the option settings for a particular printing job. Simply add the desired settings to the command line, e. g. \"%s <file>\". ", "lpr", ($queue ne $default ? "lpr -P $queue -o option=setting -o switch" : "lpr -o option=setting -o switch")) . (!$cupsremote ? _("To know about the options available for the current printer read either the list shown below or click on the \"Print option list\" button.%s ", $scanning) . printer::lphelp_output($printer) : $scanning . _("Here is a list of the available printing options for the current printer: ") . printer::lphelp_output($printer)) : $scanning); } elsif ($spooler eq "lprng") { $dialogtext = _("To print a file from the command line (terminal window) use the command \"%s <file>\". ", ($queue ne $default ? "lpr -P $queue" : "lpr")) . _("This command you can also use in the \"Printing command\" field of the printing dialogs of many applications. But here do not supply the file name because the file to print is provided by the application. ") . (!$raw ? _(" The \"%s\" command also allows to modify the option settings for a particular printing job. Simply add the desired settings to the command line, e. g. \"%s <file>\". ", "lpr", ($queue ne $default ? "lpr -P $queue -Z option=setting -Z switch" : "lpr -Z option=setting -Z switch")) . _("To get a list of the options available for the current printer click on the \"Print option list\" button." . $scanning) : $scanning); } elsif ($spooler eq "lpd") { $dialogtext = _("To print a file from the command line (terminal window) use the command \"%s <file>\". ", ($queue ne $default ? "lpr -P $queue" : "lpr")) . _("This command you can also use in the \"Printing command\" field of the printing dialogs of many applications. But here do not supply the file name because the file to print is provided by the application. ") . (!$raw ? _(" The \"%s\" command also allows to modify the option settings for a particular printing job. Simply add the desired settings to the command line, e. g. \"%s <file>\". ", "lpr", ($queue ne $default ? "lpr -P $queue -o option=setting -o switch" : "lpr -o option=setting -o switch")) . _("To get a list of the options available for the current printer click on the \"Print option list\" button." . $scanning) : $scanning); } elsif ($spooler eq "pdq") { $dialogtext = _("To print a file from the command line (terminal window) use the command \"%s <file>\" or \"%s <file>\". ", ($queue ne $default ? "pdq -P $queue" : "pdq"), ($queue ne $default ? "lpr -P $queue" : "lpr")) . _("This command you can also use in the \"Printing command\" field of the printing dialogs of many applications. But here do not supply the file name because the file to print is provided by the application. ") . _("You can also use the graphical interface \"xpdq\" for setting options and handling printing jobs. If you are using KDE as desktop environment you have a \"panic button\", an icon on the desktop, labeled with \"STOP Printer!\", which stops all print jobs immediately when you click it. This is for example useful for paper jams. ") . (!$raw ? _(" The \"%s\" and \"%s\" commands also allow to modify the option settings for a particular printing job. Simply add the desired settings to the command line, e. g. \"%s <file>\". ", "pdq", "lpr", ($queue ne $default ? "pdq -P $queue -aoption=setting -oswitch" : "pdq -aoption=setting -oswitch")) . _("To know about the options available for the current printer read either the list shown below or click on the \"Print option list\" button.%s ", $scanning) . printer::pdqhelp_output($printer) : $scanning); } if (!$raw && !$cupsremote) { my $choice; while ($choice ne _("Close")) { $choice = $in->ask_from_list_ (($scanning ? _("Printing/Scanning on \"%s\"", $queue) : _("Printing on the printer \"%s\"", $queue)), $dialogtext, [ _("Print option list"), _("Close") ], _("Close")); if ($choice ne _("Close")) { my $w = $in->wait_message('', _("Printing test page(s)...")); printer::print_optionlist($printer); } } } else { $in->ask_warn(($scanning ? _("Printing/Scanning on \"%s\"", $queue) : _("Printing on the printer \"%s\"", $queue)), $dialogtext); } } sub scanner_help { my ($makemodel, $deviceuri) = @_; if ($deviceuri =~ m!^ptal:/(.*)$!) { my $ptaldevice = $1; if (($makemodel =~ /HP\s+OfficeJet\s+[KVRGP]/i) || ($makemodel =~ /HP\s+PSC\s+[579]/i)) { # SANE-driven models return _("Your HP multi-function device was configured automatically to be able to scan. Now you can scan with \"scanimage\" (\"scanimage -d hp:%s\" to specify the scanner when you have more than one) from the command line or with the graphical interfaces \"xscanimage\" or \"xsane\". If you are using the GIMP, you can also scan by choosing the appropriate point in the \"File\"/\"Acquire\" menu. Call also \"man scanimage\" and \"man sane-hp\" on the command line to get more information. Do not use \"scannerdrake\" for this device!", $ptaldevice); } elsif ($makemodel !~ /HP\s+PhotoSmart/i) { # "ptal-hp"-driven models return _("Your HP multi-function device was configured automatically to be able to scan. Now you can scan from the command line with \"ptal-hp %s scan ...\". Scanning via a graphical interface or from the GIMP is not supported yet for your device. More information you will find in the \"/usr/share/doc/hpoj-0.8/ptal-hp-scan.html\" file on your system. If you have an HP LaserJet 1100 or 1200 you can only scan when you have the scanner option installed. Do not use \"scannerdrake\" for this device!", $ptaldevice); } else { return ""; } } } sub copy_queues_from { my ($printer, $in, $oldspooler) = @_; $in->set_help('copyQueues') if $::isInstall; my $newspooler = $printer->{SPOOLER}; my @oldqueues; my @queueentries; my @queuesselected; my $newspoolerstr; my $oldspoolerstr; my $noninteractive = 0; { my $w = $in->wait_message('', _("Reading printer data ...")); @oldqueues = printer::get_copiable_queues($oldspooler, $newspooler); @oldqueues = sort(@oldqueues); $newspoolerstr = $printer::shortspooler_inv{$newspooler}; $oldspoolerstr = $printer::shortspooler_inv{$oldspooler}; for (@oldqueues) { push (@queuesselected, 1); push (@queueentries, { text => $_, type => 'bool', val => \$queuesselected[$#queuesselected] }); } # LPRng and LPD use the same config files, therefore one sees the # queues of LPD when one uses LPRng and vice versa, but these queues # do not work. So automatically transfer all queues when switching # between LPD and LPRng. if (($oldspooler =~ /^lp/) && ($newspooler =~ /^lp/)) { $noninteractive = 1; } } if ($noninteractive || $in->ask_from_ ({ title => _("Transfer printer configuration"), messages => _("You can copy the printer configuration which you have done for the spooler %s to %s, your current spooler. All the configuration data (printer name, description, location, connection type, and default option settings) is overtaken, but jobs will not be transferred. Not all queues can be transferred due to the following reasons: ", $oldspoolerstr, $newspoolerstr) . ($newspooler eq "cups" ? _("CUPS does not support printers on Novell servers or printers sending the data into a free-formed command. ") : ($newspooler eq "pdq" ? _("PDQ only supports local printers, remote LPD printers, and Socket/TCP printers. ") : _("LPD and LPRng do not support IPP printers. "))) . _("In addition, queues not created with this program or \"foomatic-configure\" cannot be transferred.") . ($oldspooler eq "cups" ? _(" Also printers configured with the PPD files provided by their manufacturers or with native CUPS drivers cannot be transferred.") : ()) . _(" Mark the printers which you want to transfer and click \"Transfer\"."), cancel => _("Do not transfer printers"), ok => _("Transfer") }, \@queueentries )) { my $queuecopied = 0; for (@oldqueues) { if (shift(@queuesselected)) { my $oldqueue = $_; my $newqueue = $_; if ((!$printer->{configured}{$newqueue}) || ($noninteractive) || ($in->ask_from_ ({ title => _("Transfer printer configuration"), messages => _("A printer named \"%s\" already exists under %s. Click \"Transfer\" to overwrite it. You can also type a new name or skip this printer.", $newqueue, $newspoolerstr), ok => _("Transfer"), cancel => _("Skip"), callbacks => { complete => sub { unless ($newqueue =~ /^\w+$/) { $in->ask_warn('', _("Name of printer should contain only letters, numbers and the underscore")); return (1,0); } if (($printer->{configured}{$newqueue}) && ($newqueue ne $oldqueue) && (!$in->ask_yesorno('', _("The printer \"%s\" already exists,\ndo you really want to overwrite its configuration?", $newqueue), 0))) { return (1,0); # Let the user correct the name } return 0; }} }, [{label => _("New printer name"),val => \$newqueue}]))) { { my $w = $in->wait_message('', _("Transferring %s ...", $oldqueue)); printer::copy_foomatic_queue($printer, $oldqueue, $oldspooler, $newqueue) and $queuecopied = 1; } if ($oldqueue eq $printer->{DEFAULT}) { # Make the former default printer the new default # printer if the user does not reject if (($noninteractive) || ($in->ask_yesorno (_("Transfer printer configuration"), _("You have transferred your former default printer (\"%s\"), Should it be also the default printer under the new printing system %s?", $oldqueue, $newspoolerstr), 1))) { $printer->{DEFAULT} = $newqueue; printer::set_default_printer($printer); } } } } } if ($queuecopied) { my $w = $in->wait_message('', _("Refreshing printer data ...")); printer::read_configured_queues($printer); } } } sub start_network { my ($in, $upNetwork) = @_; my $w = $in->wait_message(_("Configuration of a remote printer"), _("Starting network ...")); if ($::isInstall) { return ($upNetwork and do { my $ret = &$upNetwork(); undef $upNetwork; sleep(1); $ret}); } else { return printer::start_service("network"); } } sub check_network { # This routine is called whenever the user tries to configure a remote # printer. It checks the state of the network functionality to assure # that the network is up and running so that the remote printer is # reachable. my ($printer, $in, $upNetwork) = @_; # Any additional dialogs caused by this subroutine should appear as # extra windows and not embedded in the "Add printer" wizard. local $::isWizard = 0; $in->set_help('checkNetwork') if $::isInstall; # First check: Does /etc/sysconfig/network-scripts/draknet_conf exist # (otherwise the network is not configured yet and draknet has to be # started) if (!printer::files_exist("/etc/sysconfig/network-scripts/draknet_conf")) { my $go_on = 0; while (!$go_on) { my $choice = _("Configure the network now"); if ($in->ask_from(_("Network functionality not configured"), _("You are going to configure a remote printer. This needs working network access, but your network is not configured yet. If you go on without network configuration, you will not be able to use the printer which you are configuring now. How do you want to proceed?"), [ { val => \$choice, type => 'list', list => [ _("Configure the network now"), _("Go on without configuring the network") ]} ] )) { if ($choice eq _("Configure the network now")){ if ($::isInstall) { require network::netconnect; network::netconnect::main ($in->{prefix}, $in->{netcnx} ||= {}, $in->{netc}, $in->{mouse}, $in, $in->{intf}, 0, $in->{lang} eq "fr_FR" && $in->{keyboard} eq "fr", 0); } else { system("/usr/sbin/draknet"); } if (printer::files_exist("/etc/sysconfig/network-scripts/draknet_conf")) { $go_on = 1; } } else { return 1; } } else { return 0; } } } # Second check: Is the network running? if (printer::network_running()) {return 1;} # The network is configured now, start it. if (!start_network($in, $upNetwork)) { $in->ask_warn(_("Configuration of a remote printer"), ($::isInstall ? _("The network configuration done during the installation cannot be started now. Please check whether the network gets accessable after booting your system and correct the configuration using the Mandrake Control Center, section \"Network & Internet\"/\"Connection\", and afterwards set up the printer, also using the Mandrake Control Center, section \"Hardware\"/\"Printer\"") : _("The network access was not running and could not be started. Please check your configuration and your hardware. Then try to configure your remote printer again."))); return 0; } # Give a SIGHUP to the daemon and in case of CUPS do also the # automatic configuration of broadcasting/access permissions # The daemon is not really restarted but only SIGHUPped to not # interrupt print jobs. my $w = $in->wait_message(_("Configuration of a remote printer"), _("Restarting printing system ...")); return printer::SIGHUP_daemon($printer->{SPOOLER}); } sub security_check { # Check the security mode and when in "high" or "paranoid" mode ask the # user whether he really wants to configure printing. my ($printer, $in, $spooler) = @_; # Any additional dialogs caused by this subroutine should appear as # extra windows and not embedded in the "Add printer" wizard. local $::isWizard = 0; $in->set_help('securityCheck') if $::isInstall; # Get security level my $security = undef; if ($::isInstall) { $security = $in->{'security'}; } else { $security = printer::get_security_level(); } # Exit silently if the spooler is PDQ if ($spooler eq "pdq") {return 1;} # Exit silently in medium or lower security levels if ((!$security) || ($security < 4)) {return 1;} # Exit silently if the current spooler is already activated for the current # security level if (printer::spooler_in_security_level($spooler, $security)) {return 1;} # Tell user in which security mode he is and ask him whether he really # wants to activate the spooler in the given security mode. Stop the # operation of installing the spooler if he disagrees. my $securitystr = ($security == 4 ? _("high") : _("paranoid")); if ($in->ask_yesorno(_("Installing a printing system in the %s security level", $securitystr), _("You are about to install the printing system %s on a system running in the %s security level. This printing system runs a daemon (background process) which waits for print jobs and handles them. This daemon is also accessable by remote machines through the network and so it is a possible point for attacks. Therefore only a few selected daemons are started by default in this security level. Do you really want to configure printing on this machine?", $printer::shortspooler_inv{$spooler}, $securitystr))) { printer::add_spooler_to_security_level($spooler, $security); my $service; if (($spooler eq "lpr") || ($spooler eq "lprng")) { $service = "lpd"; } else { $service = $spooler; } printer::start_service_on_boot($service); return 1; } else { return 0; } } sub start_spooler_on_boot { # Checks whether the spooler will be started at boot time and if not, # ask the user whether he wants to start the spooler at boot time. my ($printer, $in, $service) = @_; # Any additional dialogs caused by this subroutine should appear as # extra windows and not embedded in the "Add printer" wizard. local $::isWizard = 0; $in->set_help('startSpoolerOnBoot') if $::isInstall; if (!printer::service_starts_on_boot($service)) { if ($in->ask_yesorno(_("Starting the printing system at boot time"), _("The printing system (%s) will not be started automatically when the machine is booted. It is possible that the automatic starting was turned off by changing to a higher security level, because the printing system is a potential point for attacks. Do you want to have the automatic starting of the printing system turned on again?", $printer::shortspooler_inv{$printer->{SPOOLER}}))) { printer::start_service_on_boot($service); } } 1; } sub install_spooler { # installs the default spooler and start its daemon my ($printer, $in, $upNetwork) = @_; if (!$::testing) { # If the user refuses to install the spooler in high or paranoid # security level, exit. if (!security_check($printer, $in, $printer->{SPOOLER})) { return 0; } if ($printer->{SPOOLER} eq "cups") { { my $w = $in->wait_message('', _("Checking installed software...")); if ((!$::testing) && (!printer::files_exist((qw(/usr/lib/cups/cgi-bin/printers.cgi /sbin/ifconfig /usr/bin/xpp /usr/bin/curl), ($::expert ? "/usr/share/cups/model/postscript.ppd.gz" : ()) )))) { $in->do_pkgs->install(('cups', 'net-tools', 'xpp', 'curl', ($::expert ? 'cups-drivers' : ()))); } # Try to start the network when CUPS is the spooler, so that # remote CUPS printers get displayed (especially during # installation) $upNetwork and do { &$upNetwork(); undef $upNetwork; sleep(1); }; # Start daemon printer::start_service("cups"); # Set the CUPS tools as defaults for "lpr", "lpq", "lprm", ... printer::set_alternative("lpr","/usr/bin/lpr-cups"); printer::set_alternative("lpq","/usr/bin/lpq-cups"); printer::set_alternative("lprm","/usr/bin/lprm-cups"); printer::set_alternative("lp","/usr/bin/lp-cups"); printer::set_alternative("cancel","/usr/bin/cancel-cups"); printer::set_alternative("lpstat","/usr/bin/lpstat-cups"); printer::set_alternative("lpc","/usr/sbin/lpc-cups"); # Remove PDQ panic buttons from the user's KDE Desktops printer::pdq_panic_button("remove"); } # Should it be started at boot time? start_spooler_on_boot($printer, $in, "cups"); } elsif ($printer->{SPOOLER} eq "lpd") { { my $w = $in->wait_message('', _("Checking installed software...")); # "lpr" conflicts with "LPRng", remove "LPRng" if ((!$::testing) && (printer::files_exist((qw(/usr/lib/filters/lpf))))) { my $w = $in->wait_message('', _("Removing LPRng...")); $in->do_pkgs->remove_nodeps('LPRng'); } if ((!$::testing) && (!printer::files_exist((qw(/usr/sbin/lpf /usr/sbin/lpd /sbin/ifconfig /usr/bin/gpr /usr/bin/a2ps /usr/bin/convert))))) { $in->do_pkgs->install(('lpr', 'net-tools', 'gpr', 'a2ps', 'ImageMagick')); } # Start daemon printer::restart_service("lpd"); # Set the LPD tools as defaults for "lpr", "lpq", "lprm", ... printer::set_alternative("lpr","/usr/bin/lpr-lpd"); printer::set_alternative("lpq","/usr/bin/lpq-lpd"); printer::set_alternative("lprm","/usr/bin/lprm-lpd"); printer::set_alternative("lpc","/usr/sbin/lpc-lpd"); # Remove PDQ panic buttons from the user's KDE Desktops printer::pdq_panic_button("remove"); } # Should it be started at boot time? start_spooler_on_boot($printer, $in, "lpd"); } elsif ($printer->{SPOOLER} eq "lprng") { { my $w = $in->wait_message('', _("Checking installed software...")); # "LPRng" conflicts with "lpr", remove "lpr" if ((!$::testing) && (printer::files_exist((qw(/usr/sbin/lpf))))) { my $w = $in->wait_message('', _("Removing LPD...")); $in->do_pkgs->remove_nodeps('lpr'); } if ((!$::testing) && (!printer::files_exist((qw(/usr/lib/filters/lpf /usr/sbin/lpd /sbin/ifconfig /usr/bin/gpr /usr/bin/a2ps /usr/bin/convert))))) { $in->do_pkgs->install('LPRng', 'net-tools', 'gpr', 'a2ps', 'ImageMagick'); } # Start daemon printer::restart_service("lpd"); # Set the LPRng tools as defaults for "lpr", "lpq", "lprm", ... printer::set_alternative("lpr","/usr/bin/lpr-lpd"); printer::set_alternative("lpq","/usr/bin/lpq-lpd"); printer::set_alternative("lprm","/usr/bin/lprm-lpd"); printer::set_alternative("lp","/usr/bin/lp-lpd"); printer::set_alternative("cancel","/usr/bin/cancel-lpd"); printer::set_alternative("lpstat","/usr/bin/lpstat-lpd"); printer::set_alternative("lpc","/usr/sbin/lpc-lpd"); # Remove PDQ panic buttons from the user's KDE Desktops printer::pdq_panic_button("remove"); } # Should it be started at boot time? start_spooler_on_boot($printer, $in, "lpd"); } elsif ($printer->{SPOOLER} eq "pdq") { { my $w = $in->wait_message('', _("Checking installed software...")); if ((!$::testing) && (!printer::files_exist((qw(/usr/bin/pdq /usr/X11R6/bin/xpdq))))) { $in->do_pkgs->install('pdq'); } # PDQ has no daemon, so nothing needs to be started # Set the PDQ tools as defaults for "lpr", "lpq", "lprm", ... printer::set_alternative("lpr","/usr/bin/lpr-pdq"); printer::set_alternative("lpq","/usr/bin/lpq-foomatic"); printer::set_alternative("lprm","/usr/bin/lprm-foomatic"); # Add PDQ panic buttons to the user's KDE Desktops printer::pdq_panic_button("add"); } } # Give a SIGHUP to the devfsd daemon to correct the permissions # for the /dev/... files according to the spooler printer::SIGHUP_daemon("devfs"); } 1; } sub setup_default_spooler { my ($printer, $in, $upNetwork) = @_; $in->set_help('setupDefaultSpooler') if $::isInstall; $printer->{SPOOLER} ||= 'cups'; my $oldspooler = $printer->{SPOOLER}; my $str_spooler = $in->ask_from_list_(_("Select Printer Spooler"), _("Which printing system (spooler) do you want to use?"), [ printer::spooler() ], $printer::spooler_inv{$printer->{SPOOLER}}, ) or return; $printer->{SPOOLER} = $printer::spooler{$str_spooler}; # Install the spooler if not done yet if (!install_spooler($printer, $in, $upNetwork)) { $printer->{SPOOLER} = $oldspooler; return; } if ($printer->{SPOOLER} ne $oldspooler) { # Remove the local printers from Star Office/OpenOffice.org printer::removelocalprintersfromapplications($printer); # Get the queues of this spooler { my $w = $in->wait_message('', _("Reading printer data ...")); printer::read_configured_queues($printer); } # Copy queues from former spooler copy_queues_from($printer, $in, $oldspooler); # Re-read the printer database (CUPS has additional drivers, PDQ # has no raw queue) %printer::thedb = (); #my $w = $in->wait_message('', _("Reading printer database ...")); #printer::read_printer_db($printer->{SPOOLER}); } # Save spooler choice printer::set_default_spooler($printer); return $printer->{SPOOLER}; } sub configure_queue { my ($printer, $in) = @_; my $w = $in->wait_message('', _("Configuring printer \"%s\" ...", $printer->{currentqueue}{queue})); $printer->{complete} = 1; printer::configure_queue($printer); $printer->{complete} = 0; } sub install_foomatic { my ($in) = @_; if ((!$::testing) && (!printer::files_exist((qw(/usr/bin/foomatic-configure /usr/lib/perl5/site_perl/5.6.1/Foomatic/DB.pm) )))) { my $w = $in->wait_message('', _("Installing Foomatic ...")); $in->do_pkgs->install('foomatic'); } } sub wizard_close { my ($in, $mode) = @_; # Leave wizard mode with congratulations screen if $mode = 1 $::Wizard_no_previous = 1; $::Wizard_no_cancel = 1; $::Wizard_finished = 1; wizard_congratulations($in) if ($mode == 1); undef $::isWizard; $::WizardWindow->destroy if defined $::WizardWindow; undef $::WizardWindow; }; #- Program entry point for configuration of the printing system. sub main { my ($printer, $in, $ask_multiple_printer, $upNetwork) = @_; # Default printer name, we do not use "lp" so that one can switch the # default printer under LPD without needing to rename another printer. # Under LPD the alias "lp" will be given to the default printer. my $defaultprname = _("Printer"); # printerdrake does not work without foomatic, and for more convenience # we install some more stuff { my $w = $in->wait_message('', _("Checking installed software...")); if ((!$::testing) && (!printer::files_exist((qw(/usr/bin/foomatic-configure /usr/lib/perl5/site_perl/5.6.1/Foomatic/DB.pm /usr/bin/escputil /usr/share/printer-testpages/testprint.ps ), (printer::files_exist("/usr/bin/gimp") ? "/usr/lib/gimp/1.2/plug-ins/print" : ()) )))) { $in->do_pkgs->install('foomatic','printer-utils','printer-testpages', if_($in->do_pkgs->is_installed('gimp'), 'gimpprint')); } # only experts should be asked for the spooler !$::expert and $printer->{SPOOLER} ||= 'cups'; } # If we have chosen a spooler, install it and mark it as default spooler if (($printer->{SPOOLER}) && ($printer->{SPOOLER} ne '')) { if (!install_spooler($printer, $in, $upNetwork)) {return;} printer::set_default_spooler($printer); } # Control variables for the main loop my ($menuchoice, $cursorpos, $queue, $continue, $newqueue, $editqueue, $expertswitch, $menushown) = ('', '::', $defaultprname, 1, 0, 0, 0, 0); # Cursor position in queue modification window my $modify = _("Printer options"); while ($continue) { $newqueue = 0; # When the queue list is not shown, cancelling the printer type # dialog should leave the program $continue = 0; # Get the default printer if (defined($printer->{SPOOLER}) && ($printer->{SPOOLER} ne '') && ((!defined($printer->{DEFAULT})) || ($printer->{DEFAULT} eq ''))) { my $w = $in->wait_message('', _("Preparing PrinterDrake ...")); $printer->{DEFAULT} = printer::get_default_printer($printer); if ($printer->{DEFAULT}) { # If a CUPS system has only remote printers and no default # printer defined, it defines the first printer whose # broadcast signal appeared after the start of the CUPS # daemon, so on every start another printer gets the default # printer. To avoid this, make sure that the default printer # is defined. printer::set_default_printer($printer); } else { $printer->{DEFAULT} = ''; } } # Configure the current printer queues in applications { my $w = $in->wait_message('', _("Configuring applications...")); printer::configureapplications($printer); } if ($editqueue) { # The user was either in the printer modification dialog and did # not close it or he had set up a new queue and said that the test # page didn't come out correctly, so let the user edit the queue. $newqueue = 0; $continue = 1; $editqueue = 0; } else { # Reset modification window cursor when one leaves the window $modify = _("Printer options"); if (!$ask_multiple_printer && %{$printer->{configured} || {}} == ()) { $in->set_help('doYouWantToPrint') if $::isInstall; $newqueue = 1; $menuchoice = $printer->{want} || $in->ask_yesorno(_("Printer"), _("Would you like to configure printing?"), 0) ? "\@addprinter" : "\@quit"; if ($menuchoice ne "\@quit") { $printer->{SPOOLER} ||= setup_default_spooler ($printer, $in, $upNetwork) || return; } } else { # Ask for a spooler when none is defined $printer->{SPOOLER} ||= setup_default_spooler ($printer, $in, $upNetwork) || return; # This entry and the check for this entry have to use # the same translation to work properly my $spoolerentry = _("Printing system: "); # Show a queue list window when there is at least one queue, # when we are in expert mode, or when we are not in the # installation. unless ((!%{$printer->{configured} || {}}) && (!$::expert) && ($::isInstall)) { $in->set_help('mainMenu') if $::isInstall; # Cancelling the printer type dialog should leed to this # dialog $continue = 1; # This is for the "Recommended" installation. When one has # no printer queue printerdrake starts directly adding # a printer and in the end it asks whether one wants to # install another printer. If the user says "Yes", he # arrives in the main menu of printerdrake. From now # on the question is not asked any more but the menu # is shown directly after having done an operation. $menushown = 1; # Initialize the cursor position if (($cursorpos eq "::") && ($printer->{DEFAULT}) && ($printer->{DEFAULT} ne "")) { if ($printer->{configured}{$printer->{DEFAULT}}) { $cursorpos = $printer->{configured}{$printer->{DEFAULT}}{'queuedata'}{'menuentry'} . _(" (Default)"); } elsif ($printer->{SPOOLER} eq "cups") { ($cursorpos) = grep { $_ =~ /!$printer->{DEFAULT}:[^!]*$/ } printer::get_cups_remote_queues($printer); } } # Generate the list of available printers my @printerlist = ( (sort((map {$printer->{configured}{$_}{'queuedata'}{'menuentry'} . ($_ eq $printer->{DEFAULT} ? _(" (Default)") : (""))} keys(%{$printer->{configured} || {}})), ($printer->{SPOOLER} eq "cups" ? printer::get_cups_remote_queues($printer) : ()))) ); my $noprinters = ($#printerlist < 0); # Position the cursor where it were before (in case # a button was pressed). $menuchoice = $cursorpos; # Show the main dialog $in->ask_from_( {title => _("Printerdrake"), messages => ($noprinters ? "" : (($printer->{SPOOLER} eq "cups") ? _("The following printers are configured. Double-click on a printer to change its settings; to make it the default printer; to view information about it; or to make a printer on a remote CUPS server available for Star Office/OpenOffice.org.") : _("The following printers are configured. Double-click on a printer to change its settings; to make it the default printer; or to view information about it."))), cancel => (""), ok => (""), }, # List the queues [ ($noprinters ? () : { val => \$menuchoice, format => \&translate, sort => 0, separator => "!",tree_expanded => 1, quit_if_double_click => 1,allow_empty_list =>1, list => \@printerlist }), { clicked_may_quit => sub { # Save the cursor position $cursorpos = $menuchoice; $menuchoice = "\@addprinter"; 1; }, val => _("Add a new printer") }, ( $printer->{SPOOLER} eq "cups" ? ({ clicked_may_quit => sub { # Save the cursor position $cursorpos = $menuchoice; $menuchoice = "\@refresh"; 1; }, val => _("Refresh printer list (to display all available remote CUPS printers)") }, { clicked_may_quit => sub { # Save the cursor position $cursorpos = $menuchoice; $menuchoice = "\@cupsconfig"; 1; }, val => ($::expert ? _("CUPS configuration") : _("Specify CUPS server")) }) : ()), ( $::expert ? { clicked_may_quit => sub { # Save the cursor position $cursorpos = $menuchoice; $menuchoice = "\@spooler"; 1; }, val => _("Change the printing system") } : ()), ( !$::isInstall ? { clicked_may_quit => sub { $menuchoice = "\@usermode"; 1; }, val => ($::expert ? _("Normal Mode") : _("Expert Mode")) } : ()), { clicked_may_quit => sub { $menuchoice = "\@quit"; 1; }, val => _("Quit") }, ] ); # Toggle expert mode and standard mode if ($menuchoice eq "\@usermode") { $::expert = !$::expert; # Read printer database for the new user mode %printer::thedb = (); #my $w = $in->wait_message('', _("Reading printer database ...")); #printer::read_printer_db($printer->{SPOOLER}); # Re-read printer queues to switch the tree # structure between expert/normal mode. my $w = $in->wait_message('', _("Reading printer data ...")); printer::read_configured_queues($printer); $cursorpos = "::"; next; } } else { #- as there are no printer already configured, Add one #- automatically. $menuchoice = "\@addprinter"; } # Refresh printer list if ($menuchoice eq "\@refresh") { next; } # Configure CUPS if ($menuchoice eq "\@cupsconfig") { config_cups($printer, $in, $upNetwork); next; } # Determine a default name for a new printer queue if ($menuchoice eq "\@addprinter") { $newqueue = 1; my %queues; @queues{map { split '\|', $_ } keys %{$printer->{configured}}} = (); my $i = ''; while ($i < 150) { last unless exists $queues{"$defaultprname$i"}; ++$i; } $queue = "$defaultprname$i"; } # Function to switch to another spooler if ($menuchoice eq "\@spooler") { $printer->{SPOOLER} = setup_default_spooler ($printer, $in, $upNetwork) || $printer->{SPOOLER}; next; } # Rip the queue name out of the chosen menu entry if ($menuchoice =~ /!([^\s!:]+):[^!]*$/) { $queue = $1; # Save the cursor position $cursorpos = $menuchoice; } } # Save the default spooler printer::set_default_spooler($printer); #- Close printerdrake $menuchoice eq "\@quit" and last; } if ($newqueue) { $printer->{NEW} = 1; #- Set default values for a new queue $printer::printer_type_inv{$printer->{TYPE}} or $printer->{TYPE} = printer::default_printer_type($printer); $printer->{currentqueue} = { queue => $queue, foomatic => 0, desc => "", loc => "", make => "", model => "", printer => "", driver => "", connect => "", spooler => $printer->{SPOOLER}, }; #- Set OLD_QUEUE field so that the subroutines for the #- configuration work correctly. $printer->{OLD_QUEUE} = $printer->{QUEUE} = $queue; #- Do all the configuration steps for a new queue step_0: #if ((!$::expert) && (!$::isEmbedded) && (!$::isInstall) && if ((!$::isEmbedded) && (!$::isInstall) && ($in->isa('interactive_gtk'))) { $continue = 1; # Enter wizard mode $::Wizard_pix_up = "wiz_printerdrake.png"; $::Wizard_title = _("Add a new printer"); $::isWizard = 1; # Wizard welcome screen $::Wizard_no_previous = 1; undef $::Wizard_no_cancel; undef $::Wizard_finished; wizard_welcome($printer, $in) or do { wizard_close($in, 0); next; }; undef $::Wizard_no_previous; eval { # eval to catch wizard cancel. The wizard stuff should # be in a separate function with steps. see dragw. # (dams) $printer->{TYPE} = "LOCAL"; step_1: !$::expert or choose_printer_type($printer, $in) or goto step_0; step_2: setup_printer_connection($printer, $in, $upNetwork) or do { goto step_1 if $::expert; goto step_0; }; step_3: if (($::expert) or ($printer->{MANUAL}) or ($printer->{MORETHANONE})) { choose_printer_name($printer, $in) or goto step_2; } get_db_entry($printer, $in); step_3_9: if ((!$::expert) and (!$printer->{MANUAL})) { is_model_correct($printer, $in) or do { goto step_3 if $printer->{MORETHANONE}; goto step_2; } } step_4: # Remember DB entry for "Previous" button in wizard my $dbentry = $printer->{DBENTRY}; if (($::expert) or ($printer->{MANUAL}) or ($printer->{MANUALMODEL})) { choose_model($printer, $in) or do { # Restore DB entry $printer->{DBENTRY} = $dbentry; goto step_3_9 if $printer->{MANUALMODEL}; goto step_3; }; } get_printer_info($printer, $in) or next; step_5: setup_options($printer, $in) or goto step_4; configure_queue($printer, $in); undef $printer->{MANUAL} if $printer->{MANUAL}; $::Wizard_no_previous = 1; setasdefault($printer, $in); $cursorpos = $printer->{configured}{$printer->{QUEUE}}{'queuedata'}{'menuentry'} . ($printer->{QUEUE} eq $printer->{DEFAULT} ? _(" (Default)") : ()); my $testpages = print_testpages($printer, $in, $printer->{TYPE} !~ /LOCAL/ && $upNetwork); if ($testpages == 1) { # User was content with test pages # Leave wizard mode with congratulations screen wizard_close($in, 1); $continue = ($::expert || !$::isInstall || $menushown || $in->ask_yesorno('',_("Do you want to configure another printer?"))); } elsif ($testpages == 2) { # User was not content with test pages # Leave wizard mode without congratulations # screen wizard_close($in, 0); $editqueue = 1; $queue = $printer->{QUEUE}; } }; wizard_close($in, 0) if ($@ =~ /wizcancel/); } else { $printer->{TYPE} = "LOCAL"; !$::expert or choose_printer_type($printer, $in) or next; #- Cancelling the printer connection type window #- should not restart printerdrake in recommended mode, #- it is the first dialog of the sequence there and #- the "Add printer" sequence should be stopped when there #- are no local printers. In expert mode this is the second #- dialog of the sequence. $continue = 1 if ($::expert || !$::isInstall); setup_printer_connection($printer, $in, $upNetwork) or next; #- Cancelling one of the following dialogs should #- restart printerdrake $continue = 1; if (($::expert) or ($printer->{MANUAL}) or ($printer->{MORETHANONE})) { choose_printer_name($printer, $in) or next; } get_db_entry($printer, $in); if ((!$::expert) and (!$printer->{MANUAL})) { is_model_correct($printer, $in) or next; } if (($::expert) or ($printer->{MANUAL}) or ($printer->{MANUALMODEL})) { choose_model($printer, $in) or next; } get_printer_info($printer, $in) or next; setup_options($printer, $in) or next; configure_queue($printer, $in); undef $printer->{MANUAL} if $printer->{MANUAL}; setasdefault($printer, $in); $cursorpos = $printer->{configured}{$printer->{QUEUE}}{'queuedata'}{'menuentry'} . ($printer->{QUEUE} eq $printer->{DEFAULT} ? _(" (Default)") : ()); my $testpages = print_testpages($printer, $in, $printer->{TYPE} !~ /LOCAL/ && $upNetwork); if ($testpages == 1) { # User was content with test pages $continue = ($::expert || !$::isInstall || $menushown || $in->ask_yesorno('',_("Do you want to configure another printer?"))); } elsif ($testpages == 2) { # User was not content with test pages $editqueue = 1; $queue = $printer->{QUEUE}; } }; undef $printer->{MANUAL} if $printer->{MANUAL}; undef $printer->{NOAUTODETECT} if $printer->{NOAUTODETECT}; } else { $printer->{NEW} = 0; # Modify a queue, ask which part should be modified $in->set_help('modifyPrinterMenu') if $::isInstall; # Get some info to display my $infoline; if ($printer->{configured}{$queue}) { # Here we must regenerate the menu entry, because the # parameters can be changed. printer::make_menuentry($printer,$queue); $printer->{configured}{$queue}{'queuedata'}{menuentry} =~ /!([^!]+)$/; $infoline = $1 . ($queue eq $printer->{DEFAULT} ? _(" (Default)") : ()) . ($printer->{configured}{$queue}{'queuedata'}{'desc'} ? ", Descr.: $printer->{configured}{$queue}{'queuedata'}{'desc'}" : ()) . ($printer->{configured}{$queue}{'queuedata'}{'loc'} ? ", Loc.: $printer->{configured}{$queue}{'queuedata'}{'loc'}" : ()) . ($::expert ? ", Driver: $printer->{configured}{$queue}{'queuedata'}{'driver'}" : ()); } else { # The parameters of a remote CUPS queue cannot be changed, # so we can simply take the menu entry. $cursorpos =~ /!([^!]+)$/; $infoline = $1; } if ($in->ask_from_ ({ title => _("Modify printer configuration"), messages => _("Printer %s What do you want to modify on this printer?", $infoline), cancel => _("Close"), ok => _("Do it!") }, [ { val => \$modify, format => \&translate, type => 'list', list => [ ($printer->{configured}{$queue} ? (_("Printer connection type"), _("Printer name, description, location"), ($::expert ? _("Printer manufacturer, model, driver") : _("Printer manufacturer, model")), (($printer->{configured}{$queue}{'queuedata'}{'make'} ne "") && (($printer->{configured}{$queue}{'queuedata'}{'model'} ne _("Unknown model")) && ($printer->{configured}{$queue}{'queuedata'}{'model'} ne _("Raw printer"))) ? _("Printer options") : ())) : ()), (($queue ne $printer->{DEFAULT}) ? _("Set this printer as the default") : ()), ($printer->{configured}{$queue} ? () : (_("Add this printer to Star Office/OpenOffice.org"), _("Remove this printer from Star Office/OpenOffice.org"))), _("Print test pages"), _("Know how to use this printer"), ($printer->{configured}{$queue} ? _("Remove printer") : ()) ] } ] ) ) { # Stay in the queue edit window until the user clicks "Close" # or deletes the queue $editqueue = 1; #- Copy the queue data and work on the copy $printer->{currentqueue} = {}; my $driver; if ($printer->{configured}{$queue}) { printer::copy_printer_params($printer->{configured}{$queue}{'queuedata'}, $printer->{currentqueue}); #- Keep in mind the printer driver which was used, so it #- can be determined whether the driver is only #- available in expert and so for setting the options #- for the driver in recommended mode a special #- treatment has to be applied. $driver = $printer->{currentqueue}{driver}; } #- keep in mind old name of queue (in case of changing) $printer->{OLD_QUEUE} = $printer->{QUEUE} = $queue; #- Reset some variables $printer->{OLD_CHOICE} = undef; $printer->{DBENTRY} = undef; #- Which printer type did we have before (check beginning of #- URI) my $type; if ($printer->{configured}{$queue}) { for $type (qw(file lpd socket smb ncp postpipe)) { if ($printer->{currentqueue}{'connect'} =~ /^$type:/) { $printer->{TYPE} = ($type eq 'file' ? 'LOCAL' : uc($type)); last; } } } # Do the chosen task if ($modify eq _("Printer connection type")) { choose_printer_type($printer, $in) && setup_printer_connection($printer, $in, $upNetwork) && configure_queue($printer, $in); } elsif ($modify eq _("Printer name, description, location")) { choose_printer_name($printer, $in) && configure_queue($printer, $in); # Delete old queue when it was renamed if (lc($printer->{QUEUE}) ne lc($printer->{OLD_QUEUE})) { my $w = $in->wait_message('', _("Removing old printer \"%s\" ...", $printer->{OLD_QUEUE})); printer::remove_queue($printer, $printer->{OLD_QUEUE}); # If the default printer was renamed, correct the # the default printer setting of the spooler if ($queue eq $printer->{DEFAULT}) { $printer->{DEFAULT} = $printer->{QUEUE}; printer::set_default_printer($printer); } $queue = $printer->{QUEUE}; } } elsif (($modify eq _("Printer manufacturer, model, driver")) || ($modify eq _("Printer manufacturer, model"))) { get_db_entry($printer, $in); choose_model($printer, $in) && get_printer_info($printer, $in) && setup_options($printer, $in) && configure_queue($printer, $in); } elsif ($modify eq _("Printer options")) { get_printer_info($printer, $in) && setup_options($printer, $in) && configure_queue($printer, $in); } elsif ($modify eq _("Set this printer as the default")) { $printer->{DEFAULT} = $queue; printer::set_default_printer($printer); $in->ask_warn(_("Default printer"), _("The printer \"%s\" is set as the default printer now.", $queue)); } elsif ($modify eq _("Add this printer to Star Office/OpenOffice.org")) { if (printer::addcupsremotetoapplications ($printer, $queue)) { $in->ask_warn(_("Adding printer to Star Office/OpenOffice.org"), _("The printer \"%s\" was successfully added to Star Office/OpenOffice.org.", $queue)); } else { $in->ask_warn(_("Adding printer to Star Office/OpenOffice.org"), _("Failed to add the printer \"%s\" to Star Office/OpenOffice.org.", $queue)); } } elsif ($modify eq _("Remove this printer from Star Office/OpenOffice.org")) { if (printer::removeprinterfromapplications ($printer, $queue)) { $in->ask_warn(_("Removing printer from Star Office/OpenOffice.org"), _("The printer \"%s\" was successfully removed from Star Office/OpenOffice.org.", $queue)); } else { $in->ask_warn(_("Removing printer from Star Office/OpenOffice.org"), _("Failed to remove the printer \"%s\" from Star Office/OpenOffice.org.", $queue)); } } elsif ($modify eq _("Print test pages")) { print_testpages($printer, $in, $upNetwork); } elsif ($modify eq _("Know how to use this printer")) { printer_help($printer, $in); } elsif ($modify eq _("Remove printer")) { if ($in->ask_yesorno('', _("Do you really want to remove the printer \"%s\"?", $queue), 1)) { { my $w = $in->wait_message('', _("Removing printer \"%s\" ...", $queue)); if (printer::remove_queue($printer, $queue)) { $editqueue = 0; # Define a new default printer if we have # removed the default one if ($queue eq $printer->{DEFAULT}) { my @k = sort(keys(%{$printer->{configured}})); if (@k) { $printer->{DEFAULT} = $k[0]; printer::set_default_printer($printer); } else { $printer->{DEFAULT} = ""; } } # Let the main menu cursor go to the default # position $cursorpos = "::"; } } } } # Make sure that the cursor is still at the same position # in the main menu when one has modified something on the # current printer if (($printer->{QUEUE}) && ($printer->{QUEUE} ne "")) { if ($printer->{configured}{$printer->{QUEUE}}) { $cursorpos = $printer->{configured}{$printer->{QUEUE}}{'queuedata'}{'menuentry'} . ($printer->{QUEUE} eq $printer->{DEFAULT} ? _(" (Default)") : ()); } else { my $s1 = _(" (Default)"); my $s2 = $s1; $s2 =~ s/\(/\\\(/; $s2 =~ s/\)/\\\)/; if (($printer->{QUEUE} eq $printer->{DEFAULT}) && ($cursorpos !~ /$s2/)) { $cursorpos .= $s1; } } } } else { $editqueue = 0; } $continue = ($editqueue || $::expert || !$::isInstall || $menushown || $in->ask_yesorno('',_("Do you want to configure another printer?"))); } # Configure the current printer queue in applications when main menu # will not be shown (During installation in "Recommended" mode) if ($::isInstall && !$::expert && !$menushown && !$continue) { my $w = $in->wait_message('', _("Configuring applications...")); printer::configureapplications($printer); } # Delete some variables $printer->{OLD_QUEUE} = ""; $printer->{QUEUE} = ""; $printer->{TYPE} = ""; $printer->{str_type} = ""; $printer->{currentqueue} = {}; $printer->{DBENTRY} = ""; $printer->{ARGS} = ""; $printer->{complete} = 0; $printer->{OLD_CHOICE} = ""; } # Clean up the $printer data structure for auto-install log for my $queue (keys %{$printer->{configured}}) { for my $item (keys %{$printer->{configured}{$queue}}) { if ($item ne "queuedata") { delete($printer->{configured}{$queue}{$item}); } } if ($printer->{configured}{$queue}{'queuedata'}{'menuentry'}) { delete($printer->{configured}{$queue}{'queuedata'}{'menuentry'}); } } delete($printer->{OLD_QUEUE}); delete($printer->{QUEUE}); delete($printer->{TYPE}); delete($printer->{str_type}); delete($printer->{currentqueue}); delete($printer->{DBENTRY}); delete($printer->{ARGS}); delete($printer->{complete}); delete($printer->{OLD_CHOICE}); delete($printer->{NEW}); delete($printer->{MORETHANONE}); delete($printer->{MANUALMODEL}); #use Data::Dumper; #print "###############################################################################\n", Dumper($printer); }