/usr/share/doc/HOWTO/fr-html/Printing-HOWTO.html is in doc-linux-fr-html 2013.01-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
<meta name="GENERATOR" content="LinuxDoc-Tools 0.9.71">
<title>Printing-HOWTO</title>
</head>
<body>
<h1>Printing-HOWTO</h1>
<h2>Grant Taylor <gtaylor+pht@picante.com>, traduction
Jean-Michel VANSTEENE <J.M.Vansteene@frcl.bull.fr>,
<vanstee@worldnet.fr></h2>
12 Novembre 1997
<h2><a name="s1">1. Introduction</a></h2>
<p>Le Printing-HOWTO devrait contenir tout ce dont vous avez besoin
pour mettre en place les services d'impression sur votre
système Linux. Comme vous vous en doutez peut-être,
ceci est un tantinet plus compliqué que le ``simple''
<i>clic</i> du monde <i>Microsoft</i> et <i>Apple</i>, mais en
contre-partie, c'est beaucoup plus souple et certainement plus
facile à administrer pour les grands réseaux.</p>
<p>Ce document est organisé de façon à ce que
la lecture de la première moitié suffise à la
mise en place d'un système qui ``tourne''. Les choses plus
obscures voire particulières sont concentrées dans la
deuxième moitié. Vous pouvez vous
référer à la table des matière pour les
détails.</p>
<p>Depuis la version 3.x, ce document a été
complètement réécrit et un certain nombre
d'informations ont été retirées. La principale
raison est que l'ancien document faisait une soixantaine de pages
et contenait pas mal de parties redondantes voire inutiles. Ainsi
fait, la sanction est tombée: vous trouverez ici un document
sensiblement plus concis. S'il manque une information qui vous
semble importante, nous vous encourageons soit à parcourir
l'ancien HOWTO, soit à nous envoyer un courrier nous
proposant d'ajouter ladite information. L'adresse du site de G.
Taylor est <code>http://www.picante.com/~gtaylor/pht/</code>.</p>
<p>En vous souhaitant comme à l'accoutumée, moulte
satisfaction dans vos recherches et pleine réussite dans la
configuration de votre imprimante (Note : Désolé :
ça vouloir dire nous espérer toi réussir
configurer imprimante :-)).</p>
<p>Les HOWTOs français peuvent être trouvés en
France, notamment sur les sites</p>
<blockquote>
<pre>
<code> ftp.lip6.fr (/pub/linux/french/docs/HOWTO)
ftp.univ-angers.fr (/pub/linux/french/docs/HOWTO)
</code>
</pre></blockquote>
<h2><a name="ss1.1">1.1 Historique</a></h2>
<p>Ce document est le troisième du nom, c'est à dire
la troisième version complètement revue (en
espérant que sa structure se stabilise un peu). L'histoire
du PHT peut etre brièvement décrite ainsi :</p>
<p>J'ai commencé à écrire le premier HOWTO en
réponse à un nombre assez conséquent de
questions qui avaient été posées dans
comp.os.linux. C'était en fait une FAQ que j'avais
nommée HOWTO. Cette version était disponible
uniquement en ASCII.</p>
<p>Le PHT a ensuite été regroupé avec la FAQ
de LPD écrite par Brian McCauley
<B.A.McCauley@bham.ac.uk>, nous avons continué ce
document de concert pendant à peu près deux ans. Nous
avons alors ajouté à notre document les travaux de
Karl Auer <Karl.Auer@anu.edu.au>. Cette version du PHT
était disponible en TeXInfo, PostScript, HTML, ASCII et
Info.</p>
<p>Après avoir un peu laissé le PHT vieillir pendant
une bonne année, sans avoir pu trouver quelqu'un souhaitant
le maintenir, j'ai décidé de le
réécrire. Cette version est conforme au ``standard''
Linuxdoc-SGML.</p>
<h2><a name="ss1.2">1.2 Copyright</a></h2>
<p>Ce document est sous Copyright (C) 1996 par Grant Taylor. Vous
pouvez le copier et le distribuer tel quel comme vous le souhaitez.
Par contre aucune modification ne peut être faite sans le
consentement de l'auteur sauf si vous supprimez du document toute
marque qui lui fait référence, ainsi qu'au traducteur
et à toutes les personnes citées (y compris les
adresses de courrier électronique) et que vous le diffusez
en votre nom. L'auteur (et le traducteur) ne sauraient être
tenus responsables de propos qui ne sont pas les leurs.</p>
<p>Le coordinateur des HOWTOs est actuellement Greg Hankins
<gregh@sunsite.unc.edu>. Veuillez quand meme ne pas encombrer
sa boite aux lettres de questions sauf de la plus haute importance.
En France, le coordinateur est Eric Dumas <dumas@freenix.fr,
dumas@Linux.EU.Org>.</p>
<h2><a name="s2">2. Qu'est-ce que l'impression sous UNIX ?</a></h2>
<p>Je me permets de consacrer un petit chapitre au B.A.BA de
l'impression sous UNIX et donc sous Linux. Les gourous trouveront
ce chapitre inutile et je les invite à passer au suivant.
Les débutants trouveront l'information suffisante, je
l'espère, pour comprendre comment les données sont
véhiculées vers leur chère imprimante.</p>
<p>La façon la plus simple d'imprimer sous Unix (et donc
Linux) est d'envoyer les données directement au pilote de
l'imprimante.</p>
<blockquote>
<pre>
<code> ls >/dev/lp0
</code>
</pre></blockquote>
<p>Cette méthode a néanmoins un gros
inconvénient : elle ne tire pas parti des
caractéristiques multi-tâches du système
d'exploitation. En effet vous devrez attendre que le tampon de
l'imprimante ait absorbé toutes les données pour
pouvoir continuer à travailler.</p>
<p>Une meilleure méthode consiste à utiliser un spool
d'impression, dont le rôle est de collecter les
données temporairement dans des fichiers afin de les
envoyer, en tâche de fond, à l'imprimante. Lorsque
plusieurs fichiers sont soumis, ils seront imprimés dans
l'ordre de soumission (premier entré, premier sorti). La
zone de spool est donc bien une <b>file</b>. On dit que les travaux
sont dans la <b>file d'impression</b>. Cette méthode met en
jeu deux acteurs : le client (<i>lpr</i>) permet à tout
utilisateur de soumettre des travaux d'impression. Le serveur quant
à lui (<i>lpd</i>) les prend en charge en tâche de
fond. Il récupère les données dans le spool
ainsi que des informations qui lui sont nécessaires pour
l'impression proprement dite.</p>
<p>Nous verrons dans un chapître un peu plus loin comment
tout cela interagit. Arrêtons-nous là pour le moment
et penchons-nous déjà sur le plus important: les
périphériques du système.</p>
<h2><a name="s3">3. Comment Imprimer</a></h2>
<p>Si le démon d'impression de votre machine est
correctement configuré, vous pouvez lire le
<i>Printing-Usage HOWTO</i></p>
<p>
<code><http://www.loria.fr/services/linux/HOWTOFRENCH/Printing-Usage-HOWTO/Printing-Usage-HOWTO.html</code></p>
<p>qui traite plus particulièrement de la commande
<code>lpr</code> et de la manipulation des files d'impression.</p>
<p>Si, par contre, vous venez d'installez un nouveau système
(un qui marche, quoi...) vous souhaitez certainement configurer les
services d'impression. Restez sur cette chaîne :-) ne zappez
pas et allons-y.</p>
<h2><a name="ss3.1">3.1 Les périphériques
d'imprimantes dans le système</a></h2>
<p>Les imprimantes sont souvent rattachées (surtout les
imprimantes personnelles) au port parallèle. Elles sont
gérées par les périphériques de type
<code>/dev/lp?</code>.</p>
<p>Si vous disposez d'une imprimante série, vous utiliserez
bien sûr <code>/dev/ttyS?</code> (ou
<code>/dev/ttys?</code>), et non pas <code>/dev/lp?</code> ni
<code>/dev/cua?</code>. Le majeur de <code>/dev/ttyS?</code> est 4,
celui de <code>/dev/cua?</code> est 5.</p>
<h2><a name="ss3.2">3.2 Le périphérique lp</a></h2>
<h3>Noyaux antérieurs à 2.1.32</h3>
<p>Si vous utilisez une imprimante parallèle, vous devez
disposer d'un noyau Linux compilé avec les gestionnaires de
périphériques d'impression <code>lp</code>.
Verifiez-le à l'aide de la commande</p>
<blockquote>
<pre>
<code> cat /proc/devices
</code>
</pre></blockquote>
<p>qui doit vous montrer un ou plusieurs
périphériques lp. De plus le répertoire
<code>/dev</code> doit comporter la liste des
périphériques <code>/dev/lp0</code>,
<code>/dev/lp1</code>, ...</p>
<p>Sur un système de type XT, <code>LPT1:</code> correspond
à <code>/dev/lp0</code> (majeur 6, mineur 0), alors que sur
un AT, LPT1: correspond à <code>/dev/lp1</code> (majeur 6,
mineur 1).</p>
<blockquote>
<pre>
<code> Nom Majeur Mineur Port
lp0 6 0 0x3bc
lp1 6 1 0x378
lp2 6 2 0x278
</code>
</pre></blockquote>
<p>Le port parallèle peut être géré par
le pilote du noyau de deux manières. D'une part par polling
(scrutation), d'autre part par interruption. La méthode de
gestion par interruption est en théorie plus efficace,
puisque le gestionnaire n'est sollicité par une interruption
qu'au moment où un travail est à effectuer. En
pratique, il semble que ce soit dépendant de la machine.
Dans beaucoup de cas, il n'y a pas tant de différence que
cela.</p>
<p>Un certain nombre d'utilisateurs se sont plaints que leur port
parallèle bidirectionnel n'était pas
détecté lorsqu'ils utilisent un vieux cable
unidirectionnel. Vérifiez que le vôtre est
récent.</p>
<p>Vous ne pourrez pas utiliser les pilotes <code>plip</code> et
<code>lp</code> en même temps. Vous pouvez cependant charger
l'un ou l'autre soit manuellement, soit par <code>kerneld</code>
version 2.x (et noyaux au moins 1.3.x). En configurant les
interruptions avec attention, vous pourrez théoriquement
utilisez plip sur un port et lp sur l'autre. Quelqu'un l'a fait en
modifiant les pilotes... J'attends avec impatience que quelqu'un me
dise comment faire à partir d'une simple et
ingénieuse commande.</p>
<p>Un petit utilitaire appelé <code>tunelp</code> vous
permet, sous le compte super-utilisateur, de régler les
interruptions d'un périphérique <code>lp</code>, le
mode de fonctionnement du pilote, la fréquence de
scrutation, et plein d'autres options...</p>
<p>Avec LILO et LOADLIN, vous pouvez configurer les adresses et
interruptions utilisés par le pilote.</p>
<blockquote>
<pre>
<code> Syntaxe: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]
Par exemple: lp=0x378,0 ou lp=0x278,5,0x378,7 **
</code>
</pre></blockquote>
<p>(**) le port <code>lp0</code> en <code>0x3bc</code> n'est plus
utilisé sur les PC récents.</p>
<p>Si cette caractéristique est utilisée, vous devez
spécifier tous les ports que vous souhaitez utiliser, il n'y
a pas de valeurs par défaut. Vous pouvez invalider un pilote
en indiquant <code>lp=0</code>.</p>
<p>Lorsque le pilote est chargé en tant que module (version
noyau 2 et 1.3.x), il est également possible de
spécifier les lignes d'interruption utilisées soit
dans le fichier <code>/etc/conf.modules</code>, soit sur la ligne
de commande de insmod en utilisant la même syntaxe. Les
paramètres sont <code>io=port0,port1,port2</code> et
<code>irq=irq0,irq1,irq2</code>. Lisez les mages de manuel de
<code>insmod</code> pour plus d'information.</p>
<p>Le code source du pilote de port parallèle se trouve dans
<code>/usr/src/linux/drivers/char/lp.c</code>.</p>
<h3>Noyaux postérieurs à 2.1.32: le
périphérique parport.</h3>
<p>Depuis le noyau 2.1.33 (il existe un patch pour la version
2.0.30), le périphérique lp est simplement un client
du nouveau périphérique <code>parport</code>. L'ajout
de ce <code>parport</code> corrige un certain nombre de
problèmes dont était affublé <code>lp</code> -
il peut partager le port avec d'autres pilotes, il met
dynamiquement en relation les ports parallèles disponibles
avec les numéros de périphériques plutôt
que de forcer une correspondance statique entre addresse
d'entré/sortie et numéro de port, ...</p>
<p>Une prochaine version de ce document devrait couvrir le
<code>parport</code> lorsque j'en aurai utilisé un, mais en
attendant, vous pouvez lire le fichier
<code>Documentation/parport.txt</code> dans les sources du noyau,
ou aller sur le site <i>parport</i> à
<code>http://www.cyberelk.demon.co.uk/parport.html</code></p>
<h2><a name="ss3.3">3.3 Les périphériques
série</a></h2>
<p>Les périphériques série utilisables sont
appelés <code>/dev/ttyS?</code> (les
périphériques <code>/dev/cua?</code> sont aussi
série mais pas utilisables dans ce domaine). L'utilitaire
<code>stty</code> permet de visualiser ou de modifier les
caractértiques d'un port donné.
<code>setserial</code> permet de controler et configurer les IRQ et
adresses d'entrée/sortie si besoin est.
Référez-vous au <i>Serial-HOWTO</i> pour de plus
amples renseignements.</p>
<p>Si vous utilisez une imprimante série lente avec le
contrôle de flux, vous constaterez peut-être que
certaines impressions sont tronquées. Ceci est certainement
dû au port série dont le comportement par
défaut est de purger son tampon des caractères non
transmis dans les 30 secondes après sa fermeture. Une
imprimante trop lente n'aura pas le temps de le vider. Le tampon
peut contenir 4096 caractères.</p>
<p>Si la commande <code>cat file > /dev/ttyS2</code> produit une
sortie correcte pour les fichiers courts et tronquée pour
les longs fichiers, vous êtes peut-être dans ce
cas.</p>
<p>Le délai de 30 secondes peut être ajusté
à l'aide du paramètre ``closing_wait'' (attente
fermeture) de la commande <code>setserial</code> (version 2.12 et
ultérieure).</p>
<p>Notez que les ports série sont généralement
configurés au démarrage de la machine grace à
un appel à <code>setserial</code> dans le fichier
<code>/etc/rc.d/rc.serial</code>. Vous pouvez rajouter toute option
nécessaire dans ce fichier.</p>
<h2><a name="s4">4. Les imprimantes supportées</a></h2>
<p>Le noyau Linux supporte quasiment toutes les imprimantes que
vous pouvez physiquement connecter au port série ou
parallèle. Il y a néanmoins des petites choses
à savoir, notamment certaines imprimantes à
éviter bien qu'elles puissent (électriquement
parlant) communiquer avec Linux. En premier lieu, il existe toute
une génération d'imprimantes incompatibles s'appuyant
sur le ``Windows Printing System'' et qui répondent au label
``pour Windows''. Ces imprimantes ne fonctionnent pas avec Linux.
Elles font travailler l'unité centrale pour des tâches
normalement laissées au microprocesseur de l'imprimante.
Malheureusement ces tâches ne peuvent etre effectuées
que par le pilote du constructeur qui ne tourne que sous Windows.
Conclusion n'achetez pas ce genre d'imprimante pour Linux.</p>
<p>Evidemment, sous Linux, comme d'ailleurs sous tout autre
système, le meilleur choix est d'avoir une imprimante
PostScript. Presquer tous les logiciels Unix produisent du
<i>PostScript</i> et bien évidemment le mieux est d'avoir
une imprimante qui le comprend. Cela simplifie. Malheureusement
<i>PostScript</i> n'est pratiquement pas disponible en dehors du
domaine des imprimantes laser. Et c'est cher. Rassurez-vous, vous
pouvez utiliser toute autre imprimante.</p>
<p>Si vous ne comptez pas avoir de PostScript à imprimer,
vous pouvez connecter une simple imprimante matricielle
retrouvée dans votre grenier. Sinon, comme nous le verrons,
il faudra passer par un logiciel d'interprétation du
<i>PostScript</i> (le plus célèbre est le logiciel
gratuit <i>GhostScript</i> de <i>Alladin software</i>). Utilisez
alors une imprimante reconnue par ce logiciel.</p>
<p>Voir <code>http://www.cs.wisc.edu/~ghost/printer.html</code>
pour des informations mises à jour selon les versions
disponibles et les pilotes en test.</p>
<p>Les imprimantes supportées sont:</p>
<blockquote>
<pre>
<code> Canon BubbleJet BJ10e
Canon BubbleJet BJ200
Canon BubbleJet BJC-210 (4.01) N/B seulement
Canon BubbleJet BJC-240 (3.33, 4.03) N/B seulement
Canon BubbleJet BJC-600
Canon BubbleJet BJC-610 (3.53) 360dpi seulement, N/B & couleur. Voir correctif bjc610.
Canon BubbleJet BJC-4000
Canon BubbleJet BJC-4100 (4.01) pas couleur.
Canon MultiPASS C2500
Canon BJC-240 (5.01)
Canon BJC-70 (5.01)
Canon BubbleJet BJC-800
HP DeskJet (3.33)
HP DeskJet Plus (3.33)
HP DeskJet 500 (3.53)
HP DeskJet Portable (4.01)
HP DeskJet 400 (3.33, 4.03) N/B teste seulement.
HP DeskJet 500C (3.53)
HP DeskJet 540C (3.53)
HP DeskJet 690C (4.03) 1bit/pixel et 32bit/pixel
HP DeskJet 693C (4.03)
HP DeskJet 550C (3.53)
HP DeskJet 560C (3.53)
HP DeskJet 600 (3.53) N/B teste seulement (1bit/pixel or 32bit/pixel)
HP DeskJet 660C (3.53)
HP DeskJet 682C (4.01) Utiliser gamma=0.3
HP DeskJet 683C (3.33, 4.03)
HP DeskJet 693C (4.03) 24bit/pixel
HP DeskJet 850 (3.53) 300dpi
HP DeskJet 870Cse (4.03) (16 ou 32 bits/pixel)
HP DeskJet 850
HP DeskJet 870Cse (4.03)
HP DeskJet 870Cxi (4.03)
HP DeskJet 680 (5.01)
HP DeskJet 500C (3.53)
HP DeskJet 500C (3.53)
HP DeskJet 510 (3.53)
HP DeskJet 520 (3.53)
HP DeskJet 540C (3.53)
HP DeskJet 693C (4.03)
HP DeskJet 600 (3.53)
HP DeskJet 600 (3.53) marges incorrectes
HP DeskJet 870Cse (4.03)
HP LaserJet 5 (4.01) 300dpi ou 600dpi
HP LaserJet 5L (4.03) 300dpi ou 600dpi Marges incorrectes dans GS 3.33. Correct dans GS 4.03.
Oki OL410ex LED printer (4.03) 300dpi ou 600dpi
HP PaintJet XL300
HP DeskJet 600 (3.53) 300dpi OK, 600 dpi tres lent
HP DeskJet 1200C (3.53)
HP DeskJet 1600C (4.03) 24bit/pixel. -dShingling=2 -dDepletion=1 -dPrintQuality=1
Ricoh 4081 laser printer (3.53)
Ricoh 6000 laser printer (3.53)
Epson Stylus Color (3.53)
Epson Stylus Color II (3.53) -r360 -dMicroweave voir devices.txt et GS stcolor FAQ
Epson Stylus 500 (4.03) -r360 or -r720, -dMicroweave voir les notes
d'Alan Williams sur GS. (Ne marche pas avec 3.33.)
Epson Stylus 800 (3.53) -sModel=st800
</code>
</pre></blockquote>
<h2><a name="s5">5. Quel démon d'impression ?</a></h2>
<p>Jusque récemment, le choix sous Linux était simple
puisque tout le monde disposait du seul démon lpd sorti tout
droit et presque tel quel du code BSD Net-2. Aujourd'hui la plupart
des fournisseurs proposent ce logiciel. Mais les choses sont en
train de changer. Les systèmes SVR4 tels que Sun Solaris
sont fournis avec un paquetage logiciel d'impression centré
sur <code>lpsched</code>. D'autre part, sous Linux, quelques
fournisseurs proposent <code>LPRng</code>, une
implémentation beaucoup plus récente et disponible
gratuitement. <code>LPRng</code> est très facilement
administrable notamment sur des plate-formes importantes et
contient du code plus robuste (moins farfelu??) que
<code>lpd</code>.</p>
<p>A l'heure actuelle malgré toutes ces nouveautés,
<code>lpd</code> est certainement ce qui convient le mieux à
la plupart des utilisateurs. Même si ce n'est pas le fin du
fin, il tourne bien une fois configuré et, chose importante,
il est très bien documenté dans les livres sur
Unix.</p>
<p>Pour plus d'information sur <code>LPRng</code>, allez voir sur
<code>http://ltpwww.gsfc.nasa.gov/ltpcf/about/unix/Depotdoc/LPRng/</code>.</p>
<h2><a name="s6">6. L'impression, comment ça marche</a></h2>
<p>Nous considérons ici que vous utilisez la suite
logicielle <code>lpd</code> que nous décrirons d'ailleurs.
Elle est la plus répandue et fonctionne très
bien.</p>
<h2><a name="ss6.1">6.1 Impression locale et impression
distante</a></h2>
<p>L'impression locale permet aux utilisateurs d'envoyer des
travaux d'impression à l'imprimante directement
rattachée à leur machine.</p>
<p>L'impression distante, par contre, permet de soumettre des
travaux d'impression depuis une machine, à une autre machine
sur le réseau, sur laquelle est connectée une
imprimante.</p>
<h2><a name="ss6.2">6.2 De quoi avez vous besoin</a></h2>
<p>Nous supposons que vous savez éditer un fichier texte
sous Linux et que vous avez une bonne compréhension des
notions de droits d'accès et de propriété
(<code>chmod</code>, <code>chown</code>).</p>
<p>Nous supposons également que votre système Linux
fonctionne correctement. En particulier, si vous souhaitez faire de
l'impression distante, que votre réseau fonctionne
déjà.</p>
<p>Consultez à ce propos les nombreuses documentations
disponibles sur le sujet (comme on dit: RTFM, ce qui en bon
francais veut dire LLBD <code>:-)</code>).</p>
<h2><a name="ss6.3">6.3 Les programmes importants</a></h2>
<p>Le système d'impression Unix comprend (au moins) 5
programmes. Ils doivent se trouver à l'endroit décrit
(c'est le mieux) ou dans un répertoire accessible (avec la
variable PATH), appartenir à root (groupe lp), et avoir les
permissions suivantes :</p>
<blockquote>
<pre>
<code> -r-sr-sr-x root lp /usr/bin/lpr
-r-sr-sr-x root lp /usr/bin/lpq
-r-sr-sr-x root lp /usr/bin/lprm
-r-xr-sr-x root lp /usr/sbin/lpc
-rwxr--r-- root lp /usr/sbin/lpd
</code>
</pre></blockquote>
<p>Les quatre premiers sont utilisés pour soumettre,
visualiser, annuler, contrôler les travaux d'impression. Le
dernier est le démon.</p>
<p>Il existe bien entendu des pages de manuel en ligne pour ces
commandes que vous pourrez consulter pour plus d'information. Le
point important à noter est que les commandes
<code>lpr</code>, <code>lpq</code>, <code>lpc</code> et
<code>lprm</code> opèrent sur une imprimante par
défaut nommée <code>lp</code>. La variable
d'environnement <code>PRINTER</code> peut contenir le nom de
l'imprimante que vous avez choisie. La spécification du nom
d'une imprimante sur la ligne de commande surchargera ces
définitions (les imprimantes de l'exemple sont
hors-ligne):</p>
<blockquote>
<pre>
<code> # echo $PRINTER
(vide)
#
# lpq
waiting for lp to become ready (offline ?)
...
# export PRINTER=mon_imprimante
# lpq
waiting for mon_imprimante to become ready (offline ?)
...
# lpq -Plpr0
waiting for lpr0 to become ready (offline ?)
...
</code>
</pre></blockquote>
<h3>Le client et le serveur</h3>
<p>Voici ci-dessous les interactions client - démon</p>
<blockquote>
<pre>
<code> _________
+/BlaBla /+
//________//|
/ / +
+----------------+ +----------+ /
| LPR | |= oo |/
+----------------+ +----------+
| Imprimante
| ^
V |
+----------------+ +------------------+
| LPD |------>------>----| LPD |
+----------------+ +------------------+
Soumission d'un requete d'impression
+----------------+
| LPQ |
+----------------+
\
\_______>______
\
+----------------+ \+------------------+
| LPD | | LPD |
+----------------+ +------------------+
Soumission d'une demande d'information
</code>
</pre></blockquote>
<p>Lorsque le système démarre, <code>lpd</code> est
chargé. Il lit le fichier <code>/etc/printcap</code> (dont
vous trouverez une explication plus loin) qui décrit les
imprimantes connues.</p>
<h3>Les fichiers soumis par le client</h3>
<p>Lorsqu'un programme client soumet un travail d'impression, il
génère deux fichiers qu'il écrit dans le
spool:</p>
<ul>
<li>Un fichier de données qui contient une copie des
données que vous souhaitez soumettre à l'imprimante.
Il s'agit bien d'une copie, ce qui signifie que toute modification
ultérieure de votre fichier n'altérera pas
l'impression.</li>
<li>Un fichier de description du travail à effectuer.</li>
</ul>
<h3>La commande lpr</h3>
<p>La commande <code>lpr</code> soumet un travail d'impression.
Elle se charge de mettre les données à imprimer dans
un fichier dans le spool d'impression. Ces données peuvent
provenir soit d'un fichier (les données sont
dupliquées et toute modification ultérieure du
fichier d'origine n'affectera pas l'impression), soit de
l'entrée standard (stdin). Le démon est averti de
l'existence d'un nouveau fichier et envoie, dès que
possible, les données vers l'imprimante physique (ou la
machine distante).</p>
<p>La taille du spool est bien entendu limitée à la
place disponible sur votre disque dans <code>/usr/spool/</code> ou
à la taille limite spécifiée dans le fichier
de configuration <code>printcap</code>. Vous pouvez
néanmoins imprimer un gros fichier en demandant à
<code>lpr</code> de ne pas dupliquer le fichier. Le démon
d'impression ira alors chercher le fichier que vous indiquez dans
la ligne de commande et non plus dans le spool.</p>
<h3>La commande lpq</h3>
<p>La commande <code>lpq</code> affiche le contenu du spool, pour
une imprimante donnée. Une des informations importantes
fournies est le numéro du travail (job). C'est lui qui
pourra servir à annuler un des travaux soumis, y compris
celui en cours d'impression. Parmi tous les travaux soumis,
l'indication ``active'' indique le travail en cours d'impression
(ou que <code>lpd</code> essaie d'envoyer à
l'impression).</p>
<h3>La commande lprm</h3>
<p>La commande <code>lprm</code> enlève un travail de la
file (et donc le fichier du spool). Vous pouvez soit
spécifier un numéro de job, soit un tiret permettant
de supprimer tous les travaux vous appartenant. Si vous êtes
root, tous les travaux sont supprimés. Pour supprimer les
travaux d'un utilisateur, spécifiez son nom.</p>
<blockquote>
<pre>
<code> # lprm 1
dfA001Aa00484 dequeued
cfA001Aa00484 dequeued
#
</code>
</pre></blockquote>
<p>Le premier fichier contient les données à
imprimer. Il a été créé par
<code>lpr</code>. Le deuxième contient des informations que
le démon utilise pour savoir que faire des données
(impression locale, distante, ...) Consultez le manuel en ligne :
<code>lpd(8)</code>.</p>
<h3>La commande lpc</h3>
<p>La commande <code>lpc</code> permet de contrôler les
travaux en cours ainsi que l'imprimante, et certains aspects de son
utilisation. En particulier, vous pouvez démarrer ou stopper
la sortie des travaux du spool pour l'impression, valider ou
invalider une imprimante, et même modifier l'ordre
d'impression des fichiers. Les commandes suivantes permettent
d'invalider l'impression sur <code>mon_imprimante</code>, de
valider le spool sur <code>ton_imprimante</code>, et de faire
passer le job 37 en début de file:</p>
<blockquote>
<pre>
<code> lpc down mon_imprimante
lpc enable ton_imprimante
lpc topq 37
</code>
</pre></blockquote>
<p><code>lpc</code> peut fonctionner en interactif si aucun
paramètre ne lui est passé. Vous pouvez lire les
pages du manuel en ligne pour obtenir des instructions
complètes. A noter que certaines actions de <code>lpc</code>
sont réservées au super-utilisateur (root).</p>
<h2><a name="ss6.4">6.4 Les répertoires importants</a></h2>
<p>Le répertoire le plus important est le répertoire
de spool, dans lequel les données vont être
stockées avant d'être imprimées. Typiquement,
un système sera configuré pour avoir un
répertoire de spool par imprimante. Cela rend la gestion
plus facile. Sur mon système, par exemple, le
répertoire <code>/usr/spool/lp</code> est le
répertoire principal. Sous ce répertoire, on y trouve
le sous-répertoire <code>lpr0</code>, correspondant à
la déclaration que j'ai faite dans
<code>/etc/printcap</code> pour le répertoire de spool de
mon imprimante.</p>
<p>NDT: Ce qui va suivre décrit une façon de faire
pour donner les bons droits d'accès aux répertoires
de spool. Différentes méthodes sont possibles,
sachant que, comme sous Un*x, beaucoup de choses sont possibles
dans ce domaine, il convient de faire attention de ne pas offrir de
failles à la sécurité de l'ensemble.</p>
<p>Le répertoire de spool doit appartenir à
<code>root</code>, et au groupe <code>lp</code>, avec les droits de
lecture/d'écriture pour utilisateur et groupe, et lecture
seule pour le reste du monde.</p>
<blockquote>
<pre>
<code> chmod ug=rwx,o=rx lpr0
chgrp lp lpr0
drwxrwxr-x 2 root lp 1024 Feb 11 10:51 lpr0/
</code>
</pre></blockquote>
<p>Un autre répertoire doit également être
présent : <code>/usr/spool/lpd</code> avec les mêmes
droits. Vous aurez plus d'informations plus avant dans ce
document.</p>
<h2><a name="ss6.5">6.5 Les fichiers importants</a></h2>
<p>En dehors des programmes que nous avons déjà
évoqués précédemment, quatre fichiers
doivent se trouver dans chaque répertoire de spool. Avec les
versions récentes des gestionnaires d'impression, vous
n'avez pas à vous soucier de ces fichiers. Ils sont
créés automatiquement s'ils n'existent pas :
<code>.seq</code>, <code>errs</code>, <code>lock</code> et
<code>status</code>. Ces fichiers doivent avoir les droits
<code>-rw-rw-r--</code>. Le fichier <code>.seq</code> contient un
compteur pour l'affectation des numéros de jobs. Le fichier
<code>status</code> contient le message devant être
émis par la commande <code>lpc stat</code>. Le fichier
<code>lock</code> est utilisé par le démon pour qu'il
n'imprime qu'un fichier à la fois. Le fichier
<code>errs</code> contient les erreurs survenues sur
l'imprimante.</p>
<p>Le fichier <code>errs</code> n'est pas obligatoire. De plus, il
peut s'appeler comme vous le souhaitez, pourvu que son nom soit
déclaré dans le fichier <code>/etc/printcap</code>
que nous décrirons dans la suite.</p>
<h2><a name="s7">7. Configurer les services d'impression</a></h2>
<p>La configuration minimale pour un système d'impression
permet de mettre des fichiers en file d'impression puis de les
imprimer. Il ne prête aucune attention au fait que votre
imprimante puisse les imprimer (les comprendre même) et ne
vous permettra pas d'imprimer des choses extraordinaires.
Néanmoins, c'est un premier pas.</p>
<h2><a name="ss7.1">7.1 Le fichier
<code>/etc/printcap</code></a></h2>
<p>Le fichier <code>/etc/printcap</code> décrit toutes les
imprimantes que votre système doit connaître. Il peut
être modifié avec votre éditeur
préféré, doit appartenir à root et
avoir les droits suivants:</p>
<blockquote>
<pre>
<code> -rw-r--r-- 1 root system 164 Oct 25 21:23 /etc/printcap
</code>
</pre></blockquote>
<p>Le contenu du fichier semble assez incompréhensible
à première vue. Il respecte effectivement une syntaxe
particulière et malgré les apparences, assez simple
lorsque l'on connaît ! Il n'y a pas toujours de manuels
concernant ce fichier, et cela complique un peu les choses. Un
petit conseil en passant : essayez, dans la mesure du possible de
rendre votre fichier le plus lisible possible, avec des
commentaires. Vous pouvez consulter les pages du manuel en ligne
concernant <code>printcap(5)</code> (ou empressez-vous de les
récupérer si vous ne les avez pas). Plus loin sont
décrits les paramètres importants.</p>
<p>Une entrée de <code>printcap</code> décrit une
imprimante, c'est-à-dire une correspondance nom logique -
imprimante physique, puis décrit la façon de
transmettre les données. Par exemple, une entrée va
décrire le périphérique physique à
utiliser, le répertoire de spool, les traitements à
effectuer sur les données avant impression, ou encore le
répertoire dans lequel seront notifiées les erreurs.
Vous pouvez aussi limiter la quantité de données pour
un job, ou même limiter l'accès d'une imprimante
à une classe d'utilisateurs. Vous trouverez dans la partie
suivante la description des champs.</p>
<p>Il est tout à fait possible d'avoir plusieurs
entrées décrivant différentes façons
d'envoyer des données à une même imprimante
physique. Par exemple, une imprimante physique peut supporter les
formats HP LaserJet et PostScript, en fonction de la
séquence de caractères envoyée au début
d'un travail. Vous définirez donc deux entrées, l'une
permettant de traiter le format HP, l'autre le format
<i>PostScript</i>. Les programmes générant des
données ``HP'' les enverront à l'imprimante HP, ceux
générant des données <i>PostScript</i> les
enverront à l'imprimante <i>PostScript</i>. Toutes les deux
représentent la même imprimante physique.</p>
<p>Les programmes qui modifient les données avant de les
envoyer à l'imprimante physique sont des filtres.</p>
<p>Exemple d'entrée d'un fichier
<code>/etc/printcap</code>:</p>
<blockquote>
<pre>
<code> # LOCAL djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:sh:
</code>
</pre></blockquote>
<p>Ceci définit une imprimante dont les noms sont
<code>lp</code> (par défaut), <code>dj</code> et
<code>deskjet</code>. Les deux derniers sont des alias de la
même imprimante. La file (on dit très souvent le
spool, même en français...) de cette imprimante de
trouve dans le répertoire <code>/var/spool/lpd/dj</code>
(<code>sd</code> signifie spool directory). Le
périphérique utilisé est
<code>/dev/lp0</code>. La page d'en-tête est supprimée
(<code>sh</code>) et aucune limite de taille de fichier n'est
fixée (<code>mx</code>)</p>
<p>Notez que la même entrée pourrait
s'écrire:</p>
<blockquote>
<pre>
<code> lp|dj|deskjet:sd=/var/spool/lpd/dj:mx#0:lp=/dev/lp0:sh:
</code>
</pre></blockquote>
<p>mais c'est moins beau.</p>
<p>Vous pouvez consultez la page de manuel de <code>printcap</code>
sur</p>
<p>
<code>http://www.picante.com/~gtaylor/pht/man/printcap.html</code>.
Toutes les options y sont décrites.</p>
<p>Tous les champs exceptés les noms d'imprimantes sont
entourés de deux-points et repérés par un
symbole de deux lettres suivi du signe égal. Ensuite est
indiquée la valeur qui peut être de type
numérique, booléenne ou chaîne de
caractères:</p>
<blockquote>
<pre>
<code> champ type signification
lp string designe le peripherique d'impression
sd string designe le repertoire de spool
lf string designe le fichier de rapport d'erreurs
if string specifie le nom du filtre d'entree
rm string designe le nom d'un site d'impression distant
rp string designe le nom d'une imprimante distante
sh booleen indique s'il faut supprimer les en-tetes
sf booleen indique s'il faut supprimer les sauts de pages
de fin de travaux
mx numerique indique la taille maximum d'un job
(en blocs = 1Ko sous linux)
</code>
</pre></blockquote>
<h3>Détails sur le champ lp</h3>
<p>Si vous spécifiez <code>/dev/null</code> comme
périphérique, tous les traitements se feront, mais
tout partira à la poubelle. Ca semble ridicule, mais cela
vous permet par exemple de tester une configuration. Lisez le
chapitre ``Imprimantes qui ne sont pas de simples
périphériques''. Si vous désignez une
imprimante distante avec <code>rp</code> et <code>rm</code>,
<code>lp</code> doit contenir <code>:lp=:</code>.</p>
<p>Ne laissez pas ce champ vide en cas d'impression locale, le
démon signalerait une erreur.</p>
<h3>Détails sur le champ lf</h3>
<p>Tout fichier spécifié ici doit exister, sinon le
rapport d'erreurs ne se ferait pas.</p>
<h3>Détails sur le champ if</h3>
<p>Les filtres d'entrée sont des utilitaires transformant
les données qu'il reçoivent sur leur entrée
standard en un format particulier qu'il sortent sur leur sortie
standard. Typiquement, la conversion texte - <i>PostScript</i>
déjà mentionnée.</p>
<p>Si vous spécifiez un filtre d'entrée, le
démon n'envoie pas directement les données au
périphérique. Il exécute le filtre en
dirigeant les donnés sur son entrée standard et en
désignant le périphérique de sortie comme
sortie standard.</p>
<h3>Détails sur les champs rm et rp</h3>
<p>Envoyer des données à une imprimante
rattachée à une machine distante est très
simple: il suffit de spécifier le nom de la machine avec
<code>rm</code> et le nom de l'imprimante avec <code>rp</code>.
S'assurer que l'entrée <code>lp</code> est vide. A noter que
les données seront d'abord mises dans le spool local avant
d'être transférées. Même si votre
imprimante est distante, il faudra également un spool
local.</p>
<h3>Détails sur les champs sh et sf</h3>
<p>Les bannières concernent éventuellement les
utilisations à plusieurs personnes. Elles identifient les
jobs.</p>
<p>La suppression de ces bannières vous permet
d'économiser du papier. Par contre la gestion des sauts de
page sera plus intéressante, surtout si vous utilisez des
traitements de textes qui formatent toujours des pages pleines.
Dans ce cas, pas besoin de saut de page supplémentaire. Vous
auriez sinon une page blanche en fin de chaque travail. Si vous
utilisez des listings ou autres documents, ajouter un saut de page
garantit que chaque travail commancera bien en début de
page.</p>
<h3>Détail sur le champ mx</h3>
<p>Ce champ permet de limiter la taille des données pour
chaque job. Le nombre à spécifier est en blocs de
<code>BUFSIZE</code> (pardon, de 1 Ko) sous Linux. La valeur 0 rend
la taille illimitée, permettant la soumission de travaux
limitée uniquement à la taille du disque. Notez que
la limite concerne la taille des données mises en spool, et
non pas les données envoyées à l'imprimante
physique. Si la limite est dépassée, le fichier est
tronqué avec l'émission d'un message disant:
<code>lpr: <fichier>: copy file is too large</code>.</p>
<p>Cela peut être intéressant pour des imprimantes
physiques en mode texte, notamment si des utilisateurs ou des
programmes créent accidentellement des données trop
volumineuses.</p>
<p>Si vous manquez de mémoire de masse, pourquoi
n'inventeriez-vous pas un filtre qui décompresse ce qu'il a
à envoyer à l'imprimante ? Vous soumettriez alors des
données compressées.</p>
<h2><a name="s8">8. Les filtres</a></h2>
<p>Si avec les explications précédentes, tout marche
c'est formidable, mais en règle général, cela
ne suffit pas. Regardez ci-dessous ce que l'on obtient sur la
DeskJet 500, lorsque j'envoie un fichier texte:</p>
<blockquote>
<pre>
<code>Ceci est la premiere ligne.
Celle-ci est la deuxieme.
Voici la troisieme.
</code>
</pre></blockquote>
<p>Et alors l'impression d'un fichier <i>PostScript</i>... Vous
obtenez le listing complet du code <i>PostScript</i> avec les
même effets d'escalier. Une horreur.</p>
<p>Il faut donc quelque chose de plus et c'est le rôle des
filtres. Les plus observateurs d'entre vous auront peut-être
remarqué l'existence des paramètres <code>if</code>
(input filter) et <code>of</code> (output filter) dans le fichier
printcap. Pour l'instant nous avons besoin de <code>if</code>.</p>
<p>Un filtre est un simple programme exécutable qui lit les
données sur son entrée standard et sort le
résultat sur sa sortie standard.</p>
<p>Commençons par écrire un script que vous
appellerez <code>filtre</code> et qui ajoute des retours chariot
avant chaque caractère fin de ligne. Ceci élimine
l'effet d'escalier.</p>
<blockquote>
<pre>
<code> #!/usr/local/bin/perl
# La ligne ci-dessous doit contenir le chemin complet vers perl
# Ce script doit etre executable: chmod 755 filtre
while(<STDIN>){chop $_; print "$_\r\n";};
# Vous pouvez aussi vouloir terminer avec une fin de page: print "\f";
</code>
</pre></blockquote>
<p>Dans <code>/etc/printcap</code>, l'entrée est
modifiée en conséquence:</p>
<blockquote>
<pre>
<code>lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:if=/var/spool/lpd/dj/filtre:\
:sh:
</code>
</pre></blockquote>
<p>Essayez d'écrire le filtre en shell qui sera plus
efficace que de charger <code>perl</code>. Bon allez, je vous aide
un peu:</p>
<blockquote>
<pre>
<code> #!/bin/sh
if [ "$1" = -c ]; then
cat
else
sed -e s/$/^M/
fi
# echo -ne suppose que /bin/sh correspond a bash
echo -ne \\f
</code>
</pre></blockquote>
<p>Notez que '^M' symbolise le caractère retour-chariot et
non pas un `^' suivi d'un 'M'. Dans emacs, pour saisir ce
caractère, entrez la séquence <code>C-q C-m</code>,
alors que sous vi, entrez <code>C-v C-m</code>. Le test de $1
permet d'invalider l'insertion du retour-chariot par la commande
<code>lpr -l</code> A savoir que <code>lpr</code>
génère des paramètres qui sont passés
au filtre. Par défaut il passe <code>-w0</code>. Si l'option
<code>-l</code> est donnée, il passe <code>-c</code>. Ce
script est traditionnellement nommé
<code>/usr/lib/lpf</code>. Si vous avez plusieurs scripts de la
sorte, une bonne idée consiste à les mettre tous dans
un sous-répertoire, par exemple
<code>/usr/lib/lpd</code>.</p>
<p>Il se peut aussi que votre imprimante puisse passer dans un mode
permettant l'ajout de retour-chariots grâce à une
séquence d'échappement. Voici un exemple de filtre
utilisant la commande <code>echo -ne</code> pour envoyer cette
séquence:</p>
<blockquote>
<pre>
<code> #!/bin/sh
# Filtre pour imprimantes HP, permettant de traiter LF comme CRLF
# La commande echo -ne suppose que /bin/sh correspond a bash
echo -ne \\033&k2G
cat
echo -ne \\f
</code>
</pre></blockquote>
<p>Vous pouvez compliquer les filtres comme bon vous semble. Le
mieux est d'avoir un filtre qui reconnaît le fichier
d'entrée et le convertit au bon format pour votre
imprimante. Un tel filtre est appelé filtre magique. Ne vous
embêtez pas à les écrire vous-même, il en
existe sûrement déjà un qui vous convient.
Allez voir sur
<code>tsx-11.mit.edu:/pub/linux/sources/usr.bin/magic-filter-x.y.tar.gz</code>.</p>
<h2><a name="s9">9. Les fichiers, leur emplacement et les droits
d'accès</a></h2>
<p>Les différences qui existent entre les nombreuses
distributions font que l'on ne peut ici être exhaustif. Je
pense que beaucoup de gens utilisent maintenant les distributions
type <code>slackware</code> et on peut raisonnablement s'appuyer
sur cet exemple.</p>
<p>Pensez à inclure <code>lpd</code> dans le fichier
rc.local après le démarrage éventuel de
<code>syslogd</code>. Voici les fichiers tels que l'on peut les
trouver:</p>
<blockquote>
<pre>
<code> -r-sr-xr-x 1 root lp 9308 Aug 23 21:45 /usr/bin/lpq*
-r-sr-xr-x 1 root lp 10056 Aug 23 21:45 /usr/bin/lpr*
-r-sr-xr-x 1 root lp 8900 Aug 23 21:45 /usr/bin/lprm*
-r-x------ 1 root lp 1596 Aug 23 21:45 /usr/bin/lptest*
-r-xr-sr-x 1 root lp 17160 Aug 23 21:45 /usr/sbin/lpc*
-rwxr--r-- 1 root lp 34072 Aug 23 21:45 /usr/sbin/lpd*
</code>
</pre></blockquote>
<p>et pour chaque répertoire de spool:</p>
<blockquote>
<pre>
<code> /usr/spool/lp/lpr0/
total 5
drwxr-xr-x 2 root lp 1024 Feb 12 15:15 ./
drwxr-xr-x 3 root lp 1024 Sep 2 1993 ../
-rw-r----x 1 root lp 4 Feb 12 15:15 .seq
-rw-r--r-- 1 root lp 3 Feb 13 20:46 lock
-rw-rw-r-- 1 root root 27 Feb 12 15:15 status
</code>
</pre></blockquote>
<p>Ces trois fichiers sont créés par <code>lpr</code>
et <code>lpd</code>. Ils peuvent être absents si vous ne les
avez encore jamais lancés. Avec d'anciennes versions il
fallait exécuter <code>touch</code> sur ces fichiers ou bien
modifier leurs droits. Les bugs concernant ces fichiers ont
maintenant été corrigés dans les versions
récentes.</p>
<p>Il est à noter également que le groupe
d'appartenance était <code>daemon</code> avec d'anciennes
versions, et est maintenant <code>lp</code>.</p>
<p>Ne soyez pas surpris de trouver des choses
légèrement différentes sur votre
système. D'un autre côté, si quelque chose ne
fonctionne pas, pensez à soupçonner ces droits avant
d'affoler nos boîtes aux lettres (Si vous saviez le nombre de
courriers électroniques reçus et dont la solution se
trouve là !).</p>
<p>On peut trouver le programme <code>lpr</code> avec ou sans le
bit setuid(root). En fait ce n'est pas si évident que cela.
Tout dépend des droits et permissions des répertoires
de spool. Autant que je sache, il y a une totale
sécurité avec <code>lpr</code>, même si il est
setuid(root). Donc, à la limite, positionnez le bit pour ne
pas vous soucier des droits d'accès au répertoire de
spool.</p>
<p>Vous êtes libre de mettre les binaires dans les
répertoires que vous voulez, bien qu'ils se trouvent
couramment dans <code>/usr/bin</code> ou <code>/usr/sbin</code>.
(<code>lpc</code> et <code>lpd</code> peuvent se trouver par
exemple dans <code>/etc</code>). Certaines commandes étant
intéressantes pour tout utilisateur, il est bon de les
laisser aux endroits habituels.</p>
<p>Attention toutefois, car les gens qui conçoivent les
distributions sont également libres de choisir. Pensez
à supprimer les anciennes versions, si vous changez de
distribution.</p>
<p>L'emplacement du fichier de verrouillage principal du
démon <code>lpd</code> (<code>lpd.lock</code>), est
fixé en dur dans le code. Il se trouve dans
<code>/var/spool/lpd/lpd.lock</code>. Donc, vous devrez
prévoir un répertoire <code>/var/spool/lpd</code>
même si votre répertoire de spool est
différent. Les binaires anciens mettaient ce fichier dans
<code>/var/spool/lpd.lock</code>/</p>
<p>Typiquement, chez moi, on trouve</p>
<blockquote>
<pre>
<code> /var/spool/lpd/
drwxr-xr-x 4 root lp 1024 Aug 18 1994 ./
drwxr-xr-x 18 root root 1024 Aug 17 1994 ../
-rw-r--r-- 1 root root 3 Feb 14 20:12 lpd.lock
/var/spool/lp/lpr0
drwxr-xr-x 2 root lp 1024 Feb 12 15:15 ./
drwxr-xr-x 3 root lp 1024 Sep 2 1993 ../
-rw-r----x 1 root lp 4 Feb 12 15:15 .seq*
-rw-r--r-- 1 root root 3 Feb 14 20:12 lock
-rw-rw-r-- 1 root root 27 Feb 12 15:15 status
</code>
</pre></blockquote>
<p>Etant donné que l'on jongle en permanence entre
<code>/usr</code> et <code>/var</code>, il est clair qu'un lien
doit exister entre les deux. Soit vous définissez vos
répertoires dans <code>/usr/spool/</code>... et
définissez le lien <code>/var</code> vers <code>/usr</code>,
soit vous mettez tout sous <code>/var/spool/lpd</code>... et
définissez le lien <code>/usr/spool</code> vers
<code>/var/spool</code>.</p>
<p>Si vous avez, comme moi, une partition root (/) et une partition
/usr, les deux cas ne sont pas identiques. Dans le premier, vos
fichiers seront stockés dans la partition de root,
<code>/var</code> etant créé sous <code>/</code>,
dans l'autre, ce sera dans la partition <code>/usr</code>, puisque
<code>/usr</code> est monté. Vous pouvez aussi avoir un
système de fichiers <code>/var</code>
réservé.</p>
<p>Le fichier de configuration principal est
<code>/etc/printcap</code>. Il existe aussi, pour l'impression
distante, les fichiers <code>/etc/hosts.allow</code> et
<code>/etc/hosts.lpd</code>.</p>
<p>Désormais, le répertoire <code>/etc</code> est le
répertoire où sont situés les fichiers de
configuration. Vous pouvez choisir de les mettre ailleurs, mais
définissez toujours un lien symbolique de <code>/etc</code>
vers vos fichiers. Si votre système comporte des binaires
qui vont toujours chercher leur configuration dans
<code>/usr/etc</code> ou <code>/etc/inet</code>, ils sont
sûrement très anciens et vous gagneriez à
mettre votre système à jour.</p>
<h2><a name="s10">10. Ou trouver des filtres d'impression
?</a></h2>
<p>Pas mal de filtres sont déjà rédigés
et disponibles sur <i>Sunsite</i> ou <i>lip6</i> dans
/pub/sunsite/linux/system/printing.</p>
<h2><a name="ss10.1">10.1 Les filtres magiques</a></h2>
<blockquote>
<pre>
<code>Titre: magicfilter
Version: 1.1b
Date-entree: 04APR95
Description: Un filtre d'impression automatique, extensible, parametrable.
Detecte tout type de fichier pour lequel existe un utilitaire
de conversion. Ce filtre est ecrit en C et completement controle'
par un fichier de configuration externe. Cette version
apporte la creation "automagique" de ce fichier
d'apres les logiciels installes sur votre systeme
grace a 'GNU Autoconf'.
Cette version corrige les bogues de la version 1.1/1.1a;
En plus: filtres pour imprimantes PostScript non-ASCII
Auteur: H. Peter Anvin <hpa@zytor.com>
Site-initial: sunsite.unc.edu
53000 /pub/Linux/system/printing/magicfilter-1.1b.tar.gz
licence-copie: GPL
</code>
</pre></blockquote>
<h2><a name="ss10.2">10.2 Les filtres APS</a></h2>
<blockquote>
<pre>
<code>Titre: apsfilter
Version: 4.9.1
Date-entree: Lundi, 10. Juillet 1995, 21:22:35 MET DST
Description: magicfilter for lpd with auto filetype detection
Mots-cles: lpd magicfilter aps apsfilter
Site-initial: sunsite.unc.edu
/pub/Linux/system/printing/
211KB aps-491.tgz
Platformes: C-Compiler, gs Postscript emulator, pbmutils
Licence-copie: GPL
</code>
</pre></blockquote>
<p>Les filtres APS se configurent dans l'entrée <i>if</i> du
fichier <code>/etc/printcap</code> et convertissent la plupart des
types de fichiers connus (texte, <i>PostScript</i>, dvi, gif, ...)
en commandes compréhensibles par votre imprimante.</p>
<h2><a name="ss10.3">10.3 Les filtres EZ-magic</a></h2>
<blockquote>
<pre>
<code>Titre: ez-magic printer filter
Version: 1.0.5
Date-entree: 26 Janvier 1997
Description: ez-magic est un filtre d'impression supportant 8 formats
de fichiers (txt,ps,gif,bmp,pcx,png,jpg,tif).
Il permet l'impression via un reseau (SMB), ou vers une
imprimante locale. Lit depuis un fichier, STDIN ou lpd.
Simple a utiliser et a configurer. Seul un fichier 'script'
est necessaire, pas de multitudes de manuels et pilotes.
Necessite des programmes de conversion (tels que netpbm et
ghostscript). Ecrit en 'bash'. Ajout de nouveaux formats
facile. Preconfigure pour HP DeskJet 870Cse en reseau.
Comparable a apsfilter et autres.
Mots-cles: magic filter, print, graphics, samba, network, smb,
ghostscript, postscript, gif, jpg, simple
Auteur: toby@eskimo.com (Toby Reed)
Maintenu-par: toby@eskimo.com (Toby Reed)
Site-initial: http://www.eskimo.com/~toby/ez-magic-1.0.5.tar.gz
38 kb ez-magic-1.0.5.tar.gz
Site-secondaire:sunsite.unc.edu /pub/Linux/system/printing
38 kb ez-magic-1.0.5.tar.gz
Licence-copie: Copyright, droits complets de manipulation sauf 1 ou 2
restrictions.
</code>
</pre></blockquote>
<h2><a name="s11">11. Les logiciels d'impression</a></h2>
<p>Les logiciels d'impression sont disponibles en France par
exemple sur
<code>ftp://ftp.lip6.fr/pub/linux/sunsite/system/Printing</code>.</p>
<h2><a name="ss11.1">11.1 GhostScript</a></h2>
<p><i>GhostScript</i> est un logiciel majeur pour l'impression sous
Linux. En effet la plupart des logiciels génèrent du
<i>PostScript</i>. Ce logiciel, gratuit, est capable de convertir
le <i>PostScript</i> en langage compréhensible par votre
imprimante (si le pilote est disponible). Il joue le rôle de
filtre afin que vous puissiez considérer votre imprimante
comme <i>PostScript</i>. Ceci vous simplifie grandement la vie.</p>
<p><i>GhostScript</i> est disponible sous deux formes. Une version
commerciale, appelée <i>Alladin GhostScript</i>, peut
être utilisée librement pour des besoins privés
mais ne doit pas être distribuée par les distributions
payantes de Linux. Elle est généralement en avance
d'une année sur la version gratuite.</p>
<p>La version gratuite est sous licence GNU et n'est rien d'autre
qu'une version plus ancienne de <i>Alladin GhostScript</i>.</p>
<h3>Utiliser GhostScript</h3>
<p><code>gs</code> est le nom de l'exécutable. <code>gs
-help</code> vous donne une aide rapide sur les paramètres
disponibles. (La liste des pilotes est la liste des pilotes
compilés avec la version et non la liste
complète.)</p>
<p>Quoi que vous fassiez avec <code>gs</code>, il est
conseillé d'invalider l'accès aux fichiers (par
<code>-dSAFER</code>). En effet <i>PostScript</i> est un langage
pleinement opérationnel et un fichier <i>PostScript</i> peu
scrupuleux peut endommager vos fichiers et vous donner un terrible
mal de crâne..</p>
<p>Exemple de ligne de commande pour un imprimante Stylus 800</p>
<blockquote>
<pre>
<code>gs -dNOPAUSE -sDEVICE=escp2 -sPAPERSIZE=a4 -sOutputFile=/dev/lp1 fichier.ps
</code>
</pre></blockquote>
<h3>Réglages</h3>
<p>La taille, l'aspect et la situation d'une image sur une page
sont réglés par le pilote de l'imprimante dans
<i>GhostScript</i>. Si vous trouvez que vos impressions sont
tronquées ou mal cadrées il faudra soit retoucher le
code du pilote (déconseillé), soit modifier les
fichiers de configuration (<code>gs_init.ps</code>,
<code>gamma.ps</code>)</p>
<h3>Gamma, tailles de points, ...</h3>
<p>Il se peut que vous trouviez vos impressions trop sombres. Ceci
peut arriver si votre imprimante n'a pas une définition
suffisante. Dans ce cas vous devez créer votre propre
fonction de transfert. Pour ceci, créez le fichier
<code>gamma.ps</code> dans le répertoire des librairies de
<i>GhostScript</i> et appelez le fichier sur la ligne de commande
de gs avant le fichier à imprimer. Pour éclaricir le
résultat, vous devez diminuer les valeurs indiquées.
Notamment si votre pilote utilise l'algorithme de
<i>Floyd-Steinberg</i> pour rastériser les couleurs, des
valeurs comprises entre 0.15 et 0.2 sont mieux adaptées.</p>
<blockquote>
<pre>
<code> ---8<---- gamma.ps ----8<---
%!
%transfer functions for cyan magenta yellow black
{0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer
---8<------------------8<---
</code>
</pre></blockquote>
<p>Vous pouvez aussi modifier les dominantes de couleurs (voir le
répertoire <code>/examples</code> de <i>GhostScript</i> qui
contient une page de test des couleurs).</p>
<h2><a name="s12">12. L'impression à distance</a></h2>
<p>Une des caractéristiques de <code>lpd</code> est qu'il
supporte l'impression sur des imprimantes rattachées
à d'autres machines que la vôtre. Avec, en plus, une
combinaison de filtres soignée, vous aurez un système
d'impression transparent, réparti et performant.</p>
<h2><a name="ss12.1">12.1 Vers un hôte Unix/lpd</a></h2>
<p>Pour que des machines distantes puissent utiliser l'imprimante
attachée à votre machine, le nom de ces machines doit
être référencé soit dans le fichier
<code>/etc/hosts.lpd</code>, soit dans le fichier
<code>/etc/hosts.equiv</code>. Ce sont des fichiers textes normaux,
dans lesquels on indique un nom de machine par ligne.</p>
<p>Il est préférable de déclarer les machines
dans <code>/etc/hosts.lpd</code> qui est spécialement
réservé à l'impression, le fichier
<code>/etc/hosts.equiv</code> donnant des droits plus
étendus.</p>
<p>Vous pouvez restreindre les droits d'accès distants par
groupe ou par utilisateur. Les groupes autorisés sont
indiqués grâce au paramètre <code>:rg=:</code>
du fichier <code>printcap</code>: <code>rg=admin</code> restreint
l'utilisation aux utilisateurs du groupe <code>admin</code>. Le
paramètre booléen <code>:rs=:</code> du même
fichier restreint l'accès aux utilisateurs ayant un compte
sur votre machine.</p>
<h3>Avec lpd</h3>
<p>Pour imprimer vers une autre machine, vous devez créer
une entrée <code>printcap</code> telle que:</p>
<blockquote>
<pre>
<code> # REMOTE djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:rm=machine.out.there.com:\
:rp=printername:\
:lp=/dev/null:\
:sh:
</code>
</pre></blockquote>
<p>Vous noterez qu'il doit bien exister un répertoire de
spool local géré par votre <code>lpd</code> local.
Les fichiers soumis y seront copiés puis envoyés vers
la machine distante.</p>
<h3>Avec rlpr</h3>
<p>Vous pouvez utiliser <code>rlpr</code> pour soumettre une
impression directement à la machine distante sans passer par
un démon local et toute sa configuration. C'est
particulièrement intéressant lorsque vous imprimer
rarement et vers différentes imprimantes.</p>
<p><code>rlpr</code> s'appuie sur TCP/IP. Il n'est pas
nécessaires que les imprimantes soient connues
explicitement. N'ayant pas besoin de fichier printcap, il est plus
facile à gérer. Il est compatible avec
<code>lpr</code>.</p>
<h2><a name="ss12.2">12.2 Imprimer vers une imprimante
attachée à Windows 95, NT, LanManager ou
Samba.</a></h2>
<p>Il existe un mini-document (<code>Printing to Windows
HOWTO</code>) qui décrit ceci très bien.</p>
<p>Il est possible de rediriger une file <code>lpd</code> vers un
service d'impression SMB grâce au programme
<code>smbclient</code>
(<code>http://www.picante.com/~gtaylor/pht/man/smbclient.html</code>).
Samba contient un script (<code>smbprint</code>) qui fait cela.
Vous devez mettre un fichier de configuration pour l'imprimante en
question dans le répertoire de spool et décrire le
programme <code>smbprint</code> en tant que filtre dans
<code>/etc/printcap</code>:</p>
<blockquote>
<pre>
<code> lp|remote-smbprinter:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lp:\
:if=/usr/local/sbin/smbprint:
</code>
</pre></blockquote>
<p>Vous pouvez également utiliser le programme
<code>smbclient</code> pour soumettre un fichier directement
à un service d'impression SMB sans impliquer
<code>lpd</code>. Lisez la documentation de tous ces programmes
pour plus d'information.</p>
<h2><a name="ss12.3">12.3 Vers une imprimante NetWare</a></h2>
<p>La suite logicielle <code>ncpfs</code> contient un utilitaire
appelé <code>nprint</code> qui fournit les mêmes
fonctionnalités que smbprint pour NetWare. Vous pouvez
l'obtenir sur
<code>ftp://sunsite.unc.edu/pub/Linux/system/filesystems/ncpfs/</code>.
Avec <code>ncpfs</code> vous pouvez monter des volumes du serveur
NetWare sous Linux. Vous pouvez également soumettre des
travaux d'impression vers NetWare ou mettre des travaux
d'impression de NetWare en file sur votre système Linux.
Vous devez disposer d'un noyaux 1.2.x ou 1.3.54 et
ultérieur. <code>ncpfs</code> <b>NE</b> fonctionne
<b>PAS</b> avec un noyau 1.3.x (x < 54).</p>
<p>Pour que <code>nprint</code> fonctionne via <code>lpd</code>,
vous devez écrire un shell-script pour diriger stdin sur
l'imprimante NetWare. Vous l'installerez comme un filtre
(<code>if</code>) d'une file d'impression <code>lpd</code>. Vous
obtiendrez :</p>
<blockquote>
<pre>
<code>sub2|remote-NWprinter:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/sub2:\
:if=/var/spool/lpd/nprint-script:
</code>
</pre></blockquote>
<p>le script <code>nprint-script</code> ressemble à quelque
chose comme :</p>
<blockquote>
<pre>
<code> #! /bin/sh
# Essayez en premier le compte invite (guest)sans mot de passe!
/usr/local/bin/nprint -S net -U name -P passwd -q printq-name -
</code>
</pre></blockquote>
<h2><a name="ss12.4">12.4 Vers une imprimante EtherTalk</a></h2>
<p>Le paquetage logiciel <code>netatalk</code> contient
l'équivalent de <code>nprint</code> et
<code>smbclient</code>. Référez-vous au
<code>Netatalk-HOWTO</code> dans lequel est bien décrite la
procédure d'impression vers et depuis un réseau
<i>Apple</i>.</p>
<h2><a name="ss12.5">12.5 Vers une imprimante HP ou autre
imprimante Ethernet</a></h2>
<p>Certaines imprimantes (HP et autres) sont fournies avec une
interface Ethernet que vous pouvez directement adresser pour
soumettre vos travaux d'impression. Conformez-vous au manuel du
constructeur. En général, ces imprimantes font
``tourner'' un <code>lpd</code> et fournissent une ou plusieurs
files vers lesquelles vous pouvez imprimer. Une imprimante HP, par
exemple, pourra fonctionner avec une entrée
<code>printcap</code> telle que:</p>
<blockquote>
<pre>
<code>lj-5|remote-hplj:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lj-5:\
:rm=printer.name.com:rp=raw:
</code>
</pre></blockquote>
<p>Les imprimantes LaserJet HP avec une interface JetDirect ont en
général deux files incorporées; l'une ``raw''
accepte le PCL (et peut-être le PostScript), l'autre ``text''
accepte l'ascii pur (et s'arrange pour résoudre
d'elle-même les problèmes d'effets d'escalier).</p>
<p>Dans un environnement dans lequel plusieurs imprimantes ne
supportent pas le <i>PostScript</i>, il peut être bon de
configurer un serveur d'impression dédié vers lequel
toutes les machines enverront leurs travaux et sur lequel
GhostScript tournera.</p>
<h2><a name="ss12.6">12.6 Vers d'anciennes HP</a></h2>
<p>Certaines anciennes imprimantes HP ne supportent qu'un protocole
mal foutu s'appuyant sur des connexions TCP, notamment les
premièrs modèles à base de cartes JetDirect
(et quelques JetDirectEx). Pour imprimer vers de telles
imprimantes, vous devez ouvrir une connexion TCP vers un port
dédié (9100) et envoyer votre impression vers cette
connexion. Voici le script Perl correspondant :</p>
<blockquote>
<pre>
<code> #!/usr/bin/perl
# Thanks to Dan McLaughlin for writing the original version of this
# script (And to Jim W. Jones for sitting next to Dan when writing me
# for help ;)
$fileName = @ARGV[0];
open(IN,"$fileName") || die "Can't open file $fileName";
$dpi300 = "\x1B*t300R";
$dosCr = "\x1B&k3G";
$ends = "\x0A";
$port = 9100 unless $port;
$them = "bach.sr.hp.com" unless $them;
$AF_INET = 2;
$SOCK_STREAM = 1;
$SIG{'INT'} = 'dokill';
$sockaddr = 'S n a4 x8';
chop($hostname = `hostname`);
($name,$aliases,$proto) = getprotobyname('tcp');
($name,$aliases,$port) = getservbyname($port,'tcp')
unless $port =~ /^\d+$/;;
($name,$aliases,$type,$len,$thisaddr) =
gethostbyname($hostname);
($name,$aliases,$type,$len,$thataddr) = gethostbyname($them);
$this = pack($sockaddr, $AF_INET, 0, $thisaddr);
$that = pack($sockaddr, $AF_INET, $port, $thataddr);
if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) {
# print "socket ok\n";
}
else {
die $!;
}
# Give the socket an address.
if (bind(S, $this)) {
# print "bind ok\n";
}
else {
die $!;
}
# Call up the server.
if (connect(S,$that)) {
# print "connect ok\n";
}
else {
die $!;
}
# Set socket to be command buffered.
select(S); $| = 1; select(STDOUT);
# print S "@PJL ECHO Hi $hostname! $ends";
# print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends";
# print S $dpi300;
# Avoid deadlock by forking.
if($child = fork) {
print S $dosCr;
print S $TimesNewR;
while (<IN>) {
print S;
}
sleep 3;
do dokill();
} else {
while(<S>) {
print;
}
}
sub dokill {
kill 9,$child if $child;
}
</code>
</pre></blockquote>
<h2><a name="ss12.7">12.7 Les filtres d'entrée pour des
imprimantes distantes</a></h2>
<p>Une des bizarreries de <code>lpd</code> est que le filtre
d'entrée (<code>if</code>) n'est pas exécuté
pour des imprimantes distantes. Si vous devez absolument passer par
un filtre, il vous faudra utiliser deux files, la première
redirigeant vers la deuxième. Par exemple :</p>
<blockquote>
<pre>
<code> lj-5:remote-hplj:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lj-5:\
:if=/usr/lib/lpd/filter-lj-5:
lj-5-remote:lp=/dev/null:sh:rm=printer.name.com:\
:rp=raw:sd=/var/spool/lpd/lj-5-raw:
</code>
</pre></blockquote>
<p>et le filtre <code>filter-lj-5</code> (exemple):</p>
<blockquote>
<pre>
<code> #!/bin/sh
gs <options> -q -dSAFER -sOutputFile=- - | \
lpr -Plj-5-remote -U$5
</code>
</pre></blockquote>
<p>L'option <code>-U</code> ne fonctionne que si <code>lpr</code>
est lancé en tant que démon. Elle positionne
correctement le nom du soumissionnaire du travail dans la
deuxième queue. Il serait d'ailleurs mieux d'utiliser une
méthode plus sûre pour récupérer ce nom
car ce n'est pas toujours le 5ème paramètre.</p>
<h2><a name="ss12.8">12.8 Imprimer depuis Windows</a></h2>
<p>L'impression depuis un client Windows vers un serveur Unix est
directement supporté par <code>SMB</code> en utilisant le
paquetage <code>SAMBA</code> (qui supporte également le
partage de fichiers du système de fichiers Linux vers les
clients Windows).</p>
<p>Samba est fourni avec une documentation complète. Vous
pouvez soit installer un filtre magique sur Linux et imprimer du
<i>PostScript</i> soit installer un pilote d'imprimante
spécifique sous Windows et décrire une file sans
filtre. En s'appuyant sur les pilotes Windows, vous pourrez obtenir
de meilleurs résultats, mais c'est un peu plus
compliqué à administrer si vous avez plusieurs
stations sous Windows. Donc essayez d'abord la première
solution.</p>
<h2><a name="ss12.9">12.9 Depuis Netware</a></h2>
<p>Il y a des services NetWare disponibles pour Linux, mais je n'ai
aucune idée si vous pouvez offrir des services d'impression
depuis des client Netware. Des informations sont les
bienvenues.</p>
<h2><a name="ss12.10">12.10 Depuis un Apple</a></h2>
<p>Netatalk permet d'imprimer depuis une station Apple sur
EtherTalk. Voir le <code>Netatalk HOWTO</code>
(<code>http://thehamptons.com/anders/netatalk</code>) pour de plus
amples renseignements.</p>
<h2><a name="ss12.11">12.11 Imprimer vers un fax</a></h2>
<h3>Utiliser un modem/fax</h3>
<p>Si vous disposez d'un modem/fax, vous pouvez configurer votre
système pour envoyer ou recevoir des fax aux formats
<i>PostScript</i>, dvi, ascii, etc... Vous pourrez même faire
en sorte que votre courrier électronique soit
faxé!</p>
<p>Les modems/Fax supportent les commandes de classe 1 ou 2. Les
modems de classe 1 ont un sous-ensemble de fonctionnalités
d'un fax disons traditionnel (donc, le logiciel doit faire le
reste... et le coût de traitement est parfois critique!)</p>
<p>La classe 1 correspond au standard EIA 578. Les modems de classe
2 répondent au sandard EIA 592. Vous trouverez dans la
documentation de votre modem à quelle classe il appartient.
Ne confondez pas classe et groupe. Le groupe est
généralement le groupe III.</p>
<p>Les logiciels de fax tournant sous Linux doivent savoir
convertir les données reçues en un format compatible
avec le groupe III pour la transmission. Comme d'habitude
<i>Ghostscript</i> sait faire ! Le pilote <code>tiffg3</code>
génère des messages fax encodés au format
<code>g3/tiff</code>. Vous devrez compiler et intégrer le
pilote si ce n'est déjà fait.</p>
<p>Un des logiciels les plus complets sur le sujet,
<code>HylaFax</code> est disponible sur :</p>
<blockquote>
<pre>
<code> ftp.sgi.com:/sgi/fax/?????.src.tar.Z
</code>
</pre></blockquote>
<p>Il supporte toutes sortes de choses comme les multiples modems
et la diffusion.</p>
<p><code>mgetty + sendfax</code> est un couple de logiciels,
contenant un <code>getty</code> pour Linux et les modems fax ainsi
qu'un logiciel d'envoi de fax assez simple. Ce paquetage se trouve
à:</p>
<blockquote>
<pre>
<code> sunsite.unc.edu:/pub/Linux/system/serial/getty/mgetty+sendfax-1.0.0.tar.gz
</code>
</pre></blockquote>
<p>Enfin, <code>efax</code> mérite d'être
mentionné. C'est un excellent choix pour Linux. Il supporte
les classes 1 et 2.</p>
<blockquote>
<pre>
<code> sunsite.unc.edu:/pub/Linux/apps/serialcomm/fax/efax08a.tar.gz
</code>
</pre></blockquote>
<p>(Répertoire dans lequel on trouvera également
<code>vfax10.tar.z</code>, <code>qfax1.3.tar.gz</code>,
<code>xfax.v1.07s.tar.gz</code>)</p>
<h3>Utiliser le service d'impression distant</h3>
<p>C'est un service expérimental vous permettant d'envoyer
un courrier électronique que vous souhaitez imprimer sur un
fax distant. Des formats tels que PostScript sont supportés.
Bien que la couverture géographique de ce service soit
très faible, il est très prometteur. Pour plus
d'information, référez-vous au site Web ``Remote
Printing WWW Site'' (<code>http://www.tpc.int/</code>).</p>
<h2><a name="s13">13. Les logiciels qui permettent de
réaliser de belles impressions</a></h2>
<p>Linux sait faire tourner un grand nombre de binaires avec plus
ou moins de réussite: Linux/x86, Linux/Alpha, Linux/Sparc,
iBCS, Windows (Un jour, avec Wine), Mac/68k (avec Executor) et
Java. WordPerfect, traitement de texte commercial tourne bien avec
l'émulation iBCS. La suite Corel Office en Java est
également prometteuse...)</p>
<p>En ce qui concerne Linux, les choix sont limités aux
logiciels Unix classiques:</p>
<h2><a name="ss13.1">13.1 Les langages à balises</a></h2>
<p>La plupart des langages balisés sont bien adaptés
aux projets conséquents ou répétitifs pour
lesquels vous souhaitez que l'ordinateur contrôle la mise en
forme pour un résultat homogène. Vouloir ajouter un
bel effet dans un tel langage choquera certainement.</p>
<h3>nroff</h3>
<p>C'est l'un des plus anciens langages balisés sous Unix.
Les pages de manuel en ligne sont l'exemple le plus connu de pages
formattées en macros nroff; beaucoup de gens ne jurent que
par lui... mais sa syntaxe est quand même plus
compliquée que nécessaire; ce n'est certainement pas
le bon choix pour les nouveaux projets. Il est intéressant
de savoir que vous pouvez imprimer une page de manuel directement
en PostScript avec <code>groff</code>. La syntaxe est la suivante:
<code>man -t truc | lpr</code>. Le résultat en vaut vraiment
la peine.</p>
<h3>TeX</h3>
<p>TeX (et le paquetage de macros LaTeX) est l'un des langages
balisés le plus répandu sous Unix. Les travaux
techniques sont souvent rédigés en LaTeX parce qu'il
simplifie grandement la mise en page et il est l'un des rares
logiciels à traiter correctement et puissamment les fomules
mathématiques. Le format de sortie de TeX est dvi, et peut
être converti en <i>PostScript</i> ou PCL (HP) à
l'aide du programme <code>dvips</code> ou <code>dvilj</code>.</p>
<h3>SGML</h3>
<p>Il y a au moins un interpréteur de SGML gratuit sous Unix
et Linux; il est la base du système de documentation
LinuxDoc-SGML. Il supporte bien entendu d'autres types de
documents.</p>
<h3>HTML</h3>
<p>Bien connu, il permet d'écrire des documents simples.</p>
<h2><a name="ss13.2">13.2 Traitements de textes WYSIWYG</a></h2>
<p>Ca y est! Linux et Unix ne manquent plus de tels traitement de
texte. Il existe plusieurs suites logicielles dont une disponible
gratuitement pour une utilisation personnelle:
<i>StarOffice</i>.</p>
<h3>StarOffice</h3>
<p>Une compagnie allemande distribue <code>StarOffice</code> pour
Linux. On peut trouver une version libre de droits sur les serveurs
ftp classiques. Cette version est limitée à un usage
personnel. Cette suite logicielle est très complète;
vous trouverez tout ce dont vous rêviez. Il existe d'ailleurs
un mini-HOWTO décrivant où la trouver et comment
l'lnstaller. La plupart des imprimantes sont reconnues.</p>
<h3>LyX</h3>
<p><code>LyX</code> est une interface pour LaTeX assez prometteuse.
Rendez-vous sur la page Web de Lyx à
<code>http://www-pu.informatik.uni-tuebingen.de/users/ettrich/</code>
pour de plus amples renseignements.</p>
<h3>L'interface utilisateur 'Andrew'</h3>
<p>Cette interface comprend un éditeur WYSIWYG appelé
<code>ez</code> comportant la plupart des fonctionnalités de
base d'un traitement de texte: HTML, et MIME pour courrier et
forums de discussions (niouzes, si vous
préférez).</p>
<h3>Offres commerciales</h3>
<p>Caldera et Red Hat vendent des paquetages logiciels comprenant
les applications principales, à savoir un traitement de
texte et un tableur. Caldera vend également (à
vérifier) WABI, l'émulation Windows de Sun qui permet
de faire tourner les applications de Microsoft bien connues.</p>
<p>Pour plus d'information, consultez les sites de Caldera
(<code>http://www.caldera.com</code>) et de Red Hat
(<code>http://www.redhat.com</code>).</p>
<p>D'autres vendeurs peuvent m'envoyer un courrier descriptif de
leur offre.</p>
<h2><a name="s14">14. Logiciels de
pré-visualisation</a></h2>
<p>Tout ce que vous imprimez peut être également
visualisé à l'écran. Ceci permet dans bien des
cas d'économiser du papier.</p>
<h2><a name="ss14.1">14.1 PostScript</a></h2>
<p>GhostScript possède un pilote X11 utilisé par
Ghostview
(<code>http://www.picante.com/~gtaylor/pht/man/ghostview.html</code>).
La dernière version de ce logiciel devrait permettre
également la visualisation de fichiers au format PDF.</p>
<h2><a name="ss14.2">14.2 TeX dvi</a></h2>
<p>les fichiers TeX dvi (DeVice Independent - indépendant du
périphérique) peuvent être visualisés
sous X11 à l'aide de <code>xdvi</code>
(<code>http://www.picante.com/~gtaylor/pht/man/xdvi.html</code>).
Les versions récentes de <code>xdvi</code> appellent
<code>ghostscript</code> pour le rendu de
spécificités <i>PostScript</i>.</p>
<p>Un pilote VT100 (<code>dgvt</code>) existe également.
<code>Tmview</code> fonctionne sous Linux avec
<code>svgalib</code>, si cela vous suffit.</p>
<h2><a name="ss14.3">14.3 Adobe PDF</a></h2>
<p><i>Acrobat Reader</i> d'Adobe est disponible pour Linux. Vous
pouvez le charger depuis <code>http://www.adobe.com</code>. Vous
pouvez également utiliser <code>xpdf</code>, un logiciel
gratuit fournit avec les sources. <i>GhostScript</i>, devrait,
comme je l'ai dit plus haut, supporter le format pdf.</p>
<h2><a name="s15">15. Les imprimantes série</a></h2>
<p>Le démon <code>lpd</code> fournit cinq attributs que vous
pouvez positionner dans <code>/etc/printcap</code> afin de
contrôler le port série sur lequel se trouve votre
imprimante.</p>
<blockquote>
<pre>
<code>br
(numerique) definit le taux de transfert en bauds (appel a ioctl(2))
fc
(num) efface des indicateurs (sgtty.h)
fs
(num) positionne des indicateurs (inverse de `fc')
xc
xs
</code>
</pre></blockquote>
<p>Pour définir la vitesse du port, la syntaxe est
évidente. Exemple: br \#9600.</p>
<p>Les autres paramètres à positionner correspondent
à un ensemble de bits, que l'on pourra soit positionner,
soit mettre à 0. Pour effacer des bits, on utilisera les
paramètres fc et xc, pour les positionner, fs et xs.</p>
<p>Faites bien attention aux bits que vous sélectionnez.
Mais au fait que sont-ils ? Souvenez-vous..., la commande
<code>stty</code>. Elle indique de nombreux paramètres
caractérisant un tty. La commande <code>stty -a</code>
affiche en clair les paramètres du tty, certains d'entre-eux
étant précédés d'un tiret s'ils sont
invalidés et sans tiret s'ils sont validés. La
commande <code>stty</code> peut être appliqués au port
série (voir exemple). Ce sont certains de ces
paramètres (des drapeaux, des flags, donc des bits) que l'on
va manipuler.</p>
<blockquote>
<pre>
<code> # stty -a < /dev/ttyS2
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr
-igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop
-echoprt -echoctl -echoke
</code>
</pre></blockquote>
<p>Note: utilisez toujours <code>stty</code> de cette façon
(<code>stty < /dev/ttyS?</code>); cette command utilise en effet
l'entrée standard).</p>
<p>Vous pouvez utiliser cette commande pour configurer le port de
façon à obtenir une impression correcte. Par exemple,
les différences que l'on peut noter entre le stty ci-dessus
et l'initialisation du port au démarrage de ma machine
réside dans les informations <code>-clocal</code>,
<code>-crtscts</code> et <code>ixon</code>. (La configuration de
votre port pourra très bien être différente
selon la manière dont votre imprimante gère le
contrôle de flux).</p>
<p>Votre port étant bien configuré, faites :
<code>cat fichier > /dev/ttyS?</code> (? est le numéro de
votre port) pour imprimer un fichier.</p>
<p>Imprimez par exemple le fichier
<code>/usr/src/linux/include/asm-i386/termbits.h</code>. Vous y
découvrirez un tas de définitions de constantes et de
structures. Nous allons voir quelles valeurs définies dans
ce fichier vont nous servir pour configurer le port, non plus avec
stty, mais avec les paramètres <code>fc</code>,
<code>xc</code>, <code>fs</code> et <code>xs</code> du fichier
printcap. Regardez la section commençant par :</p>
<blockquote>
<pre>
<code> /* c_cflag bit meaning */
#define CBAUD 0010017
</code>
</pre></blockquote>
<p>Elle décrit justement les bits manipulables à
l'aide de fc et fs dont on parlait. On y voit les constantes des
vitesses de modulation en baud, puis des lignes qui nous
intéressent particulièrement : ce sont les
mêmes paramètres que dans la commande
<code>stty</code>. Je sens que vous voyez où on veut en
venir. <code>stty</code> n'est qu'un interface nécessaire au
positionnement (ou effacement) de bits.</p>
<p>Vous savez maintenant que chaque paramètre affiché
par <code>stty</code> correspond à un bit, et qui ont la
valeur 0 lorsqu'il y a un tiret devant. Notez alors les bits
à effacer (ce sera fait avec la paramètre
<code>fc</code>) et ceux à positionner (paramètre
<code>fs</code>). Exemple: <code>`fc\#0177777'</code> (Attention le
paramètre <code>fc</code> semble surcharger le
paramètre <code>br</code>, donc prenez garde à les
positionner correctement).</p>
<p>Ensuite occupez-vous des bits à positionner. Par exemple
s'il faut positionner les bits <code>cs8</code>, <code>hupcl</code>
et <code>cread</code>, regardez les constantes <code>CS8</code>
(0000060), <code>HUPCL</code> (0002000) et <code>CREAD</code>
(0000200). Pensez à la vitesse de modulation qu'il faut
aussi définir, dans mon cas, ce sera <code>B9600</code>
(0000015). Tous ces bits ensemble font `0002275'. Indiquez cette
valeur au paramètre <code>fs</code>.</p>
<p>Effectuez les même réglages avec la section
suivante intitulée</p>
<blockquote>
<pre>
<code> /* c_lflag bits */
</code>
</pre></blockquote>
<p>Dans mon cas je n'ai rien à positionner, j'ai donc
simplement à fournir la valeur <code>xc\#0157777</code>,
puis <code>xs\#0</code>. Une fois votre fichier printcap
correctement défini, essayez d'imprimer. Si quelque chose ne
va pas, continuez à lire les paragraphes suivants.</p>
<p>Souvenez-vous de toujours commencer par les bits que vous
souhaitez voir à 0 (<code>fc</code> et <code>xc</code>),
puis de définir seulement après des bits à
positionner (<code>fs</code> et <code>xs</code>).</p>
<p>La commande <code>cat</code> fonctionne pour le port
série, mais pas <code>lpd</code></p>
<p>La mise en place de <code>lpd</code> n'est pas traitée
ici, mais sachez que si vous avez des problèmes avec la
configuration du port série, vous pouvez empêcher
<code>lpd</code> de le configurer en considérant votre
imprimante comme ne présentant pas une interface normale.
Lisez également à ce propos le chapitre suivant.</p>
<p>Donnez à votre imprimante le périphérique
<code>/dev/null1</code> (<code>mknod /dev/null1 c 1 3</code>).
N'utilisez pas <code>/dev/null</code>, pour ne pas qu'il soit
ouvert de manière exclusive. Enlevez les paramètres
de vitesse et de positionnement des bits du fichier
<code>printcap</code>.</p>
<p>Créez un shell-script comme ci-dessous :</p>
<blockquote>
<pre>
<code> #!/bin/sh
echo if: $* >> /var/spool/lpd/results
# /dev/lp est un lien vers /dev/ttyS2 auquel est reliee l'imprimante
exec votre_vieux_filtre $* > /dev/lp
</code>
</pre></blockquote>
<p>...ou si vous n'avez pas de paramètre `if'
configuré...</p>
<blockquote>
<pre>
<code> #!/bin/sh
echo if: $* >> /var/spool/lpd/results
cat > /dev/lp
# la commande ``echo -ne'' suppose que /bin/sh correspond a bash
echo -en \\f > /dev/lp
</code>
</pre></blockquote>
<p>Donnez-lui les droits de lecture/écriture pour tout le
monde. Essayez-le: <code>/usr/lib/lpd/if <FICHIER</code>.</p>
<p>Définissez un filtre d'entrée dans votre fichier
<code>printcap</code> pour appeler ce script.
<code>:if=/usr/lib/lpd/if:</code>.</p>
<p>Utilisez la commande <code>stty</code> pour configurer le port
correctement. Essayez d'imprimer. Vous devriez pouvoir
déterminer si le(s) fichier(s) sont bien mis dans le
répertoire de spool. Cela devrait imprimer, si votre essai
manuel du script précédent a fonctionné. Bien
entendu, le mieux serait de pouvoir se passer du script
d'entrée et donc du paramètre <code>if</code>.</p>
<p>Supposons donc que la méthode précédente a
fonctionné, et que vous pensez avoir correctement
configuré votre fichier printcap. Exécutez la
commande <code>stty -a </dev/ttyS?</code>. Si certains
paramètres ne sont pas corrects, vérifiez les
constantes du fichier <code>termbits.h</code>. Si la configuration
est incorrecte, malgré tous vos efforts de
vérification, n'hésitez pas à installer un
démon récent.</p>
<h2><a name="ss15.1">15.1 Imprimantes anciennes et
caractères perdus</a></h2>
<p>Certaines anciennes imprimantes séries ont des petits
tampons mémoire et gèrent mal le contrôle de
flux. Supprimer le FIFO du port série (16550) avec
<code>setserial</code> (faites croire à setserial que c'est
un port 8250 et ça marchera).</p>
<h2><a name="s16">16. Compléments et
réglages</a></h2>
<p>Si votre imprimante est <i>PostScript</i>, elle peut ne pas
être capable de traiter du texte pur. Si tel est le cas, vous
devrez mettre en place un filtre pour transformer le texte en
<i>PostScript</i>. Un excellent freeware (logiciel libre de tout
droit de distribution et d'utilisation) appelé
<code>nenscript</code> réalise cela très bien. Si
vous ne mettez pas en place un tel filtre, vous devez vous assurer
par d'autres moyens que l'imprimante ne reçoit bien que du
<i>PostScript</i>.</p>
<p>Vous pouvez également définir dans vos fichiers de
login (<code>.profile</code>, par exemple) ou celui par
défaut, une variable d'environnement <code>PRINTER</code>
définissant l'imprimante à utiliser. Exemple:</p>
<blockquote>
<pre>
<code> export PRINTER=lpr0
</code>
</pre></blockquote>
<p>Ceci évite d'avoir à spécifier
<code>-Plpr0</code> à chaque fois.</p>
<p>Il est possible de ``réutiliser'' une entrée
printcap. Si vous déclarez votre propre machine comme
machine hôte distante, et une autre imprimante comme
imprimante distante, vous pouvez rediriger les données
à imprimer de l'une vers l'autre. Souvenez-vous que si vous
utilisez cette technique, les données passeront par chaque
filtre de la chaîne et seront mises successivement dans
chaque spool.</p>
<p>Bien que vous puissiez spécifier pour une imprimante
autant d'alias que vous le souhaitez, il semble que pour la
meilleure utilisation, les deux premiers doivent être
identiques et doivent correspondre au nom réel. Certains
programmes n'utiliseront que ces deux entrées. La commande
lpc indiquera seulement le premier alias, alors que les commandes
<code>lpr</code>, <code>lprm</code> et <code>lpq</code> comprennent
tous les alias.</p>
<p>Plutôt que de spécifier une taille maximum de
fichier pour l'impression, vous préfereriez sans doute que
les fichiers du spool ne puissent remplir votre disque, même
temporairement. Pour ce faire, créez un fichier
appelé <code>minfree</code> dans chaque répertoire de
spool, contenant, sous forme d'un nombre de blocs (1 Ko pour
Linux), la quantité minimum d'espace disque devant rester
pour que les données puissent être acceptées
dans le spool. Vous créerez un fichier réel dans le
répertoire principal de spool et, dans chaque
sous-répertoire, un lien symbolique vers ce fichier.</p>
<h2><a name="s17">17. Résumé</a></h2>
<p>Voici un guide de configuration étape par étape
pour une imprimante nommée <code>/dev/lp0</code>. Vous
pouvez l'étendre à votre guise. Pour faire ce qui
suit, vous devez être root. (NDT: L'auteur a tout
installé dans <code>/usr/spool/lpd</code>. J'ai
préféré modifier légèrement
cette configuration en définissant
<code>/usr/spool/lp/lpr0</code> et <code>/usr/spool/lpd</code>,
comme dans la plupart des distributions)</p>
<ul>
<li>Vérifiez les droits d'accès et l'emplacement de
<code>lpr</code>, <code>lprm</code>, <code>lpq</code>,
<code>lpc</code> et <code>lpd</code>. Voir à ce propos: Les
programmes importants.</li>
<li>Créez le répertoire de spool pour votre
imprimante, appelée dans notre exemple <code>lpr0</code>:
<blockquote>
<pre>
<code> mkdir /usr/spool/lp /usr/spool/lp/lpr0
chowm root.lp /usr/spool/lp /usr/spool/lp/lpr0
chmod ug=rwx,o=rx /usr/spool/lp /usr/spool/lp/lpr0
</code>
</pre></blockquote>
</li>
<li>Créez un répertoire permettant au démon
d'y mettre son propre fichier de verrouillage
<code>lpd.lock</code>:
<blockquote>
<pre>
<code> mkdir /usr/spool/lpd
chowm root.lp /usr/spool/lpd
chmod ug=rwx,o=rx /usr/spool/lpd
</code>
</pre></blockquote>
</li>
<li>Dans les répertoires <code>/usr/spool/lp/lpr0</code> et
<code>/usr/spool/lpd</code>, créez les fichier
nécessaires, avec les bons droits (Cette manipulation n'est
pas nécessaire avec les versions récentes du
gestionnaire d'impression):
<blockquote>
<pre>
<code> cd /usr/spool/lp/lpr0
touch .seq errs status lock
chown root.lp .seq errs status lock
chmod ug=rw,o=r errs status
chmod u=rw,go=r lock
chmod u=rw,g=r,o=x .seq
cd /usr/spool/lpd
touch .seq errs status lock
chown root.lp .seq errs status lock
chmod ug=rw,o=r errs status
chmod u=rw,go=r lock
chmod u=rw,g=r,o=x .seq
</code>
</pre></blockquote>
</li>
<li>Créez le shell-script <code>filtre_entree</code> dans le
répertoire <code>/usr/spool/lp/lpr0</code>. Utilisez le
filtre décrit précédemment. Donnez-lui les
bons droits.
<blockquote>
<pre>
<code> cd /usr/spool/lp/lpr0
chmod ug=rwx,o=rx filtre_entree
</code>
</pre></blockquote>
</li>
<li>Créez le fichier <code>/etc/printcap</code>, s'il
n'existe pas. Enlevez les entrées qu'il contient et ajoutez
une entrée de test décrite
précédemment. Donnez-lui les droits
<code>-rw-r--r--</code>.</li>
<li>Editez le fichier <code>/etc/rc.d/rc.local</code> ou
<code>rc.multi</code>. Ajoutez la ligne <code>/usr/sbin/lpd</code>
à la fin. Cela lancera le démon au boot. Vous pouvez
aussi le lancer à la main :
<blockquote>
<pre>
<code>root# /usr/sbin/lpd
</code>
</pre></blockquote>
</li>
<li>Effectuez un test d'impression :
<blockquote>
<pre>
<code> ls -l | lpr -Plpr0
</code>
</pre></blockquote>
</li>
<li>Regardez dans <code>/tmp</code> et vérifiez la
présence du fichier <code>testlp.out</code>. Il devrait
contenir le listing du répertoire dans lequel vous
étiez.</li>
<li>Editez <code>/etc/printcap</code>. Dupliquez l'entrée
<code>lpr0</code>. Vous avez alors 2 entrées identiques.
Dans la première entrée, changez, sur la
première ligne uniquement, les occurrences de
<code>lpr0</code> par <code>testlp</code>. Dans la seconde
entrée, changez <code>/dev/null</code> par le
périphérique réel, par exemple
<code>/dev/lp0</code>. Dans la seconde entrée, enlevez le
champ <code>if</code> complètement.</li>
<li>Rebootez le système ou tuez le démon d'impression
et relancez-le, afin qu'il reprenne en compte le fichier
<code>/etc/printcap</code> modifié.</li>
<li>Refaites un test d'impression - Allumez votre imprimante. Cela
devrait imprimer!
<blockquote>
<pre>
<code> ls -l | lpr -Plpr0
</code>
</pre></blockquote>
</li>
</ul>
<h2><a name="s18">18. Problèmes avec la LaserJet 5M</a></h2>
<h2><a name="ss18.1">18.1 PostScript</a></h2>
<p>Cette imprimante peut poser des problèmes d'impression en
<code>PostScript</code>. Si vous constatez, après avoir
imprimé un document <code>PostScript</code>, qu'elle ne sort
plus les documents suivants et qu'elle affiche ``DATA RECEIVED'' en
permanence, suivez les conseils qui suivent. Merci à
<Patrick.Begou@hmg.inpg.fr>.</p>
<ul>
<li>l'imprimante est en configuration d'usine avec le flag
d'impression des erreurs postscript validé.</li>
<li>Le fichier <code>printcap</code> est très simple:
<blockquote>
<pre>
<code># /etc/printcap
#
# This file can be edited with the printtool in the control-panel.
laser5M|lp:\
:lp=/dev/lp2:\
:sh:\
:sd=/var/spool/lpd/laser5M:\
:lf=/var/spool/lpd/laser5M/erreurs:\
:if=/var/spool/lpd/laser5M/filter_court:
</code>
</pre></blockquote>
</li>
<li>Le filtre utilisé (<code>filter_court</code>) est
donné ci-dessous. Il n'accepte que les fichiers
<i>ascii</i>, <i>PostScript</i> et <i>PostScript
compressé</i>. Ce qui est intéressant, ce sont les
chaines d'initialisation en PCL. En gros:
<blockquote>
<pre>
<code>\033%-12345X passage en mode PCL (d'apres l'ingenieur de MDS)
\033E reinitialisation de l'imprimante les \n
semblent indispensables dans le filtre.
</code>
</pre></blockquote>
Avec <code>echo -ne</code>, Esc c'est <code>033</code> en octal
(<code>27</code> en décimal )
<blockquote>
<pre>
<code>#!/bin/sh
#
# Filtre d'impression gerant l'ascii, le postscript et le postscript
# compresse pour une laserjet 5M. A declarer comme filtre "if" dans
# /etc/printcap.
# Reinitialise l'imprimante entre chaque impression postscript pour
# eviter les erreurs sur timeout.
#
# Version 0.1 P. BEGOU 8/97 (Patrick.Begou@hmg.inpg.fr)
#
# recuperation des donnees dans un fichier temporaire
#
FILE=/tmp/laser5M.$$
cat - > ${FILE}
#
# Scrutation du type de fichier
#
filetype=`file $FILE| cut -d":" -f2`
case $filetype in
*PostScript*)
(echo -ne "\033%-12345X\n"; cat ${FILE}; echo -ne "\033%-12345X\033E\033%-12345X\n")
echo " $FILE postscript" >&2
;;
*text*|*script*)
(echo -ne "\033%-12345X\n"; /usr/bin/nenscript -s -2rG -p- ${FILE};
echo -ne "\033%-12345X\033E\033%-12345X\n")
echo " $FILE texte" >&2
;;
*compress*)
# verifions qu'il s'agit bien de postscript.
resu=`zcat ${FILE} |head -1|grep "^%!"|wc -l`
if [ ${resu} -eq 1 ]
then
(echo -ne "\033%-12345X\n"; zcat ${FILE}; echo -ne "\033%-12345X\033E\033%-12345X\n")
echo " $FILE compresse" >&2
else
echo " $FILE compresse non reconnu" >&2
fi
;;
*)
echo " $FILE non reconnu" >&2
;;
esac
#
# On repond Ok, tout s'est bien passe.
#
rm ${FILE}
exit 0
</code>
</pre></blockquote>
</li>
</ul>
<h2><a name="ss18.2">18.2 Recto-verso</a></h2>
<p>Voici comment configurer, par logiciel, le passage en mode
recto-seulement ou recto-verso aussi bien pour de l'ascii que du
PostScript.</p>
<p>Il suffit d'insérer après la première
ligne...</p>
<blockquote>
<pre>
<code>%!Ado...
</code>
</pre></blockquote>
<p>...les lignes suivantes pour valider le recto-verso:</p>
<blockquote><code>%%BeginFeature: *Duplex DuplexNoTumble
<<Duplex true /Tumble false>> setpagedevice
%%EndFeature</code></blockquote>
<p>ou, pour valider le recto seul:</p>
<blockquote><code>%%BeginFeature: *Duplex None <<Duplex
false>> setpagedevice %%EndFeature</code></blockquote>
<h2><a name="s19">19. Informations concernant ce document</a></h2>
<p>Sauf changements, les documents HOWTO sont placés sous
copyright par leurs auteurs respectifs. Les documents Linux HOWTO
peuvent être reproduits et distribués en tout ou
partie, par quelque moyen physique que ce soit, sans l'autorisation
de l'auteur. Les traductions et travaux dérivés sont
également permis sans autorisation expresse. La distribution
à titre commercial est permise et même
encouragée; cependant, l'auteur souhaiterait en être
averti.</p>
<p>En bref, nous souhaitons que l'information contenue dans ces
document soit répandue le plus largement possible.
Cependant, nous souhaitons maintenir le copyright sur ce document,
et souhaiterions être avertis de toute re-distribution. Si
vous avez des questions à ce propos, contactez Greg Hankins,
le nouveau coordinateur des documents Linux HOWTO à
l'adresse <gregh@cc.gatech.edu>. Son représentant
français est Eric Dumas
<dumas@freenix.fr,dumas@Linux.EU.Org>.</p>
</body>
</html>
|