aboutsummaryrefslogblamecommitdiff
path: root/ja_JP.EUC/handbook/printing.sgml
blob: b9fc2b10d84119895fc408d85e4cb7fef61e2dd9 (plain) (tree)
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
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181




















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































                                                                                                
<!-- This is an SGML document in the linuxdoc DTD describing
     Printing with FreeBSD.  By Sean Kelly, 1995.

     $Id: printing.sgml,v 1.1.1.1 1996-11-15 05:14:41 asami Exp $
     The FreeBSD Japanese Documentation Project
     Original revision: 1.11

<!DOCTYPE linuxdoc PUBLIC "-//FreeBSD//DTD linuxdoc//EN">

  <article>
      <title>  FreeBSDでのプリンタの利用
      <author> Sean Kelly <tt/kelly@fsl.noaa.gov/
      <date> 30 September 1995, (c) 1995

      <abstract> 本ドキュメントは, FreeBSD でのプリンタの利用方法につ
      いて書かれたものです. プリンタ機器をセットアップする方法, プリン
      タを利用するために必要な FreeBSD での設定方法, プリンタキューの
      制御方法や様々なファイル形式の印字方法について説明しています. 
      </abstract>

    <toc>
-->

  <chapt><heading>プリンタの利用<label id="printing"></heading>

    <p><em>著者 &a.kelly;<newline>30 September 1995</em>
    <p><em>訳者 &a.kimura;<newline>3 September 1996</em>

        FreeBSD でプリンタを使用するためには, バークレイラインプリンタ
	スプーリングシステム (LPDスプーリングシステムとしても知られて
	います) が機能するようにプリンタをセットアップする必要がありま
	す. 本節では, LPDスプーリングシステム (大抵の場合, 単にLPDと呼
	ばれる) について紹介します. 

	もし, LPDや他のプリンタスプーリングシステムについて既に詳しい
	知識をお持ちの方は, 「<ref id="printing:intro:setup"
	name="スプーリングシステムのセットアップ">」から読み始めて
	も結構です. 


      <sect><heading>スプーラは何をするか <label
	    id="printing:intro:spooler"></heading>

	<p> LPDはあるホストのプリンタに関する制御の一切をおこないます. こ
	こで言う制御としては, 次のことが挙げられます. 

	  <itemize>
	    <item> ホストに接続されたプリンタ, あるいはネットワーク
	    上の他ホストに接続されたプリンタに対するアクセスを制御しま
	    す. 

	    <item> ファイルをプリントする要求に対して許可を与えます. 
	    この要求は特に <em/ジョブ/ と呼ばれています. 

	    <item> 各々のプリンタの <em/キュー/ を管理することにより, 
	    複数のユーザがあるプリンタに対して同時にアクセスすることを
	    防ぎます. 

	    <item> <em/ヘッダページ/ (<em/バナー/ または <em/バースト/ 
	    ページとしても知られています) をプリントすることができます. 
	    これにより, プリントアウトの山の中から自分がプリントしたジョ
	    ブを見つけ易くなります. 

	    <item> シリアルポートに接続したプリンタ用に通信パラ
	    メータを管理します. 

	    <item> ネットワーク経由で他のホスト上の, 別のLPDスプーラにジョ
	    ブを送ることができます. 

	    <item> 様々なプリンタ言語やプリンタの能力に応じてジョブの
	    形式を整えるため, 特別なフィルタを起動することができます. 

	    <item> プリンタの使用に対して課金をおこなうことができます. 
	  </itemize>

	  設定ファイルを通して, また, 特別なフィルタプログラムを供給
	  することにより, 多種多様なプリンタ機器に対して, 上述の機能の
	  全部または一部をLPDシステムにおこなわせることができます. 


      <sect><heading>どうしてスプーラを使うべきなのか<label
	    id="printing:intro:why"></heading> 

	<p> あなたのシステムを利用するのがあなた一人だけだとしたら, ア
	クセス制御もヘッダページもプリンタ利用に対する課金も必要ないのに, 
	なぜわざわざスプーラに煩わされなければならないのか疑問に思うか
	もしれません. プリンタに対する直接アクセスを許可することもできるので
	すが, とにかくスプーラを使用するべきです. その理由は, 

	  <itemize>
	    <item> LPDはジョブをバックグラウンドで処理します. データが
	    プリンタに送信されるまで待つ必要はありません. 

	    <item> LPDではジョブをフィルタを通してプリントすることが簡
	    単にできます. これにより, 印刷物のヘッダに時刻や日付を入れ
	    たり, 特別なファイル形式 (TeX の DVI ファイルなど) をプリン
	    タが処理できる形式に変更することができます. これらの作業を
	    手動でおこなう必要がなくなります. 

	    <item> プリント処理をおこなうフリーのまたは商用のプログラムの
	    ほとんどは, システムのスプーラとやりとりするように作られて
	    います. スプーリングシステムをセットアップすることで, 今後
	    加えるかもしれない, あるいは, 既に持っている別のソフトウエ
	    アをより簡単にサポートすることができるでしょう. 
	  </itemize>

      <sect><heading>スプーリングシステムのセットアップ<label
	    id="printing:intro:setup"></heading>

	<p> LPDスプーリングシステムを用いてプリンタを使用するためには, 
	プリンタ機器とLPD用ソフトウェアの両方を準備する必要があります. 
	本ドキュメントでは次の2段階のレベルに分けて説明をします. 

	  <itemize>
	    <item> プリンタを接続する方法, プリンタにどの
		ように通信するかをLPDに指示する方法や, プレインテキスト
		をプリンタで印字する方法については, 「<ref name="プリ
		ンタの簡単な設定" id="printing:simple">」をご覧ください. 

	    <item> 様々な形式のファイルを印字する方法, ヘッダページを
		印字する方法, ネットワーク経由でプリンタに印字する方法, 
		プリンタを制御する方法, プリンタの使用に対する課金をおこなう
		方法については「<ref name="プリンタ設定上級編"
		id="printing:advanced">」をご覧ください. 
	  </itemize>


    <sect><heading> プリンタ設定導入編 <label
	  id="printing:simple"></heading>

      <p> この節では, プリンタ機器やプリンタを使用するためのLPD用ソフ
	トウェアを設定する方法について述べます. この節の概要は次の通り
	です. 

	<itemize>
	  <item><ref id="printing:hardware"
	  name="プリンタ機器の設定">」では, プリンタをコンピュータに接
	  続するためのヒントがいくつか書かれています. 

	  <item><ref id="printing:software"
	  name="ソフトウェアの設定">」では, LPDのスプーラ設定ファイル 
	  <tt>/etc/printcap</tt>の設定方法について書かれています. 
	</itemize>

	データをプリンタに送るためにシリアルまたはパラレルインタフェー
	スではなく, ネットワークプロトコルを使用する場合は, 「<ref
	id="printing:advanced:network:net-if" name="ネットワークにおけ
	るデータストリームのインタフェースを持つプリンタ">」をご覧くださ
	い. 

	この節のタイトルは「プリンタ設定導入編」ですが, 実際の設定は
	かなり複雑です. プリンタをコンピュータに接続し, LPDスプーラを
	起動させることは一番困難な作業です. ヘッダページを出力させたり, 
	課金したりするオプションの設定は, 一度プリンタがうまく動くよう
	になれば, とても簡単です. 


      <sect1><heading>プリンタ機器の設定<label
      id="printing:hardware"></heading>

	<p> この節では, プリンタにPCを接続するための様々な方法について
	説明しています. ここでは, ポートやケーブルの種類, FreeBSDが
	プリンタとの通信に必要なカーネルコンフィグレーションについて
	も言及しています. 

	もし, プリンタが既に接続されていて, 他のオペレーティングシステ
	ム上でプリンタからの印字に成功している場合は, 「<ref
	id="printing:software" name="ソフトウェアの設定">」まで読み飛
	ばすことが多分できるでしょう. 


	<sect2><heading>ポートとケーブル<label
	      id="printing:ports"></heading> 

	  <p> 最近のPC用のプリンタほとんどには次のインタフェースの一つ
	  もしくは両方がついています. 

	    <itemize>
	      <item><em/シリアル/インタフェースでは, プリンタにデータを
	      送信するためにコンピュータにあるシリアルポートが使用され
	      ます. シリアルインタフェースはコンピュータ業界で共通し
	      て使用されています. そのケーブルは容易に手に入り, また, 
	      簡単に自作することもできます. シリアルインタフェースには, 
	      特別なケーブルが必要なことがときどきあり, また, 何か複
	      雑な通信方式選択の設定が必要になることがあります. 
	      

	      <item><em/パラレル/インタフェースでは, プリンタにデータを
	      送信するためにコンピュータにあるパラレルポートを使用しま
	      す. パラレルインタフェースはPC業界では共通して使われてい
	      ます. ケーブルの入手は容易ですが, 自作するのはシリアルよ
	      りも難しいです. パラレルインタフェースには通常, 通信方式の選
	      択はなく, このため, 設定が極めて単純になっています. 


		<p> パラレルインタフェースは「セントロニクス」インタフェー
		スとして知られています. これは, プリンタ用のコネクタタ
		イプとして採用された後に名付けられました. 
	    </itemize>

	    シリアルインタフェースはパラレルインタフェースより
	    も普通はデータの伝送速度が遅くなります. パラレルインタフェースで
	    は, 通常, (コンピュータからプリンタへの) 単方向通信のみをおこな
	    うのに対して, シリアルインタフェースは双方向通信をおこないます. 
	    最近のパラレルポートの多くはプリンタ側からデータを受けとる
	    こともできますが, コンピュータ側にデータを送り返すことが必
	    要となるプリンタはほとんどありません. さらに, FreeBSDでは
	    双方向のパラレル通信をまだサポートしていません. 

	    通常, プリンタで双方向通信が必要となるのは, プリンタが 
	    PostScript 言語に対応しているときだけです. PostScript プリ
	    ンタは非常に冗長に動作させることができます. 事実,
	    PostScript によるジョブでは, プログラムを本当にプリンタ
	    に送信します. このことは, 印字作業を必ずしもする必要がない
	    ことを意味し, また, プログラムの結果をコンピュータに直接返
	    されるかもしれません. PostScript プリンタでは, 双方向
	    通信を使って, PostScript プログラムのエ
	    ラーや紙づまりといった問題をコンピュータに報告します. ユー
	    ザはそれらの情報を知りたいと思うかもしれません. さらに,
	    PostScript プリンタで課金作業をもっとも効率よくおこなうため
	    には双方向通信が必要となります. この方法では, まず, プ
	    リンタの現在のページカウント (起動してから今まで何枚の紙を
	    印字したか) の情報を得ます. 次に, ユーザのジョブをおこない, 終
	    了後, 再びページカウントを得ます. この2数を差によって, 課
	    金対象となる紙の枚数を知ることができます. 

	    それでは, どちらのインタフェースを使うべきなのでしょうか. 


	    <itemize>
	      <item> 双方向通信が必要なら, シリアルポートを使ってくださ
	      い. FreeBSDではパラレルポート上での双方向通信はまだサポー
	      トされていません. 

	      <item> 双方向通信の必要がなく, パラレルかシリアルかの選
	      択ができる場合はパラレルインタフェースを使うのが好ましい
	      です. これにより, シリアルポートを他の周辺機器 (端末やモ
	      デムのなど) のために残しておくことができます. また, パラ
	      レルインタフェースの方がほとんどの場合高速であり, 設定も
	      より簡単になっています. 

	      <item> 結局のところは動いてくれるものを使えばよいのです. 
	    </itemize>


	<sect2><heading>パラレルポート<label id="printing:parallel"></heading>

	  <p> プリンタをパラレルインタフェースを使って接続する場合は, 
	  セントロニクスケーブルでプリンタとコンピュータをつないでくださ
	  い. 詳しい説明はプリンタ, コンピュータ, あるいは両方に付属す
	  る説明書に書かれているはずです. 

	  その際, どのパラレルポートを使用したかを覚えておいてください. 
	  FreeBSDでは最初のポートは /dev/lpt0, 2番目は /dev/lpt1 であ
	  り, 3番目以降も同様に続きます. 


	<sect2><heading>シリアルポート<label id="printing:serial"></heading>

	  <p> シリアルインタフェースを使ってプリンタを使う場合は, 適切
	  なシリアルケーブルでプリンタとコンピュータを接続してください. 
	  詳しい説明はプリンタ, コンピュータ, あるいは両方に付属する説
	  明書に書かれているはずです. 

	  「適切なシリアルケーブル」がよくわからないときは, 次のどれか
	  を試してみてください. 

	    <itemize>
	      <item> <em/モデム/用ケーブルでは, それぞれのピンは他方の
	      コネクタの対応するピンと線でつながっています. このタイプ
	      のケーブルは, DTE-DCE間ケーブルとしても知られています. 
	      (訳注:日本ではストレートケーブルという名前で売られています)


	      <item> <em/ヌルモデム/用ケーブルでは, あるピンは対応するピ
	      ント接続していますが, あるピン (例えば, データ送信用とデー
	      タ受信用のピン) が交差して接続したり, いくつかのピンは内部
	      で短絡していたりします. このタイプのケーブルは, DTE-DTE
	      間ケーブルと呼ばれています. (訳注:日本ではクロスケーブル
	      という名前で売られています)

	      <item>A <em/シリアルプリンタ/用ケーブルは, ある特定のプ
	      リンタで必要とされ, ヌルモデムケーブルと似ていますが, 内
	      部で短絡させる代わりに, ある信号を他方側に送るために使用
	      しています. 
	    </itemize>

	    この他に, プリンタ用の通信パラメータを設定する必要がありま
	    す. 通常, プリンタのフロントパネルやDIPスイッチによって制
	    御します. コンピュータとプリンタの双方で設定できる最高の通
	    信速度[bps] (ビット/秒. <em/ボーレート/と示されているときも
	    ある) を選んでください. そして, データビット (7または8), パリ
	    ティ (偶/奇/なし), ストップビット (1または2) を選んでください. 
	    そして, フローコントロールの有無 (制御なし, または
	    XON/XOFF(<em/イン・バンド/または<em/ソフトウェア/フローコ
	    ントロールとも呼ばれる)) を選びます. 以下に続くソフトウェア
	    の設定のために, ここでの設定を覚えておいてください. 


      <sect1><heading>ソフトウェアの設定<label id="printing:software">
      </heading>

	<p> 本節ではFreeBSDのLPDスプーリングシステムで印字をおこなうために
	必要となるソフトウェアの設定について説明しています. 

	本節の概要は次のようになります. 

	  <enum>
	    <item> プリンタで使用するポートのために, 必要があれば, カー
	    ネルの書き変えをおこないます. 「<ref id="printing:kernel"
	    name="カーネルの変更">」で, このためにしなくてはなら
	    ないことを説明しています. 

	    <item> パラレルポートを使用している場合は, パラレルポートの
	    ための通信モードの設定します. 詳細は, 「<ref
	      id="printing:parallel-port-mode" name = "パラレルポート
	      の通信モードを設定する">」で説明しています. 

	    <item> オペレーティングシステムからプリンタにデータが送ら
	    れているかをテストします. 「<ref id="printing:testing"
	      name="プリンタとの通信状況を調べる">」で, どのように
	      テストするかの提案をいくつかおこなっています. 

	    <item> ファイル<tt>/etc/printcap</tt>を変更し, LPDの設定を
	    おこないます. 「<ref id="printing:printcap"
	    name="/etc/printcap ファイル">」で, どのように変更するかを
	    説明しています. 
	  </enum>

	<sect2><heading>カーネルの変更<label
	      id="printing:kernel"></heading>

	  <p> オペレーティングシステムのカーネルのコンパイルをおこなうこと
	  によって, 指定されたのデバイスが機能するようになります. シリ
	  アル, または, パラレルインタフェースをプリンタで使用する場合, 
	  必要なデバイスがこの指定の中に含まれていなくてはなりません. 
	  したがって, 必要なデバイスがカーネルに組み込まれていない場合, 追
	  加のシリアル, または, パラレルポートをサポートするために, カー
	  ネルの再コンパイルが必要となるかもしれません. 

	  シリアルポートが現在使用しているカーネルでサポートされている
	  かどうかを調べるためには, 次のように入力します.

<tscreen>
<tt>dmesg &verbar; grep sio</tt><it/N/
</tscreen>

	  ここで, <it/N/ はシリアルポートの番号を示し, この番号は0から
	  始まります. 次のような出力があった場合, カーネルはそのポー
	  トをサポートしています. 

<tscreen><verb> 
sio2 at 0x3e8-0x3ef irq 5 on isa
sio2: type 16550A
</verb></tscreen>

	  パラレルポートが現在使用しているカーネルでサポートされている
	  かどうかを調べるためには, 次のように入力します.

<tscreen>
<tt>dmesg &verbar; grep lpt</tt><it/N/
</tscreen>

	  ここで, <it/N/ はパラレルポートの番号を示し, この番号は0から
	  始まります. 次のような出力があった場合, カーネルはそのポー
	  トをサポートしています. 

<tscreen><verb>
lpt0 at 0x378-0x37f on isa
</verb></tscreen>

	  上記の出力が得られない場合, プリンタを使うため, オペレーティ
	  ングシステムにパラレル, または, シリアルポートを認識し, 使用
	  できるようにするためにはカーネルを変更する必要があります. 

	  シリアルポートをサポートさせるには, 「<ref id="kernelconfig"
	  name="FreeBSDカーネルのコンフィグレーション">」の節をご覧く
	  ださい. パラレルポートをサポートさせる場合も, その節と, <em/あ
	  わせて/, この節に続く節もご覧ください. 


	  <sect3><heading> ポート用エントリを <tt>/dev</tt> に追加する
	      <label id="printing:dev-ports"></heading>

	    <p> カーネルがシリアル, または, パラレルポートを通じての通
	    信をサポートしていたとしても, システム上で動いているプログ
	    ラムがデータの送受信をおこなうためのソフトウェアインタフェース
	    がさらに必要になります. そのインタフェースは, 
	    <tt>/dev</tt> ディレクトリにあるエントリに相当します. 


	      <bf> <tt>/dev</tt> エントリにポートを加えるために</bf>
	      <enum>
		<item> <tt/su/ コマンドで root になります. suコマンド
		でパスワードを聞かれたら, ルート用のパスワードを入力し
		ます. 

		<item> <tt>/dev</tt> ディレクトリに移動します. 
<tscreen><verb>
cd /dev
</verb></tscreen>

		<item> 次のように入力します. 
<tscreen>
<tt> ./MAKEDEV</tt> <it/port/
</tscreen>
		  ここで, <it/port/ は, 作成するポート名です. 1番目
		  のパラレルポートのときは <tt/lpt0/ に, 2番目のときは 
		  <tt/lpt1/ になり, 以降同様になります. 1番目のシリア
		  ルポートのときは, <tt/ttyd0/ に, 2番目のときは 
		  <tt/ttyd1/ になり, これも以降同様となります. 

		<item> 次を入力し, デバイスのエントリができたか確認し
		ます. 
<tscreen>
<tt>ls -l</tt> <it/port/
</tscreen>
	      </enum>

	  <sect3><heading> パラレルポートの通信モードを設定する
	      <label id="printing:parallel-port-mode"></heading>

	    <p> パラレルインタフェースを使用している場合, FreeBSDでは, 
	    割り込み駆動型にするか, プリンタとの通信の状況をカーネルに監
	    視させるかのいずれかを選択できます. 

	      <itemize>
		<item> GENERIC カーネルでは<em/割り込み駆動/方式が, 
		デフォルトになっています. この方式では, オペレーティングシ
		ステムはプリンタがデータを受け付けられるかどうかを調べ
		るために, IRQ ラインを一つ使用します. 

		<item> <em/監視/方式では, オペレーティングシステムにプ
		リンタがもっとデータを受け付けられるかどうかを繰り返し
		尋ねるように指示します. そして, 受け付けるという応答を
		受けたとき, カーネルはさらなるデータを送信します. 
	      </itemize>

	      割り込み駆動方式は, いくらか高速になりますが, 貴重な IRQ
	      ラインを一つ消費します. うまく機能するものをお使いください. 

	      通信モードを設定するためには2つの方法があります. 1つはカー
	      ネルを変更することで, もう一つは <tt/lptcontrol/ プログ
	      ラムを使用する方法です. 


	      <bf> カーネルを設定することによって, 通信モードを変更す
	      る. </bf>

	      <enum>
		<item> カーネルコンフィグレーションファイルを変更しま
		す. <tt/lpt0/ のエントリを探すか追加してください. 2番目
		のパラレルポートを設定するときは, 代わりに <tt/lpt1/
		を使います. 以下, 3番目のポートは <tt/lpt2/ となってい
		きます. 

		  <itemize>
		    <item> イベント駆動方式にする場合は, <tt/irq/ 指
		    定を追加します. 

<tscreen>
<tt>device lpt0 at isa? port? tty irq <it/N/ vector lptintr</tt>
</tscreen>
		      ここで, <it/N/ はパラレルポート用の IRQ 番号で
		      す. 

		    <item> 監視方式を使用する場合は, <tt/irq/ を追加
		    してはいけません. 

<tscreen>
<tt>device lpt0 at isa? port? tty vector lptintr</tt>
</tscreen>
		  </itemize>
		<item> ファイルをセーブし, config プログラムを起動
		し, カーネルの構築, インストールをおこないます. そして, リ
		ブートしてください. 詳細は, 「<ref id="kernelconfig"
		name="FreeBSDカーネルのコンフィグレーション">」を参照
		してください. 
	      </enum>

	      <bf> <tt/lptcontrol/で通信モードを設定する場合 </bf>
	      <itemize>
		<item>
		  <tt/lpt<it/N// をイベント駆動方式に設定する場合は, 
		  次のように入力します. 
<tscreen>
<tt>lptcontrol -i -u <it/N/</tt>
</tscreen>

		<item>
		  <tt/lpt<it/N// を監視方式に設定する場合は, 次のよう
		  に入力します. 
<tscreen>
<tt>lptcontrol -p -u <it/N/</tt>
</tscreen>
	      </itemize>
	      これらのコマンドを <tt>/etc/rc.local</tt> ファイルに追加
	      しておくと, システムをブートする度に通信モードを設定する
	      ことができます. 詳細については, lptcontrol(8) をご覧くだ
	      さい. 

	  <sect3><heading> プリンタとの通信状況を調べる <label
		id="printing:testing"></heading>

	    <p> スプーリングシステムの設定に進む前に, オペレーティング
	    システムがプリンタにデータを送ることに成功しているかどうか
	    を確かめるべきでしょう. これにより, 印字がうまくいかないと
	    き, プリンタとの通信が問題なのか, スプーリングシステムが問
	    題なのかを分けて調べることがかなり容易になります. 

	    プリンタをテストするためには, プリンタに何かのテキストを送
	    信してみます. 送信した文字をすぐに印字してくれるプリンタに
	    は, <tt/lptest/コマンドを使うと有用です. このコマンドは印
	    字可能な96文字のASCII文字すべてを96行生成します. 

	    PostScript (または他の言語に対応した) プリンタの場合
	    は, もっと巧妙なテストが必要になります. 次のような, 簡単な
	    PostScript プログラムを使えば十分でしょう. 
<code>
%!PS
100 100 moveto 300 300 lineto stroke
310 310 moveto
/Helvetica findfont 12 scalefont setfont
(Is this thing working?) show
showpage
</code>

	    <em/注意:/ このドキュメントでプリンタ用言語を参照するとき
	    は, PostScript のような言語を仮定しており, Hewlett
	    Packard の PCL は考慮していません. PCL は非常に機能的なの
	    ですが, プレインテキストにエスケープシーケンスを混ぜること
	    ができます. PostScript ではプレインテキストを直接印字
	    することはできません. このような種類のプリンタ言語に対して
	    は, 特別な対応をおこなわなければなりません. 


	    <sect4><heading> パラレルポートのプリンタとの接続を調べる
	    <label id="printing:checking:parallel"></heading>

	      <p> この節では, FreeBSDがパラレルポートに接続されたプリ
	      ンタと通信できているかどうかを調べる方法について説明し
	      ています. 

		<bf> パラレルポートのプリンタをテストするために </bf>
		<enum>
		  <item> <tt/su/ コマンドで root になります. 
		  <item> プリンタにデータを送ります. 
		    <itemize>
		      <item> プリンタがプレインテキストを印字できる場
		      合, <tt/lptest/ コマンドを使います. 次のように入
		      力してください. 
<tscreen>
<tt>lptest > /dev/lpt<it/N/</tt>
</tscreen>
		      ここで, <it/N/ はパラレルポートの番号で, 番号は
		      0から始まります. 

		      <item> プリンタが PostScript か他のプリンタ
		      言語を使用している場合, そのプリンタに簡単なプロ
		      グラムを送信してください. 次のように入力します. 
<tscreen>
<tt>cat > /dev/lpt<it/N/</tt>
</tscreen>
		      そして, 一行一行, プログラムを<em/慎重に/入力して
		      下さい. RETUREN または ENTER キーを入力してしま
		      うと, その行は編集できなくなります. プログラムの
		      入力が終わったら, CONTROL+Dか, あなたが設定して
		      いるファイル終了のキーを押してください. 

		      <p> もしくは, プログラムを入力したファイルがある
		      場合は, 次のように入力してください. 
<tscreen>
<tt>cat <it/file/ > /dev/lpt<it/N/</tt>
</tscreen>
		      ここで, <it/file/ はプログラムが格納されていて, 
		      プリンタに送信するファイルの名前です. 
		    </itemize>
		</enum>

		これで何かがプリントされることでしょう. 印字されたテキ
		ストがおかしくても心配しなくても構いません. それについ
		ては, 後で修正します. 

	    <sect4><heading> シリアルポートのプリンタとの接続を調べる
	    <label id="printing:checking:serial"></heading>

	      <p> この節では, FreeBSDがシリアルポートに接続されたプリ
	      ンタと通信できているかどうかを調べる方法について述べられ
	      ています. 

	      <bf> シリアルポートのプリンタをテストするために </bf>
	      <enum>
		<item> <tt/su/ コマンドで root になります. 
		<item> <tt>/etc/remote</tt> ファイルを編集します. 次の
		エントリを加えてください. 
<tscreen>
<tt>printer:dv=/dev/<it/port/:br&num;<it/bps-rate/:pa=<it/parity/</tt>
</tscreen>
		ここで, <it/port/ シリアルポート (<tt/ttyd0/,
		<tt/ttyd1/ など) のデバイスエントリで, <it/bps-rate/は
		プリンタとの通信の転送速度[bit/秒], <it/parity/はプリ
		ンタとの通信で必要とされるパリティ (<tt/even/,
		<tt/odd/, <tt/none/, <tt/zero/のいずれか) を表わしていま
		す. 
		<p>
		次の例は, プリンタをシリアルケーブルでパリティなし, 
		転送速度19200bpsで第3番目のシリアルポートに接続した場
		合です. 

<code>
printer:dv=/dev/ttyd2:br#19200:pa=none
</code>

		<item> <tt/tip/コマンドでプリンタと接続します. 次のよ
		うに入力してください. 

<tscreen><verb>
tip printer
</verb></tscreen>

		これがうまくいかなかった場合は, <tt>/etc/remote</tt>を
		編集して, <tt>/dev/ttyd<it/N/</tt>の代わりに
		<tt>/dev/cuaa<it/N/</tt>を試してみてください. 

		<item> プリンタにデータを送ります. 
		    <itemize>
		      <item> プリンタがプレインテキストを印字できる場
		      合, <tt/lptest/ コマンドを使います. 次のように入
		      力してください. 
<tscreen><verb>
~$lptest
</verb></tscreen>

		      <item> プリンタが PostScript か他のプリンタ
		      言語を使用している場合, そのプリンタに簡単なプロ
		      グラムを入力します. 一行一行, プログラムを<em/慎
		      重に/入力してください. バックスペースキーや他の編
		      集用のキーは, プリンタの制御コードに割り当てられ
		      ているかもしれません. プログラムが終了したことを
		      プリンタに伝えるための特別なファイル終了キーを入
		      力する必要があるかもしれません. PostScript
		      プリンタの場合, CONTROL+Dを入力します. 

		      <p> もしくは, プログラムを入力したファイルがある
		      場合は, 次のように入力してください. 

<tscreen>
<tt>&tilde;&gt;<it/file/</tt>
</tscreen>
		      ここで, <it/file/ はプログラムが格納されている
		      ファイル名です. <tt/tip/コマンドでファイルを送
		      信した後は, ファイル終了を表わすキーを入力する必要
		      があります. 
		    </itemize>
		</enum>

		これで何かがプリントされることでしょう. 印字されたテキ
		ストがおかしくても心配しなくても構いません. それについ
		ては, 後で修正します. 

	<sect2><heading> スプーラに許可を与える:
	<tt>/etc/printcap</tt> ファイル
	<label id="printing:printcap"></heading>

	  <p> ここまでで, プリンタはコンピュータに接続され, (必要なら)
	  プリンタと通信できるようにカーネルを変更し, 簡単なデータをプ
	  リンタに送信することができているはずです. これで, LPDにプリ
	  ンタへのアクセスを制御させる設定をおこなう準備が整いました. 

	  LPDの設定は <tt>/etc/printcap</tt> を編集することでおこないます. 
	  LPDスプーリングシステムはスプーラが使われる毎にこのファイル
	  を参照します. そのため, ファイルを更新するとすぐにその変更が
	  反映されます. 

	  <tt/printcap/ ファイルの書式は簡単です. 
	  <tt>/etc/printcap</tt> の編集はお好みのテキストエディタをお
	  使いください. このファイルの書式は, 
	  <tt>/usr/share/misc/termcap</tt><tt>/etc/remote</tt>
	  といった他のケイパビリティファイルと一致しています. この書式
	  のついての詳細な情報については cgetent(3) をご覧ください. 

	  スプーラの単純な設定法は, 次のステップでおこないます. 

	    <enum>
	      <item> プリンタに名前 (と簡単な別名23個) を付け, それを 
	      <tt>/etc/printcap</tt> ファイルに記述します. これについ
	      ては, 「<ref id="printing:naming"
	      name="プリンタに名前を付ける">」 を参照してください. 

	      <item> <tt/sh/ の項目を追加することで, ヘッダページの出
	      力を禁止します (デフォルトは許可). これについては, 「<ref
		id="printing:no-header-pages" name="ヘッダページの印字
		を禁止する">」 を参照してください. 

	      <item> スプール用のディレクトリを作成し, その位置を 
	      <tt/sd/ 項目で指定します. これについては, 「<ref
		id="printing:spooldir" name="スプーリングディレクトリ
		の作成">」 を参照してください. 

	      <item> プリンタを使用するために <tt>/dev</tt> エントリを
	      設定し, <tt>/etc/printcap</tt><tt/lp/ 項目でそのエ
	      ントリを指定します. これについては, 「<ref id="printing:device"
	      name="プリンタデバイスの特定">」 を参照してください. 
	      プリンタをシリアルポートに接続した場合は, <tt/fs/,
	      <tt/fc/, <tt/xs/, <tt/xc/ の項目を設定する必要があります. 
	      こちらについては, 「<ref id="printing:commparam"
	      name="スプーラのための通信パラメータの設定">」
	      を参照してください. 

	      <item> プレインテキスト用の入力フィルタのインストールを
	      おこないます. 「<ref id="printing:textfilter"
	      name="テキストフィルタのインストール">」 を参照してください. 

	      <item> <tt/lpr/ コマンドで何かを印字することで設定のテス
	      トをおこないます. <ref id="printing:trying" name="印字して
	      みよう"><ref id="printing:troubleshooting"
	      name="トラブルシューティング"> を参照してください. 
	      </enum>


	    <em/注意:/ PostScript プリンタのような, プリンタ言語を
	    使用しているプリンタには, プレインテキストを直接印字させる
	    ことができません. 上にアウトラインを示し, 以下の節で説明す
	    る簡単な設定方法の説明では, そのようなプリンタを設置してい
	    る場合は, プリンタが認識できるファイルだけを印字の対象とし
	    ているという仮定をしています. 


	    多くの場合, 利用者はシステムに設置されているプリンタすべてでプ
	    レインテキストが印字できることを期待しています. 印字作業を
	    おこなうためにLPDのインタフェースを利用するプログラムでも, 通
	    常, そのような仮定を置きます. プリンタ言語を使用するプリン
	    タを設置しており, そのプリンタ言語で記述されたジョブと, 
	    <em/これに加えて/, プレインテキストのジョブも印字できるよ
	    うにしたいならば, 上で示した簡単な設定方法に加えて, さら
	    なる設定をおこなうことを強くお勧めします. すなわち, 原始的なプ
	    レインテキストから PostScript (もしくは, 他のプリンタ
	    言語) に変換するプログラムをインストールしてください. 「<ref
	    id="printing:advanced:if-conversion" name="プレインテキス
	    トのジョブを PostScript プリンタで印字する">」で, そ
	    れをどのようにおこなえばよいのかが説明されています. 

	    <em/訳注:/ 日本語を印字したい場合は, プリンタ言語を使用し
	    ていない「日本語プリンタ」についても, プリンタ固有のエスケー
	    プシーケンスを送る必要があります. また, 漢字コードをプリン
	    タが設定しているものに変換したりする必要があり, 各プリンタ
	    毎に, 日本語用のフィルタが必要になります. 
	    <!-- 時間があったらフィルタを調べることにしよう -->

	  <sect3><heading> プリンタに名前を付ける <label
		id="printing:naming"></heading>

	    <p> 最初の (簡単な) ステップで, プリンタの名前を考えます. プ
	    リンタには別名をいくつか付けることもできるので, 機能的な名前
	    でも風変わりな名前でもどちらを選んでもまったく問題はありません. 

	    少なくとも1つのプリンタには, <tt>/etc/printcap</tt> の中
	    で, <tt/lp/ という別名を持たせるべきでしょう. この名前は
	    デフォルトのプリンタ名になっています. ユーザが環境変数 PRINTER 
	    を設定しておらず, かつ, LPDコマンドのコマンドラインでプリ
	    ンタの名前が指定されていない場合, <tt/lp/  がデフォルトのプリ
	    ンタ名となり, そのプリンタに出力されます. 

	    それから, これは共通の慣習ですが, プリンタの最後の別名には, 
	    メーカーやモデル名を含むプリンタの完全な名称をつけることに
	    なっています. 

	    名前と別名のいくつかを決めたら, <tt>/etc/printcap</tt> ファ
	    イルに設定します. プリンタ名は一番左のカラムから書き始めま
	    す. 別名はそれぞれ縦棒によって区切られ, 最後の別名の後ろに
	    コロンを置きます. 
	    
	    次の例では, 2台のプリンタ (Diablo 630 ラインプリンタと 
	    Panasonic KX-P4455 PostScript レーザライタプリンタ) が定義
	    されている <tt>/etc/printcap</tt> のスケルトンを記しています. 

<code>
#
#  /etc/printcap for host rose
#
rattan|line|diablo|lp|Diablo 630 Line Printer:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:
</code>

	    この例では, 最初のプリンタに <tt/rattan/ という名前と別名
	    として, <tt/line/, <tt/diablo/, <tt/lp/ そして
	    <tt/Diablo 630 Line Printer/ が付けられています. 別名とし
	    て <tt/lp/ があるので, このプリンタはデフォルトのプリンタとなっ
	    ています. 2番目は <tt/bamboo/ と名付けられ, 別名として, 
	    <tt/ps/ と <tt/PS/, <tt/S/, <tt/panasonic/, 
	    <tt/Panasonic KX-P4455 PostScript v51.4/ が付けられていま
	    す. 


	  <sect3><heading> ヘッダページの印字を禁止する<label
		id="printing:no-header-pages"></heading>

	    <p> LPDスプーリングシステムでは, デフォルトでジョブ毎に<em/ヘッ
	    ダページ/を印字します. ヘッダページにはジョブを要求したユー
	    ザ名, ジョブが送られたホスト名, そして, ジョブの名前が素晴
	    らしい大きな文字で印字されています. 残念なことに, この余分
	    なテキストすべてが, 簡単なプリンタ設定法のデバッグの際に紛れ
	    込んできてしまいます. このため, ヘッダページの出力を禁止し
	    ておきます. 

	    ヘッダページの出力を禁止するには, <tt>/etc/printcap</tt> 
	    にあるプリンタのエントリに <tt/sh/ の項目を追加します. 次
	    に, <tt/sh/ を加えた <tt>/etc/printcap</tt> の例を示しま
	    す. 

<code>
#
#  /etc/printcap for host rose - no header pages anywhere
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:
</code>

	    この書式を正しく使うための注意をしておきます. 最初の行は左
	    端のカラムから始まります. それに続く行は TAB ひとつ分だけ
	    字下げします. 最後の行以外のすべての行は, 行末にバックスラッ
	    シュを記述します. 


	  <sect3><heading>スプーリングディレクトリの作成<label
		id="printing:spooldir"></heading>

	    <p> スプーラの簡単な設定の次のステップでは, <em/スプーリン
		グディレクトリ/を作成します. プリンタに送られるジョブ
		は, その印字が終了するまでこのディレクトリに置かれます. 
		また, 他のたくさんのスプーラもこのディレクトリにファイ
		ルを置きます. 

		様々な事情によりスプーリングディレクトリは, 通常, 慣例
		として <tt>/var/spool</tt> の下に置きます. 
		また, スプーリングディレクトリの内容はバックアップをす
		る必要はありません. <tt/mkdir/ によってディレクトリを
		作るだけでスプーリングディレクトリの復旧は完了します. 


		スプーリングディレクトリの名前は, これも慣例ですが, 次
		のようにプリンタの名前と同じにします. 

<tscreen>
<tt>mkdir /var/spool/<it>printer-name</it></tt>
</tscreen>

		しかしながら, ネットワーク上に使用可能なプリンタがたく
		さんあるならば, LPDで印字するための専用のディレクトリに
		スプーリングディレクトリを置きたいと思うかもしれません. 
		例に出てきたプリンタ <tt/rattan/ と <tt/bamboo/ につい
		て, この方式を採用すると, 次のようになります. 

<tscreen><verb>
mkdir /var/spool/lpd
mkdir /var/spool/lpd/rattan
mkdir /var/spool/lpd/bamboo
</verb></tscreen>

		<em/注意:/ 各ユーザが印字するジョブのプライバシを守りた
		いと考えているならば, スプーリングディレクトリを保護し
		て, これを誰からでもアクセスできないようにしたいと思う
		かもしれません. スプーリングディレクトリは, deamon ユー
		ザと daemon グループに所有され, 読み込み, 書き込み, 検
		索可能であり, 他からはアクセスできないようにするべきで
		す. 例題のプリンタに対して, 次のようにすることにしましょ
		う. 

<tscreen><verb>
chown daemon.daemon /var/spool/lpd/rattan
chown daemon.daemon /var/spool/lpd/bamboo
chmod 770 /var/spool/lpd/rattan
chmod 770 /var/spool/lpd/bamboo
</verb></tscreen>

		最後に, <tt>/etc/printcap</tt> ファイルで, これらのディ
		レクトリの位置を LPD に伝える必要があります. スプーリ
		ングディレクトリのパス名は <tt/sd/ 項目で指定します. 

<code>
#
#  /etc/printcap for host rose - added spooling directories
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:sd=/var/spool/lpd/rattan:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:
</code>

		プリンタ名が最初のカラムから始まっており, そのプリンタ
		に関して記述される他のエントリは TAB で字下げされてい
		ること, 各行がバックスラッシュで終わっていることに注意
		してください. 

		<tt/sd/ によりスプーリングディレクトリが指定されていな
		い場合, スプーリングシステムは <tt>/var/spool/lpd</tt> 
		デフォルト値として使用します. 


	  <sect3><heading>プリンタデバイスの特定<label
		id="printing:device"></heading>

	    <p><ref id="printing:dev-ports" name="ポート用エントリ
		を<tt>/dev</tt> に追加する">」では, FreeBSD でプリン
		タとの通信に使用される <tt>/dev</tt> ディレクトリ内の
		エントリを特定します. そして, LPD にその情報を伝えま
		す. 印字するジョブを受け取ると, スプーリングシステムは, 
		 (プリンタにデータを渡す義務がある) フィルタプログラムに
		代わって指定されたデバイスをオープンします. 

		<tt>/etc/printcap</tt> ファイルで <tt/lp/ 項目を使って 
		<tt>/dev</tt> エントリを記入します. 

		ここでの例では, <tt/rattan/ は1番目のシリアルポートに, 
		<tt/bamboo/ は6番目のシリアルポートに接続されているこ
		とにしましょう. このとき, <tt>/etc/printcap</tt> には
		次のようになります. 

<code>
#
#  /etc/printcap for host rose - identified what devices to use
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:sd=/var/spool/lpd/rattan:\
	:lp=/dev/lpt0:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:\
	:lp=/dev/ttyd5:
</code>

		<tt>/etc/printcap</tt> でプリンタの <tt/lp/ 項目が指定
		されていない場合は, LPD はデフォルトとして 
		<tt>/dev/lp</tt> を使用します. <tt>/dev/lp</tt> は, 
		現在の FreeBSD には存在していません. 

		設置したプリンタがパラレルポートに接続されている場合は, 
		「<ref name="テキストフィルタのインストール"
		id="printing:textfilter">」まで読み飛ばしてください. 
		そうでない場合は, 次節の説明に続いてください. 


	  <sect3><heading> スプーラのための通信パラメータの設定
	      <label id="printing:commparam"></heading>

	    <p> シリアルポートにプリンタを接続した場合, プリンタにデー
		タを送信するフィルタプログラムに代わり, 通信速度やパリ
		ティ, その他のシリアル通信パラメータを設定することがで
		きます. このことによる利点は, 

	      <itemize>
		<item> <tt>/etc/printcap</tt> を編集するだけで, 様々な
		通信パラメータを試してみることができます. フィルタプロ
		グラムを再コンパイル必要はありません. 

		<item> スプーリングシステムで, シリアル通信の設定が異
		なっているかもしれない複数のプリンタに同じフィルタプロ
		グラムを使うことが可能になります. 
	      </itemize>

		次の <tt>/etc/printcap</tt> の項目で, <tt/lp/ で指定
		されたデバイスのシリアル通信パラメータを制御できます. 

	      <descrip>
		<tag/<tt>br&num;<it/bps-rate/</tt>/

		デバイスの通信速度を <it/bps-rate/ に設定します. ここ
		で, <it/bps-rate/ は 50, 75, 110, 134, 150, 200, 300,
		600, 1200, 1800, 2400, 4800, 9600, 19200, 38400[bit/秒]
		のいずれかです. 

		<tag/<tt>fc&num;<it/clear-bits/</tt>/

		デバイスをオープンした後で, <tt/sgttyb/ 構造体の 
		<it/clear-bits/ フラグビットをクリアします. 

		<tag/<tt>fs&num;<it/set-bits/</tt>/

		<tt/sgttyb/ 構造体の <it/clear-bits/ フラグビットをセッ
		トします. 

		<tag/<tt>xc&num;<it/clear-bits/</tt>/

		デバイスをオープンした後で, ローカルモードビット 
		<it/clear-bits/ をクリアします. 

		<tag/<tt>xs&num;<it/set-bits/</tt>/

		ローカルモードビット <it/set-bits/ をセットします. 

	      </descrip>
		<tt/fc/, <tt/fs/, <tt/xc/, そして <tt/xs/ のビットに関
		する詳しい情報については, 
		<tt>/usr/include/sys/ioctl_compat.h</tt> を参照してく
		ださい. 
		
		項目 <tt/lp/ で指定されたデバイスを LPD がオープンする
		とき, LPD は <tt/sgttyb/ 構造体のフラグビットを読み出
		します. そして, 項目 <tt/fc/ の全ビットをクリアします. 
		次に, 項目 <tt/fs/ のビットをセットし, その結果を設定
		します. ローカルモードビットに関しても同様におこなわれます. 

		例題のプリンタで6番目のシリアルポートに接続されたプリ
		ンタの設定を追加してみましょう. 通信速度は38400bpsに設
		定します. フラグビットとして, TANDEM, ANYP, LITOUT,
		FLUSHO, PASS8 をセットします. ローカルモードビットでは, 
		LITOUT と PASS8 フラグをセットします. 

<tscreen><verb>
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:\
	:lp=/dev/ttyd5:fs#0x82000c1:xs#0x820:
</verb></tscreen>


	  <sect3><heading>テキストフィルタのインストール<label
		id="printing:textfilter"></heading>

	    <p> ここまでで, プリンタにジョブを送るために使うテキストフィ
		ルタを LPD に設定する準備が整いました. <em/テキストフィ
		ルタ/とは, <em/入力フィルタ/としても知られていますが, 
		印字するジョブがあるときに LPD が起動するプログラムで
		す. LPD がプリンタのためにテキストフィルタを起動する
		とき, LPD はフィルタの標準入力からプリントするジョブ
		を入力し, フィルタの標準出力に項目 <tt/lp/ で指定され
		たプリンタデバイスを接続します. フィルタは, 標準入力か
		らジョブを読み込み, プリンタのための必要な変換をおこなった
		後, その結果を標準出力に出力する, これにより印字がなさ
		れることを期待されています. テキストフィルタについての
		更に詳しい情報については, 「<ref
		id="printing:advanced:filters" name="フィルタはどのよ
		うに機能しているか">」をご覧ください. 


		ここでの簡単なプリンタ設定では, プリンタにジョブを送るため, 
		<tt>/bin/cat</tt> を実行するだけの簡単なシェルスクリプ
		トで間に合います. FreeBSD に標準で付属している 
		<tt/lpf/ というフィルタでは, バックスペース文字を使っ
		た下線引きの動作をおこなう文字ストリームをうまく扱うことが
		できないプリンタのための代替処理をおこなってくれます. もちろん, 
		他のどんなフィルタプログラムを使っても構いません. 
		フィルタ <tt/lpf/ については, 「<ref
		id="printing:advanced:lpf" name="テキストフィルタ 
		lpf">」で詳しく説明します. 


		最初に, 簡単なテキストフィルタであるシェルスクリプト 
		<tt>/usr/local/libexec/if-simple</tt> を作ってみましょ
		う. 次のテキストをお好みのテキストエディタでファイルに
		書き込んでください. 

<code>
#!/bin/sh
#
# if-simple - Simple text input filter for lpd
# Installed in /usr/local/libexec/if-simple
#
# Simply copies stdin to stdout.  Ignores all filter arguments.

/bin/cat &amp;&amp; exit 0
exit 2
</code>
		そして, このファイルを実行可能にします. 
<tscreen><verb>
chmod 555 /usr/local/libexec/if-simple
</verb></tscreen>

		LPD にこのテキストフィルタを使うことを設定するためには, 
		<tt>/etc/printcap</tt><tt/if/ 項目を使って指定しま
		す. これまでの <tt>/etc/printcap</tt> の例のプリンタ
		2台に, このフィルタを加えてみましょう. 
<code>
#
#  /etc/printcap for host rose - added text filter
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:sd=/var/spool/lpd/rattan:\
	:lp=/dev/lpt0:\
	:if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:\
	:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:\
	:if=/usr/local/libexec/if-simple:
</code>

	  <sect3><heading>印字してみよう<label
		id="printing:trying"></heading>


	    <p> 簡単な LPD 設定も終わりにたどり着きました. 残念ながら, 
	        設定はこれでおしまいというわけではありません. なぜなら, 
		さらに, 設定をテストし, すべての問題点を解決しなくては
		ならないからです. 設定をテストするために, 何かを印字し
		てみましょう. LPD システムで印字をするためには, 
		<tt/lpr/ コマンドを使います. このコマンドは, 印字する
		ためのジョブを投入する働きをします. 

		<tt/lpr/ コマンドを 「<ref id="printing:testing"
		name="プリンタとの通信状況を調べる">」で紹介した, 
		あるテスト用のテキストを生成してくれる <tt/lptest/ 
		プログラムと一緒に使うこともできます. 

		<bf> 簡単な LPD 設定をテストするために:</bf>

	    <p> 次のように入力してください. 
<tscreen>
<tt>lptest 20 5 | lpr -P<it/printer-name/</tt>
</tscreen>
		ここで, <it/printer-name/ は <tt>/etc/printcap</tt>
		で指定したプリンタ名 (もしくはその別名) です. デフォルト
		のプリンタを使用する場合は, <tt/-P/ 引数を付けないで 
		<tt/lpr/ を打ち込んでください. もう一度述べますが, ポス
		トスクリプトを期待しているプリンタをテストするならば, 
		<tt/lptest/ を使う代わりに PostScript で書かれたプ
		ログラムをプリンタに送ってください. プログラムを送るた
		めには, プログラムをファイルに格納して, <tt/lpr
		<it/file// と打ち込みます. 

		PostScript プリンタの場合, 送信したプログラムによ
		る結果が得られるでしょう. <tt/lptest/ を使った場合は, 
		以下のような結果が見られるでしょう. 

<tscreen><verb>
!"#$%&amp;'()*+,-./01234
"#$%&amp;'()*+,-./012345
#$%&amp;'()*+,-./0123456
$%&amp;'()*+,-./01234567
%&amp;'()*+,-./012345678
</verb></tscreen>

		更にプリンタをテストしたい場合は, (言語ベースのプリン
		タのための) もっと大きなプログラムを送信するか, 引数を
		変えて <tt/lptest/ を実行します. 例えば, <tt/lptest
		80 60/ で それぞれ80文字の行を60行生成します. 

		プリンタがうまく動かなかった場合は, 次の節, 「<ref
		id="printing:troubleshooting" name="トラブルシューティ
		ング">」をご覧ください. 

	  <sect3><heading>トラブルシューティング<label
		id="printing:troubleshooting"></heading>

	    <p> <tt/lptest/ を使った簡単なテストをおこなった結果, 正しい出
		力を得られずに, 以下に示すような出力が得られるかもしれ
		ません. 
	      <descrip>
		<tag/しばらくしたら出力される, または, 紙の全体が出て
		こない/

		プリンタは上で示されたような印字をおこなったのですが, しばら
		くして止まってしまい, 動かなくなってしまいました. 印字
		された結果をプリンタから取り出すためには, 
		プリンタにある PRINT REMAINING ボタン, また
		は, FORM FEED ボタンを押す必要があるようです. 

		この場合は, おそらくジョブはプリントをする前に更にデー
		タが送られてこないか待ち続けているのでしょう. 
		この問題を解決するためには, プリンタに FORM FEED 文字
		 (あるいは特定の必要な文字コード) を
		送るテキストフィルタを使ってください. プリンタ内部に残っ
		たデータをプリンタにすぐに印字させるには, 普通は, これ
		で十分です. 次のジョブが前のジョブの最終ページの中央の
		どこかから印字を開始させないためにも, 紙の途中で印字の
		ジョブが終了したかどうかを確認するのは有益です. 

		シェルスクリプト <tt>/usr/local/libexec/if-simple</tt> 
		を次のように変更して, プリンタへジョブを送信した後に 
		FROM FEED 文字を印字させるようにします. 
<code>
#!/bin/sh
#
# if-simple - Simple text input filter for lpd
# Installed in /usr/local/libexec/if-simple
#
# Simply copies stdin to stdout.  Ignores all filter arguments.
# Writes a form feed character (\f) after printing job.

/bin/cat &amp;&amp; printf "\f" &amp;&amp; exit 0
exit 2
</code>

		<tag/「階段効果」が現れた/

		次のような印字結果が得られた. 
<tscreen><verb>
!"#$%&amp;'()*+,-./01234
                        "#$%&amp;'()*+,-./012345
                                                #$%&amp;'()*+,-./0123456
</verb></tscreen>
		あなたは<em/「階段効果」/の新たなる犠牲者になってしま
		いました. この原因は, 改行を表わすべき文字がなんであるか
		の解釈が混乱していることにあります. UNIX スタイルのオ
		ペレーティングシステムでは, 改行文字は ASCII コード10
		の line feed (LF) の1文字が使われています. MS-DOS や
		OS/2などは ASCII コード10の LF <em/と/,  ASCII コード
		13の文字 (carriage return または CR) をペアで使います. 
		 (訳注:Machintosh では CR のみで表現されています). 
		大抵のプリンタでは, 改行を表わすために MS-DOS の慣習にしたが
		います. 


		FreeBSD で印字する場合, 印字したテキストは LF 文字だけ
		が使われていました. プリンタでは LF 文字を見つけると, 
		紙を1行分送り出しました. しかし, 次の文字を印字するた
		めの紙の水平方向の位置は維持されました. すなわち, CR 
		文字が意味することは, 次の文字を印字する位置を紙の左端
		に動かすことです. 


		FreeBSD がプリンタに動作をして欲しいと思っている動作を
		以下に示します. 
<tscreen><verb>
プリンタが CR を受け取ったとき		CR 動作 (復帰) をおこなう. 
プリンタが LF を受け取ったとき		CR + LF 動作 (復帰, 改行) をおこなう. 
</verb></tscreen>

		このように動作させるための方法がいくつかあります. 

		  <itemize>
		    <item> これらの文字の解釈を変えるために, プリンタ
			の設定スイッチかコントロールパネルを操作する方
			法. どのようにして設定をするかはプリンタのマニュ
			アルを参照してください. 

		      <p> <em/注意:/ FreeBSD 以外のオペレーティン
			グシステムを切り替えて使う場合, CR と LF 文字
			の解釈をそのオペレーティングシステムで使われて
			いるようにプリンタを<em/再設定/する必要がある
			かもしれません. 以下に示す解決方法のいずれかを
			選ぶのがよいかもしれませんね. 

		    <item> 自動的に LF を CR+LF に変換してくれる 
			FreeBSD 用のシリアルドライバを入手する方法. も
			ちろん, このドライバはプリンタ専用に接続される
			シリアルポート<em/のみ/で動作します. この機能
			を許可するためには, <tt>/etc/printcap</tt> ファ
			イルで対象プリンタの <tt/fs/ 項目で CRMOD ビッ
			トをセットします. 

		    <item> LF 文字の扱いを一時的に変更するための<em/エ
			スケープコード/をプリンタに送る方法. プリンタ
			がサポートしているかもしれないエスケープコード
			については, プリンタのマニュアルを参照してくだ
			さい. 適切なエスケープコードが見つかったら, 最
			初にそのコードを送り, 次にプリントジョブを送信
			するようにテキストフィルタを変更してください. 

		      <p> 次に, Hewlett Packard 社の PCL エスケープコー
			ドに対応しているプリンタのためのテキストフィル
			タの例を示します. このフィルタでは, プリンタ
			に LF 文字を LF と CR の2文字として扱わせます. 
			その後に, プリンタにジョブを送ります. 最後に, 
			ジョブの最終ページの紙を排出するため, FROM
			FEED 文字を送ります. このフィルタは Hewlett
			Packard 社のほとんどすべてのプリンタで機能するは
			ずです. 

<code>
#!/bin/sh
#
# hpif - Simple text input filter for lpd for HP-PCL based printers
# Installed in /usr/local/libexec/hpif
#
# Simply copies stdin to stdout.  Ignores all filter arguments.
# Tells printer to treat LF as CR+LF. Writes a form feed character
# after printing job.

printf "\033&amp;k2G" &amp;&amp; cat &amp;&amp; printf "\f" &amp;&amp; exit 0
exit 2
</code>

			ホスト orchid にある <tt>/etc/printcap</tt> の
			例を以下に示します. ここには, 一番目のパラレル
			ポートにプリンタ (Hewlett Packard LaserJet 3Si)
			が一台接続されており, そのプリンタ名は 
			<tt/teak/ です. 
<code>
#
#  /etc/printcap for host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
	:lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
	:if=/usr/local/libexec/hpif:
</code>

		    <item> <em/訳注:/ LF を CR+LF に置き換える cat コマンド
			を作る方法も当然考えられます. そして, このコマ
			ンドと, <tt>if-simple</tt> の cat の部分
			を置き換えればよいわけです. 具体的にどのように
			するかは, 読者への練習問題としましょう. 
		  </itemize>

		<tag/各行が重ね書きされてしまった/

		プリンタは紙送りをまったくしませんでした. テキストすべての行
		がある行の上で重ねて印字されてしまいました. 

		この問題は, 階段現象とは「正反対」な問題で, ほとんどま
		れにしか起こりません. FreeBSDでは行末として扱われる LF 
		文字が, 紙の左端に印字位置を復帰しますが, 紙送りはしな
		い CR 文字として扱われています. 

		プリンタの設定スイッチかコントロールパネルを使って, 
		LF と CR の文字を次のような解釈をするようにしてください. 
<tscreen><verb>
プリンタが CR を受け取ったとき		CR 動作 (復帰) をおこなう. 
プリンタが LF を受け取ったとき		CR + LF 動作 (復帰, 改行) をおこなう. 
</verb></tscreen>

		<em/訳注:/ LF を CR+LF に置き換える cat コマンドを作る方法
		も当然考えられます. そして, このコマンドと, 
		<tt>if-simple</tt> の cat の部分を置き換えればよいわけ
		です. 具体的にどのようにするかは, 読者への練習問題とし
		ましょう. 

		<tag/プリンタが文字を紛失してしまう/

		印字しているのですが, 各行の23文字が印字されません. 
		プリンタを動かせば動かすほど, もっとたくさんの文字が紛
		失されていき, この問題は更に悪くなっていくかもしれませ
		んでした. 

		この問題は, シリアルポートを通してコンピュータから送ら
		れてくるデータの速度に, プリンタがついていけないことに
		起因します (この問題は, パラレルポートに接続されたプリ
		ンタでは発生することはありません). この問題を克服する
		方法が2つあります. 
		  <itemize>
		    <item> プリンタが XON/XOFF のフロー制御をサポート
			している場合は, 項目 <tt/fs/ で TANDEM ビット
			をセットして, FreeBSD にこの機能を使用させて
			ください. 

		    <item> プリンタがキャリアフロー制御をサポートして
			いる場合は, 項目 <tt/fs/ で MDMBUF ビットをセッ
			トして下さい. それから, プリンタとコンピュータ
			を接続しているシリアルケーブルがキャリアフロー
			制御用に正しく配線されたものかどうかを確認して
			ください. 

		    <item> プリンタがフロー制御をまったくサポートしていな
			い場合は, 項目 <tt/fs/ の NLDELAY と 
			TBDELAY, CRDELAY, VTDELAY, BSDELA のいくつかのビッ
			トを組み合わせて使い, プリンタへ送るデータの流
			れに適当な遅延を加えてください. 
		  </itemize>

		<tag/プリンタは意味不明な文字列を印字した/

		プリンタはランダムなゴミのように見えるものを印字しまし
		たが, 意図したテキストは印字してくれませんでした. 

		この問題は, 通常, シリアルポートに接続したプリンタでの
		通信パラメータの誤りからくる前項とは別の症状です. 
		<tt/br/ 項目の通信速度と <tt/fs/ と <tt/fc/ 項目のパリ
		ティビットの設定を共に調べてみてください. また, プリン
		タでの設定が <tt>/etc/printcap</tt> ファイルで設定した
		内容と一致しているかどうかも確認してください. 

		<em/訳注:/ simple-if のような単純なフィルタだけの状態で, 日
		本語を含むテキストを印字しようとした場合にも, シリアル
		ポート, パラレルポートの使用に関係なく, このような症状
		は見られます. 日本語プリンタの場合, 漢字コードそのもの
		を送信しただけでその漢字を印字してくれるものは, 少なく
		とも訳者は見たことがありません. 漢字を印字するための制御
		コードを別途送信するフィルタが必要となります. また, そ
		のようなフィルタを使用していても, そのフィルタが想定し
		てる漢字コードと異なった文書をプリントしようとしたとき
		もこのような症状は出ます. もちろん, これはプリンタ用の
		言語を持たないプリンタの話で, PostScript プリンタ
		などにプレインテキストを送信しても, 日本語対応, 非対応
		に関らず, 意味不明な文字列が印字される (もしくは, 何も
		印字されない) ことでしょう. 


		<tag/何も起きない/

		もしプリンタが何の動作もしないのであれば, ハード的な問
		題ではなく, 多分 FreeBSD の中に問題があります. 
		<tt>/etc/printcap</tt> ファイルで, デバッグしているプ
		リンタのエントリに (<tt/lf/ 項目で) ログファイルを取るよ
		うに設定を追加してください. 例えば, プリンタ <tt/rattan/ 
		用のエントリの項目 <tt/lf/ は次のようになります. 
<tscreen><verb>
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:sd=/var/spool/lpd/rattan:\
	:lp=/dev/lpt0:\
	:if=/usr/local/libexec/if-simple:\
	:lf=/var/log/rattan.log
</verb></tscreen>
		次に, もう一度印字をおこなってみます. そして, 発生したと思
		われるエラーメッセージを見るためにログファイル (上記の
		例では, <tt>/var/log/rattan.log</tt>) を調べます. そこ
		で見られたメッセージを元に, 問題を解決してみてください. 

		項目 <tt/lf/ が指定されていない場合, LPD はデフォルト
		のログファイルとして <tt>/dev/console</tt> を使います. 
	      </descrip>

    <sect><heading>プリンタを使う<label id="printing:using"></heading>

      <p> この節では, FreeBSD で設定したプリンタを使う方法について説明
	します. ここでは, ユーザレベルでのコマンドを概説します. 
	<descrip>
	  <tag/<tt/lpr//
		印字をおこないます. 

	  <tag/<tt/lpq//
		プリンタキューを調べます. 

	  <tag/<tt/lprm//
		プリンタキューにあるジョブを削除します. 

	</descrip>

	管理者用コマンド <tt/lpc/ もありますが, これは 「<ref
	id="printing:lpc" name="プリンタを管理する">」に記
	します. このコマンドは, プリンタやそのキューの制御のために用い
	られます. 

	<tt/lpr/, <tt/lprm/, そして <tt/lpq/ の3コマンドは, 「<tt/-P/
	<it/printer-name/」オプションをとり, これによって, 
	<tt>/etc/printcap</tt> のように操作の対象となるプリンタやキュー
	を指定します. これによって, 様々なプリンタに対してジョブを送る, 
	取り消す, 調査することができます. <tt/-P/ が使われなかった場
	合は, これらのコマンドは PRINTER 環境変数で指定されたプリンタ
	を使用します. そして, PRINTER 環境変数がなかった場合は, これ
	らのコマンドはデフォルトのプリンタ <tt/lp/ を使います. 

	以下では, <em/デフォルトプリンタ/という用語が意味するプリンタ
	は, PRINTER 環境変数で指定されたプリンタ, もしくは, PRINTER 
	環境変数がない場合は, <tt/lp/ という名前のプリンタです. 

      <sect1><heading> 印字する<label id="printing:lpr"></heading>
	<p>

	ファイルを印字するためには, 次のように入力してください. 

<tscreen>
<tt>lpr <it/filename.../</tt>
</tscreen>
	これにより, 入力されたファイルのそれぞれをデフォルトのプリンタ
	から印字します. ファイル名が与えられなかった場合, <tt/lpr/ 
	は標準入力から印字するデータを読み込みます. 例えば, 次のコマン
	ドにより, ある重要なシステムファイルが印字されます. 
<tscreen><verb>
lpr /etc/host.conf /etc/hosts.equiv
</verb></tscreen>
	印字させるプリンタを選択するためには, 次のように入力します. 
<tscreen>
<tt>lpr -P <it/printer-name/ <it/filename.../</tt>
</tscreen>
	次の例では, プリンタ <tt/rattan/ に, カレントディレクトリにあ
	るファイルの詳細なリストを印字しています. <tscreen>
<verb>
ls -l | lpr -P rattan
</verb></tscreen>
	上記の <tt/lpr/ コマンドではファイル名の指定がないので, 
	<tt/lpr/ は標準入力から印字するデータ, この場合, <tt/ls -l/ 
	コマンドの出力, を読み込みます. 

	<tt/lpr/ コマンドでは, 出力の整形を制御したり, ファイル変換を
	適用したり, 複数部数のコピーを作成したり, などといた様々な幅広
	いオプションを受け付けることもできます. 詳細については, 「<ref
	id="printing:lpr:options" name="その他の印字オプション">」をご
	覧ください. 

      <sect1><heading>ジョブの処理状況を調べる<label id="printing:lpq">
	</heading>

	<p> <tt/lpr/ コマンドを使って印字をする場合, プリントしようと
	するデータは<em/プリントジョブ/と呼ばれる箱に一緒に置かれ, こ
	れが LPD スプーリングシステムに送られます. プリンタにはそれぞ
	れ, ジョブ用のキューがあり, 送られてきたジョブはあなたや他のユー
	ザからの別のジョブと一緒にそのキューで並んで, 処理される順番を
	待ちます. プリンタは到着順にこれらのジョブの印字をおこないます. 

	デフォルトプリンタのキューの状態を表示するには, <tt/lpq/ と入
	力します. プリンタを指定するときは, <tt/-P/ オプションを使い
	ます. 例えば, 次のコマンド
<tscreen><verb>
lpq -P bamboo
</verb></tscreen>
	は, プリンタ <tt/bamboo/ のキューの状態を表示します. この 
	<tt/lpq/ コマンドの出力結果の例を次に示します. 
<tscreen><verb>
bamboo is ready and printing
Rank  Owner	Job  Files				Total Size
active kelly    9    /etc/host.conf, /etc/hosts.equiv   88 bytes
2nd    kelly    10   (standard input)                   1635 bytes
3rd    mary     11   ...                                78519 bytes
</verb></tscreen>
	この例では, <tt/bamboo/ のキューに3つのジョブがあることが分か
	ります. 最初のジョブはユーザ kelly からのものであり, <em/ジョ
	ブ番号/9が割り当てられています. プリンタのすべてのジョブには一意
	なジョブ番号が付けられています. ほとんどの場合, このジョブ番号
	は無視することができますが, ジョブをキャンセルするときにはこの
	番号が必要になります. このことの詳細については, 「<ref
	id="printing:lprm" name="ジョブの削除"> 」をご覧ください. 

	ジョブ番号9のジョブは2つのファイルを処理します. すなわち, 
	<tt/lpr/ のコマンドラインに複数のファイル名が与えられたときは, 
	1つのジョブとして扱われるのです. このジョブは, 現在, アクティ
	ブジョブ (「Rank」の欄の <tt/active/ という後に注目) になってい
	ます. これは, プリンタからそのジョブが現在印字されているはずで
	あることを意味しています. 2番目のジョブでは, <tt/lpr/ コマン
	ドに標準入力からデータが与えられています. 3番目のジョブはユー
	ザ mary から与えられました. このジョブのサイズはとても大きくなっ
	ています. 彼女がプリントしようとしたファイルのパス名はここで表
	示させるには長すぎるため, <tt/lpq/ コマンドはドットを3つだけ
	表示しています. 

	<tt/lpq/ からの出力で一番最初の行もまた有益な情報を与えていま
	す. この行から, プリンタが現在何をしているか (あるいは, 少なく
	とも LPD がプリンタがしていると思っていること) が分かります. 

	<tt/lpq/ コマンドは <tt/-l/ オプションもサポートしています. こ
	れにより, 詳しい情報が表示されます. <tt/lpq -l/ の実行例を次
	に示します. 
<tscreen><verb>
waiting for bamboo to become ready (offline ?)

kelly: 1st				 [job 009rose]
       /etc/host.conf			 73 bytes
       /etc/hosts.equiv		         15 bytes

kelly: 2nd				 [job 010rose]
       (standard input)		         1635 bytes

mary: 3rd				 [job 011rose]
      /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes
</verb></tscreen>

      <sect1><heading>ジョブの削除<label
	    id="printing:lprm"></heading>

	<p> 印字するようジョブを送った後で印字を中断したくなったときは, 
	<tt/lprm/ コマンドで, キューの中からそのジョブを削除することが
	できます. 大抵の場合, アクティブジョブでさえも <tt/lprm/ を使っ
	て削除することができますが, そのジョブの一部またはすべてが印字さ
	れてしまうかもしれません. 

	デフォルトプリンタへのジョブを削除するためには, 最初に, 
	<tt/lpq/ を使ってそのジョブ番号を調べます. すなわち, それから, 
	次のように入力して, ジョブを削除します. 
<tscreen>
<tt/lprm <it/job-number//
</tscreen>
	特定のプリンタへのジョブを削除するときは, <tt/-P/ オプション
	を使ってそのプリンタを指定します. 例えば, プリンタ <tt/bamboo/ 
	のキューからジョブ番号10のジョブを削除するには次のようにします. 
<tscreen><verb>
lprm -P bamboo 10
</verb></tscreen>
	<tt/lprm/ コマンドには略記法がいくつかあります. 
	  <descrip>
	    <tag/lprm -/

		あなたが (デフォルトプリンタへ) 送ったジョブをすべて削除し
		ます. 

	    <tag/lprm <it/user//

		ユーザ <it/user/ が (デフォルトプリンタへ) 送ったジョブ
		をすべて削除します. 他のユーザのジョブを削除できるのはスー
		パユーザだけです. あなたは, あなた自身のジョブしか削
		除することはできません. 

	    <tag/lprm/

		ジョブ番号もユーザ名もシンボル「<tt/-/」も指定されない
		ときは, <tt/lprm/ は現在のアクティブジョブを, そのジョ
		ブを送ったのがあなた自身であるときに限り, デフォルトプ
		リンタから削除します. ただし, スーパユーザは任意のア
		クティブジョブを削除することができます. 
	  </descrip>

	上記の略記法をデフォルトプリンタではなく特定のプリンタに対して
	おこなうときは, <tt/-P/ オプションでそのプリンタを指定するだけよ
	いのです. 例えば, プリンタ <tt/rattan/ のキューへあなたが送っ
	たジョブをすべて削除するためには次のようにします. 

<tscreen><verb>
lprm -P rattan -
</verb></tscreen>

	<em/注意:/ ネットワーク環境で作業をしている場合, あるホストか
	ら送られたプリンタジョブは, これを送ったホストで <tt/lprm/ を
	使った場合に限って, これを削除することができます. 他のホストで
	同じプリンタを使えたとしても, このジョブを削除することはできま
	せん. 次の例では, 他ホストからジョブを削除することを試みていま
	す. 
<code>
rose% lpr -P rattan myfile
rose% rlogin orchid
orchid% lpq -P rattan
Rank   Owner	  Job  Files				     Total Size
active seeyan	  12	...				     49123 bytes
2nd    kelly	  13   myfile				     12 bytes
orchid% lprm -P rattan 13
rose: Permission denied
orchid% logout
rose% lprm -P rattan 13
dfA013rose dequeued
cfA013rose dequeued
rose% 
</code>

      <sect1><heading>その他の印字オプション
	<label id="printing:lpr:options"></heading>

      <p> <tt/lpr/ コマンドには, テキストの整形や, 図や他のファイル形
	式の変換, 複数部コピーの生成, ジョブの扱いなどをを制御すること
	ができます. この節では, これに関するオプションについて記してい
	ます. 

	<sect2><heading> 整形と変換に関するオプション <label
	      id="printing:lpr:options:format"></heading>

	  <p> 以下の <tt/lpr/ 用のオプションはジョブにおけるファイルの
	整形の制御に関するものです. このオプションは, ジョブにプレイン
	テキストが含まれない場合や <tt/pr/ ユーティリティを使ってプレイ
	ンテキストを整形する場合に用いてください. 


	次の例では, プリンタ <tt/bamboo/ に (TeX 組版システムによる)
	DVI ファイル <tt/fish-report.dvi/ を印字しています. 
<tscreen><verb>
lpr -P bamboo -d fish-report.dvi
</verb></tscreen>
	このオプションは, ジョブに含まれるすべてのファイルに対して適用さ
	れます. したがって, 1つのジョブに (例えば) DVI ファイルと ditroff 
	ファイルを混在させることはできません. その代わりに, ファイルを
	形式毎に別々のジョブに分け, それぞれのジョブでその形式用の変換
	オプションを使って印字してください. 

	    <em/注意:/ <tt/-p/ と <tt/-T/ を除くすべてのオプションを使用
	するためには, 出力先プリンタ用の変換フィルタが必要です. 例えば, 
	<tt/-d/ オプションを使用するには, DVI 用の変換フィルタが必要
	です. 詳細については, 「<ref id="printing:advanced:convfilters"
	name="変換フィルタ">」で説明しています. 


	    <descrip>
	      <tag/<tt/-c// cifplot ファイルを印字します. 

	      <tag/<tt/-d// DVI ファイルを印字します. 

	      <tag/<tt/-f// FORTRAN プログラムを印字します. 

	      <tag/<tt/-g// plot のデータを印字します. 

	      <tag/<tt/-i <it/number///

		出力に対して, <it/number/ カラム分の字下げをおこないます. 
		<it/number/ が省略されると, 8カラム分字下げされます. 
		このオプションはある変換フィルタと一緒の指定されたとき
		のみに機能します. 

		<em/注意:/ <tt/-i/ と数字の間に空白を入れてはいけませ
		ん. 

	      <tag/<tt/-l//

		制御文字を含む文字通りのテキストデータを印字します. 

	      <tag/<tt/-n// ditroff (device independent troff) データ
		を印字します. 

	      <tag/-p/

		印字する前に <tt/pr/ によってプレインテキストを整形し
		ます. 詳細については pr(1) をご覧ください. 

	      <tag/<tt/-T <it/title///

		<tt/pr/ コマンドにより生成されるヘッダを, ファイル名の
		代わりに <it/title/ とする. このオプションは, <tt/-p/ 
		と一緒に使ったときのみ機能する. 

	      <tag/<tt/-t// troff データを印字します. 

	      <tag/<tt/-v// ラスタのデータを印字します. 

	    </descrip>

	次の例では, <tt/ls/ のマニュアルを美しく整形したものをデフォ
	ルトプリンタで印字しています. 
<tscreen><verb>
zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t
</verb></tscreen>
	<tt/zcat/ コマンドで <tt/ls/ のマニュアルのソースファイルの圧
	縮を復元し, これを <tt/troff/ コマンドに渡しています. これによ
	り, ソースファイルが整形され, GNU troff の形式となります. そ
	の結果は <tt/lpr/ に渡され, LPD スプーラへジョブの要求が発せ
	られます. <tt/lpr/ には <tt/-t/ オプションが使われているため, 
	スプーラにて, GNU troff の形式からジョブを印字したときにデフォ
	ルトプリントが解釈できる形式へと変換されます. 

	<sect2><heading> ジョブに関するオプション <label
	      id="printing:lpr:options:job-handling"></heading>

	  <p> 以下のオプションは, <tt/lpr/ によって, そのジョブを特殊
	な扱いにするよう LPD に指示するためのものである. 

	    <descrip>
	      <tag/-&num; <it/copies//

		ジョブに含まれるファイルのそれぞれを1部だけ印字するの
		ではなく, <it/copies/ 部のコピーを生成させるものです. 
		管理者によっては, プリンタの消耗を避け, コピー機による
		複製を奨励するためにこのオプションの使用が禁止されてい
		るかもしれません. これに関しては, 「<ref
		id="printing:advanced:restricting:copies"
		name="複数部のコピーの印字を制限する">」をご覧ください. 

		<p> 次の例では, デフォルトプリンタで <tt/parser.c/ を3
		部コピーし, 次に, <tt/parser.h/ を3部コピーしています. 
<tscreen><verb>
lpr -#3 parser.c parser.h
</verb></tscreen>

	      <tag/-m/
	      
		印字ジョブが完了した後で, メールを送ります. このオプショ
		ンを付けると, LPD システムはジョブの扱いが終了したと
		きに, あなたのアカウントにメールを送ります. メールのメッ
		セージには, ジョブが正常終了したのか, あるいは, 何か異
		常があり, (しばしば) その異常が何であったのかが書かれて
		います. 

	      <tag/-s/ 印字ファイルをスプールディレクトリにコピーせず, 
		代わりに, シンボリックリンクを作成するよう指示します. 

		印字させるジョブのサイズが大きいとき, このオプショ
		ンを使うと便利かもしれません. このオプションにより, スプー
		ルディレクトリの容量が節約されます (それに, 巨大なジョ
		ブのお陰でスプールディレクトリのあるファイルシステムの
		空き容量がなくなってしまうかもしれません). さらに, 
		LPD がいちいちすべてのデータをコピーする必要がなくなりま
		すので, 時間の節約にもなります. 

		ただし, 欠点もあります. LPD はオリジナルのファイルを
		直接参照するので, 印字が終了するまでそのファイルを変更
		したり削除することができません. 

		<em/注意:/ リモートのプリンタで印字している場合, LPD 
		は, 結局のところ, ローカルホストからリモートホストにファ
		イルをコピーする必要があります. したがって, <tt/-s/ オプ
		ションはローカルのスプーリングディレクトリの空き容量を
		節約するだけで, リモート側では節約されません. それに
		も関わらず, このオプションはそれでも有用です. 

	      <tag/-r/

		ジョブに含まれるファイルを, スプーリングディレクトリに
		ファイルをコピーした後に削除します. もしくは, <tt/-s/ 
		オプションと一緒に使われた場合は, 印字終了後に削除され
		ます. このオプションの使用には十分注意して下さい. 
	    </descrip>

	<sect2><heading> ヘッダページ用オプション <label
	      id="printing:lpr:options:misc"></heading>

	  <p> 以下のオプションにより, ジョブのヘッダページに通常印字さ
	れるテキストを <tt/lpr/ に調整させることができます. 対象のプリ
	ンタからヘッダページが出力されない場合は, これらのオプションは
	何の効力も持ちません. ヘッダページの設定に関する情報については, 
	「<ref name="ヘッダページ"
	id="printing:advanced:header-pages">」を参照してください. 

	    <descrip>
	      <tag/-C <it/text//

		ヘッダページに印字されるホスト名を <it/text/ に置き換
		えます. なお, ホスト名の場所には, 通常, ジョブの要求が
		あったホストの名前が印字されます. 

	      <tag/-J <it/text//

		ヘッダページに印字されるジョブ名を <it/text/ に置き換
		えます. ジョブ名の場所には, 通常, ジョブの最初のファイ
		ル名, または, 標準入力からデータが印字されたときは
		「stdin」が印字されます. 

	      <tag/-h/
	      
		ヘッダページを出力を禁止します. <em/注意:/ サイトによっ
		ては, そのヘッダページの生成方法により, このオプション
		の効果が現れないかもしれません. 詳細は, 
		「<ref name="ヘッダページ"
		id="printing:advanced:header-pages">」をご覧ください. 
	    </descrip>

      <sect1><heading> プリンタを管理する <label
	    id="printing:lpc"></heading>

	<p> プリンタの管理者として, プリンタの設置, 設定, そして, それ
	らのテストをおこなう必要がありました. <tt/lpc/ コマンドにより, 
	これまでとは別な管理方法がプリンタと対話的におこなわれます. 
	<tt/lpc/ により, 次のことが可能となります. 

	  <itemize>
	    <item> プリンタの起動, 停止をおこなう. 

	    <item> キューへの入力の許可, 禁止をおこなう. 

	    <item> それぞれのキューにあるジョブの順番を変更する. 
	  </itemize>

	最初に用語に関する注意をしておきます. プリンタが<em/停止してい
	る/とは, キューの中にあるどのジョブも印字されることがない状態
	を言います. この状態においても, ユーザはまだジョブの要求をおこなう
	ことができますが, これらのジョブはキューの中で, プリンタが<em/
	スタートする/状態になるまで, あるいは, キューの内容が削除され
	るまで待たされることになります. 

	キューが<em/禁止状態にある/とは, (root 以外の) すべてのユーザが
	プリンタにジョブを要求することができない状態のことを言います. 
	キューが<em/許可状態にある/場合は, ジョブの入力が許可されます. 
	キューが<em/禁止状態にある/場合でも, プリンタを<em/スタートす
	る/状態にすることは可能です. この場合は, キューが空になるまで, 
	キュー内のジョブの印字が続けられます. 

	一般的に, <tt/lpc/ コマンドを使用するには root の権限を持って
	いる必要があります. 一般のユーザも <tt/lpc/ コマンドを使うこと
	はできますが, プリンタの状態を取得することとハングしたプリンタ
	を再スタートすることだけに使用が制限されています. 

	以下に, <tt/lpc/ コマンドに関する説明の要約を述べます. ほとん
	どのコマンドでは, 操作対象となるプリンタを指定するため 
	<it/printer-name/ 引数を与えます. <it/printer-name/ の代わり
	に <tt/all/ が与えられると, 操作は <tt>/etc/printcap</tt> 内に
	ある全プリンタに対しておこなわれることになります. 

	  <descrip>
	    <tag/<tt/abort <it/printer-name///

		現在のジョブをキャンセルし, プリンタを停止させます. キュー
		が許可状態にある場合は, ユーザはまだジョブを入力する
		ことができます. 

	    <tag/<tt/clean <it/printer-name///

		プリンタのスプーリングディレクトリから, ジョブの古いファ
		イルを削除します. 状況によって, とりわけ, 印字途中でエ
		ラーが発生していたり, 管理操作が頻発していた場合には, 
		ジョブで作られたファイルを LPDが完全に削除しないことが
		あります. このコマンドでは, スプーリングディレクトリに
		入っていないファイルを見つけ出し, それを削除しています. 

	    <tag/<tt/disable <it/printer-name///

		キューに新しいジョブを入れることを禁止します. プリンタ
		がスタート状態にあるときは, キューに残っているジョブの
		印字は続けられます. ただし, キューが禁止状態にあったと
		しても, スーパーユーザ (root) は常にジョブを入力するこ
		とができます. 

		このコマンドは, 新しいプリンタやフィルタを設置している
		間に使用すると有用です. すなわち, キューを禁止状態にし
		ておくと, root によるジョブのみが入力されます. そして, 
		その他のユーザは, テストが完了し, <tt/enable/ コマン
		ドでキューが再度許可状態になるまで, ジョブの入力はでき
		なくなります. 

	    <tag/<tt/down <it/printer-name/ <it/message...///

		プリンタをダウンさせます. これは, <tt/disable/ をおこなっ
		た後で, <tt/stop/ をおこなった場合と等価になります. 
		<it/message/ は, ユーザが <tt/lpq/ コマンドでプリンタ
		のキューの状態を調べたり, <tt/lpc status/ でプリンタの
		状態を調べたときに, プリンタの状況として表示されるメッ
		セージです. 

	    <tag/<tt/enable <it/printer-name///

		プリンタのキューを許可状態にします. ユーザはジョブの入
		力ができるようになりますが, プリンタがスタートの状態に
		なるまでは, プリンタからは何も印字されません. 

	    <tag/<tt/help <it/command-name///

		<it/command-name/ コマンドのヘルプメッセージを表示しま
		す. <it/command-name/ が指定されなかった場合は, 利用
		できるコマンドの要約が表示されます. 

	    <tag/<tt/restart <it/printer-name///

		プリンタをスタートさせます. 通常のユーザは, LPD があ
		る異常な状況でハングしたときに限り, このコマンドを使用
		することができます. しかし, <tt/stop/ または 
		<tt/down/ コマンドにより, 停止状態にあるプリンタをスター
		トさせることはできません. <tt/restart/ コマンドは, 
		<tt/abort/ の後に <tt/start/ をおこなったことと同じになり
		ます. 

	    <tag/<tt/start <it/printer-name///

		プリンタをスタートさせます. プリンタのキューにあるジョ
		ブを印字することでしょう. 

	    <tag/<tt/stop <it/printer-name///

		プリンタを停止します. プリンタは, 現在のジョブを終了さ
		せ, そして, キューにあるその他のジョブは印字しません. 
		プリンタが停止状態にあったとしても, まだ, 許可状態にあ
		るキューに対して, ジョブを送ることができます. 

	    <tag/<tt/topq <it/printer-name/ <it/job-or-username...///

		<it/printer-name/ のキューに対して, ジョブ番号 
		<it/job/ のジョブ, または, ユーザ <it/username/ から送
		られたジョブを置き換えて, キューの先頭に持ってきます. 
		このコマンドに関しては, <it/printer-name/ の代わりに 
		<tt/all/ を使用することはできません. 

	    <tag/<tt/up <it/printer-name///

		プリンタをアップ状態にします. これの反対のコマンドが 
		<tt/down/ です. <tt/start/ の次に <tt/enable/ をおこなっ
		たことと等しくなります. 
	  </descrip>

	コマンドラインから上記のコマンドを入力すると, <tt/lpc/ はこれ
	を受け付けます. コマンドが入力されなかった場合は, <tt/lpc/ は
	対話モードに入り, <tt/exit/, <tt/quit/, または, ファイル終端
	文字が入力されるまでコマンドの入力ができます. 


    <sect><heading> プリンタ設定上級編 <label
	  id="printing:advanced"></heading>

      <p> この節では, 特殊な形式のファイルを印字するためのフィルタ, ヘッ
	ダページ, ネットワーク越しのプリンタへの印字, そして, プリンタ
	使用の制限や課金について説明しています. 

	<sect1><heading> フィルタ <label
	    id="printing:advanced:filter-intro"></heading>

	<p> LPD では, ネットワークプロトコル, キュー, アクセス制御, そ
	して, 印字のためのその他の側面について扱いますが, <em/実際の/
	作業のほとんどは<em/フィルタ/によっておこなわれています. フィルタ
	は, プリンタと通信し, プリンタのデバイス依存性や特殊な要求を扱
	うプログラムです. 簡単なプリンタ設定では, プレインテキストのた
	めのフィルタをインストールしました. このプレインテキストフィル
	タは, ほとんどのプリンタで機能する極めて単純なものでした. 
	 (「<ref id="printing:textfilter"
	name="テキストフィルタのインストール">」を参照)

	しかしながら, 形式変換やプリンタ課金, 特定のプリンタの癖, など
	をうまく利用するためには, フィルタがどのように機能するかという
	ことを理解しておくべきです. これらの側面を扱うためには, 最終的
	には, フィルタの責任であるからです. そして, これは悪い情報です
	が, ほとんどの場合において, <em/あなた自身/がフィルタを供給す
	る必要があるということです. また都合のよいことには, たくさんのフィルタが
	一般的に利用できるということです. もしフィルタがなかったとし
	ても, 普通は, フィルタを作るのは簡単です. 

	FreeBSD にも, プレインテキストを印字させることができる 
	<tt>/usr/libexec/lpr/lpf</tt> というフィルタが1つ付いています. 
	 (このフィルタはファイルに含まれるバックスペースやタブを扱いま
	す. また, 課金をすることもできますが, できることはこれだけしか
	ありません.) いくつかのフィルタとフィルタの構成要素が FreeBSD 
	の ポート集にもあります. 

	この節で述べることは次の通りです. 

	  <itemize>
	    <item><ref id="printing:advanced:filters" name="フィル
		タはどのように機能しているか">」では, 印字の過程におけ
		るフィルタの役割を概説します. この節を読むことで, LPD 
		がフィルタを使うときに, 「見えないところで」何が起こっている
		かが理解できるでしょう. このことを知っておくと, プリン
		タそれぞれに様々なフィルタをインストールしたときに遭遇
		するかもしれない問題を予期したり, デバッグするときに役
		立つでしょう. 
	      
	    <item> LPD では, すべてのプリンタからデフォルトでプレインテ
		キストを印字できることを期待しています. このことは, プ
		レインテキストを直接印字できない PostScript (また
		は他の言語用の) プリンタでは問題を引き起こします. 「<ref
		id="printing:advanced:if-conversion" name="プレインテキス
		トのジョブを PostScript プリンタで印字する">」
		で, この問題を克服する方法について述べます. PostScript
		プリンタをお持ちの方は, この節をお読みになること
		をお薦めします. 

	    <item> PostScript は様々なプログラムのための有名な出
		力形式です. ある人たちは (著者自身を含めて) PostScript
		のコードさえも直接書いてしまいます. しかし, PostScript
		プリンタは高価です. 「<ref id="printing:advanced:ps"
		name="非 PostScript プリンタで PostScript をシ
		ミュレートする">」では, PostScript データを<em/非
		PostScript プリンタ/に受けつけさせ, 印字させるために, 
		どのようにしてプリンタ用のテキストフィルタをさらに変更
		すればよいのか, ということについて述べます. PostScript
		プリンタを持っていない方は, この節をお読みになる
		ことをお薦めします. 
	      
	    <item><ref id="printing:advanced:convfilters"
		name="変換フィルタ">」では, 図形や組版データといっ
		た特定のファイル形式を, プリンタが理解できる形式へ変換
		する作業を自動的におこなわせる方法について述べます. この節
		を読むと, troff のデータを印字するには <tt/lpr -t/, 
		または, TeX DVI を印字するには <tt/lpr -d/, ラスタイ
		メージデータを印字するには <tt/lpr -v/, などといったよ
		うにユーザが入力することができるようにプリンタの設定を
		おこなうことができます. この節もお読みになることをお薦めし
		ます. 

	    <item><ref id="printing:advanced:of" name="出力フィルタ">」
		では, あまり使われない LPD の機能のすべて, 
		すなわち, 出力フィルタに関することが記述されています. 
		ヘッダページ (「<ref id="printing:advanced:header-pages"
		name="ヘッダページ">」参照) を印字させていない場合は, 
		多分, この節は飛ばしても構わないでしょう. 

	    <item><ref id="printing:advanced:lpf" name="テキストフィ
		ルタ lpf">」では, <tt/lpf/ についての説明が, 
		ほぼ完全におこなわれています. これは FreeBSD に付属するラ
		インプリンタ (または, ラインプリンタのように動作するレー
		ザプリンタ) のための, 単純なテキストフィルタです. プレ
		インテキストを印字したことに対して課金をおこなう方法が至急
		必要な場合, もしくは, バックスペース文字を印字しようと
		すると煙を発するプリンタを持っている場合は, 絶対に 
		<tt/lpf/ を検討するべきです. 

<!--
	    <item> 「<ref id="printing:advanced:kanji" name="日本語を
		印字するために(訳者補足)">」では, 日本語を含むテキスト
		を印字するためのヒントを述べてます. 
-->
	  </itemize>



	<sect2><heading> フィルタはどのように機能しているか <label
	      id="printing:advanced:filters"></heading>

	  <p> 既に言及したように, フィルタとは, プリンタにデータを送る
	際に, デバイスに依存した部分を取り扱うために LPD によって起動
	される実行プログラムです. 

	LPD がジョブ中のファイルを印字しようとするとき, LPD はフィル
	タプログラムを起動します. このとき, フィルタの標準入力を印字す
	るファイルに, 標準出力をプリンタに, そして, 標準エラー出力をエ
	ラーログファイル (<tt>/etc/printcap</tt> 内の <tt/lf/ 項目で指
	定されたファイル, または, 指定されていない場合は, デフォルトと
	して <tt>/dev/console</tt>) にセットします. 

	LPD が起動するフィルタと, その引数が何であるかは, 
	<tt>/etc/printcap</tt> ファイルの内容と, ジョブの起動時に
	ユーザが指定した <tt/lpr/ コマンドの引数に依存しています. 例え
	ば, ユーザが <tt/lpr -t/ と入力した場合は, LPD は出力先のプリ
	ンタ用の <tt/tf/ 項目で指定されている troff 用のフィルタを起動
	させるでしょう. ユーザがプレインテキストの印字を指示したときは, 
	<tt/if/ で指定されたフィルタが起動されるでしょう (このことはほ
	とんどの場合にあてはまります. 詳細については, 「<ref
	id="printing:advanced:of" name="出力フィルタ">」をご覧ください). 

	<tt>/etc/printcap</tt> で指定可能なフィルタは次の3種類がありま
	す. 
	    <itemize>
	      <item> <em/テキストフィルタ/(LPD のドキュメントでは紛ら
		わしいことに<em/入力フィルタ/と呼んでいますが) は一般の
		テキストの印字を扱います. これはデフォルトのフィルタと
		考えてください. LPD では, すべてのプリンタに対して, デフォ
		ルトでプレインテキストが印字できることを期待しています. 
		さらに, バックスペースやタブを正しく扱い, また, 他の特
		殊な文字が入力されてもプリンタに混乱を来さないようにす
		るのはテキストフィルタの仕事であると考えています. 

		プリンタの使用に対して課金をしなくてはならない環境にあ
		るときは, テキストフィルタが印字したページ数を数える作
		業もしなくてはなりません. この作業は, 通常, 印字した行
		数を数え, これをプリンタが1ページ当たりに印字できる行
		数と比較することでおこなわれます. 

		テキストフィルタは, 次のような引数を付けて起動されます. 
<tscreen>
<tt>[-c] -w<it/width/ -l<it/length/ -i<it/indent/ -n <it/login/ -h <it/host/ <it/acct-file/</tt>
</tscreen>
		ここで, 
		<descrip>
		  <tag/<tt/-c//

			<tt/lpr -l/ によってジョブが入力されたときに与
			えられます. 

		  <tag/<tt/<it/width///

			<tt>/etc/printcap</tt> で指定された <tt/pw/
			(page width) 項目の値が与えられます. デフォル
			トは, 132です. 

		  <tag/<tt/<it/length///

			<tt/pl/ (page length) 項目で指定された値が与え
			られます. デフォルトは66です. 

		  <tag/<tt/<it/indent///

			<tt/lpr -i/ によって与えられた字下げの量で, デ
			フォルトは0です. 

		  <tag/<tt/<it/login///

			ファイルを印字したユーザのアカウント名が与えら
			れます. 

		  <tag/<tt/<it/host///

			ジョブが入力されたホスト名が与えられます. 

		  <tag/<tt/<it/acct-file///

			<tt/af/ 項目で指定されている課金データファイル
			の名前が与えられます. 
		</descrip>

	      <item> <em/変換フィルタ/は, 特定のファイル形式をプリンタ
		が紙に印字できるようなものに変換します. 例えば, プリン
		タで ditroff 組版データを直接印字することはできません. 
		しかし, ditroff データをプリンタが消化し, 印字するこ
		とができる形式へ変換するために, ditroff ファイル用フィ
		ルタをインストールすることができます. 「<ref
		id="printing:advanced:convfilters" name="変換フィルタ">」
		で, これらに関するすべてについて説明します. 
		プリンタの課金をする必要がある場合は, 変換フィルタでも
		印字ページを数える作業が必要となります. 

		変換フィルタは次の引数をとって起動されます. 
<tscreen>
<tt>-x<it/pixel-width/ -y<it/pixel-height/ -n <it/login/ -h <it/host/ <it/acct-file/</tt>
</tscreen>
		ここで, <it/pixel-width/ は, <tt/px/ 項目で指定され
		た値 (デフォルトは0),  <it/pixel-height/ は, <tt/py/ 項
		目で指定された値 (デフォルトは0) です. 

	      <item> <em/出力フィルタ/は, テキストフィルタが指定されて
		おらず, かつ, ヘッダページの出力が許可されている場合に
		のみ使われます. 「<ref id="printing:advanced:of"
		name="出力フィルタ">」で, これらのことについて説明し
		ます. アウトプットフィルタに対する引数は次の2つだけです. 
<tscreen>
<tt>-w<it/width/ -l<it/length/</tt>
</tscreen>
		ここで, <tt/-w/ と <tt/-l/ は, テキストフィルタの場合
		と同じです. 
	    </itemize>

	フィルタは, 次に示すの終了状態をもってプログラムを <em/exit/ 
	するべきです. 
	    <descrip>
	      <tag/exit 0/

		フィルタがファイルを正常に印字した場合. 

	      <tag/exit 1/

		フィルタはファイルの印字に失敗したが, LPD に再度ファ
		イルの印字を試みて欲しい場合. この終了状態で終了した場
		合, LPD はフィルタを再スタートします. 

	      <tag/exit 2/

		フィルタはファイルの印字に失敗し, かつ, LPD に再出力
		を試みて欲しくない場合. この場合, LPD はそのファイル
		を放棄します. 
	    </descrip>

	FreeBSD に付属するテキストフィルタ 
	<tt>/usr/libexec/lpr/lpf</tt> は, FROM FEED 文字が送られたと
	きやプリンタ使用に対する課金をどのようにするかを決定するために, 
	ページ幅やページ長の引数を利用します. また, 課金用のエントリを
	作成するため, ログイン名, ホスト名, 課金ファイル名の引数を利用
	します. 

	もし, フィルタの購入を検討しているならば, LPD と互換性がある
	かどうかを確認してください. もしそうならば, 上述の引数リストをサ
	ポートしていなければなりません. 一般向けの使用のためにフィルタ
	を作成する計画をしている場合は, 同じ引数リストと終了コードをサ
	ポートしてください. 

	<sect2><heading> プレインテキストのジョブを PostScript プリン
	タで印字する <label id="printing:advanced:if-conversion">

	</heading>

	  <p> コンピュータと PostScript (または, 他の言語に対応し
	た) プリンタをあなたしか使用しない場合は, プリンタにプレ
	インテキストを絶対に送らない, そして, プリンタにプレインテキス
	トを送りたがっている様々なプログラムの機能を決して使わないこと
	にしてください. そうすれば, この節に書かれたことに心を煩わせる必
	要はまったくなくなります. 

	しかし, PostScript とプレインテキストの両方のジョブをプリン
	タへ送りたいと思っている場合は, プリンタ設定についての要求が増
	えるでしょう. 両者をプリンタへ送信するためには, 到着
	したジョブがプレインテキストであるか PostScript であるかを
	検出するテキストフィルタが必要です. PostScript のジョブは
	すべて <tt/&percnt;!/ で始まらなければならないことになっています
	 (他のプリンタ言語に関しては, プリンタのドキュメントをご覧くだ
	さい). ジョブの最初の2文字がこれならば, PostScript である
	ことが分かります. したがって, ジョブのそれ以降の部分をプリンタに直
	接送ることができます (訳注:PostScript では, <tt/&percnt/ 
	以降はコメントとして扱われるので, 最初の <tt/&percnt;!/ の行を
	読み捨てても問題はない). 最初の2文字が <tt/&percnt;!/ でない場
	合は, フィルタはテキストを PostScript に変換し, その結果を
	使って印字をおこないます. 

	この作業をどうやってやればよいのでしょうか. 

	シリアルポートにプリンタを接続した場合は, <tt/lprps/ をインス
	トールすることをお勧めします. <tt/lprps/ は PostScript 用のフィルタで, 
	プリンタとの双方向通信をおこないます. このフィルタでは, プリンタか
	らの冗長な情報を得ることで, プリンタの状況を示すファイルが更新
	されていきます. したがって, ユーザや管理者は (「トナー残量少」や
	「紙詰まり」といった) プリンタの状況を正確に知ることができます. 
	しかし, もっと重要なことは, <tt/psif/ と呼ばれるプログラムが
	含まれているということです. このプログラムは, 入力されたジョブ
	がプレインテキストかどうかを検出し, これを PostScript に変
	換するために, <tt/textps/ (<tt/lprps/ に付属する別のプログラ
	ム) を呼び出します. そして, このジョブをプリンタに送るために, 
	<tt/lprps/ が使われます. 

	<tt/lprps/ は FreeBSD のポート集に含まれているべきものです (「<ref
	id="ports" name="ポートコレクション">」を参照してください). 
	もし含まれていないならば, すぐにそのようにすべきです. もちろん, 
	自分自身でプログラムを取ってきて, コンパイルし, インストールす
	ることもできます. <tt/lprps/ をインストールした後は, 
	<tt/lprps/ の一部である <tt/psif/ プログラムのパス名を指定する
	だけです. ポート集から <tt/lprps/ をインストールしたときは, 
	<tt>/etc/printcap</tt> の中のシリアル接続した PostScript
	プリンタのエントリに対して, 次を使ってください. 
<tscreen><verb>
	    :if=/usr/local/libexec/psif:
</verb></tscreen>
	LPD にプリンタをリード・ライトモードでオープンさせるために, 
	<tt/rw/ 項目も指定すべきです. 

	パラレルポートに接続したプリンタの場合 (すなわち, <tt/lprps/ が
	必要としているプリンタとの双方向通信ができない), テキストフィ
	ルタとして次のシェルスクリプトを使うことができます. 
<code>
#!/bin/sh
#
#  psif - Print PostScript or plain text on a PostScript printer
#  Script version; NOT the version that comes with lprps
#  Installed in /usr/local/libexec/psif
#

read first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

if [ "$first_two_chars" = "%!" ]; then
   #
   #  PostScript job, print it.
   #
   echo $first_line &amp;&amp; cat &amp;&amp; printf "\004" &amp;&amp; exit 0
   exit 2
else
   #
   #  Plain text, convert it, then print it.
   #
   ( echo $first_line; cat ) | /usr/local/bin/textps &amp;&amp; printf "\004" &amp;&amp; exit 0
   exit 2
fi
</code>
	上記のスクリプトにおいて, <tt/textps/ はプレインテキストから
	PostScript へ変換するために別にインストールしたプログラム
	です. テキストから PostScript へ変換するのには, お好みのどんなプロ
	グラムでも使うことができます. FreeBSD の ポート集 (「<ref
	id="ports" name="ポートコレクション">」を参照してください) には, 
	<tt/a2ps/ と呼ばれるテキストから PostScript に変換するプログラムが
	入っています. 

	<em/訳注:/ 上記スクリプトでは, 先頭の行を読み込むために read 
	を使っていますが, 困ったことに, read は読み込んだ文字列の先頭
	の空白文字を取り除いてしまいます. 従って, これらの空白文字は印
	字されないことになり, 印字結果がファイルのイメージと異なる場合
	が出てきます. この事情は csh を利用した場合でも変わりません.
	仮に, 先頭の空白文字を除去しない read コマンドを作ったとしても, 
	「echo $first_line」の $first_line 変数の内容をシェルが展開す
	る際に $first_line の先頭の空白文字が失われるため, 問題の解決
	にはなりません. 残念ながら, 訳者はこの問題をシェルプログラムだ
	けで解決する方法をしりません. perl か C 言語の力を借りないと解
	決できないと思います. 


	<sect2><heading> 非 PostScript プリンタで PostScript
	をシミュレートする <label id="printing:advanced:ps"></heading>

	  <p> PostScript は質の高い組版と印字をおこなうための<em/事実
	上の/標準です. しかしながら, PostScript は, <em/高価な/標
	準です. ありがたいことに, Alladin Enterprises から
	<it/Ghostscript/ と呼ばれる, PostScript 互換の動作をするフリー
	のプログラムが出されていて, FreeBSDで動きます. Ghostscript 
	はほとんどの PostScript ファイルを読むことができ, これらの
	各ページをたくさんのブランドの非 PostScript プリンタを含む
	様々なデバイス用に変換することができます. Ghostscript をイン
	ストールし, プリンタ用の特別なテキストフィルタを使うことによっ
	て, 非 PostScript プリンタをあたかも本物の PostScript
	プリンタであるかのように動作させることができます. 

	Ghostscript はポート集に入っていますので, そこからインストール
	することができます. また, 
	自分でソースプログラムを持ってきて, コンパイルし, インストー
	ルすることもできます. この作業はとても簡単にできます. 

	PostScript プリンタをシミュレートさせる場合は, テキストフィ
	ルタに PostScript ファイルを印字しようとしているかどうかを
	検出させます. PostScript ファイルでない場合は, フィルタは
	そのファイルを直接プリンタに送ります (訳注:テキストファイルを直
	接印字できない場合は, もちろん, 変換フィルタを通す必要がありま
	す). PostScript の場合は, まず, Ghostscript を使い, ファ
	イルをそのプリンタが理解できる形式へ変換します. 

	次の例のスクリプトは, Hewlett Packard DeskJet 500 プリンタ用
	のテキストフィルタです. 他のプリンタで用いるときは, 
	<tt/-sDEVICE/ 引数を <tt/gs/ (Ghostscript) コマンドに変えてくだ
	さい. (<tt/gs -h/ と入力すると, 現在インストールされている 
	Ghostscript でサポートされているデバイスのリストが得られます). 
<code>
#!/bin/sh
#
#  ifhp - Print Ghostscript-simulated PostScript on a DesJet 500
#  Installed in /usr/local/libexec/hpif

#
#  Treat LF as CR+LF:
#
printf "\033&amp;k2G" || exit 2

#
#  Read first two characters of the file
#
read first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

if [ "$first_two_chars" = "%!" ]; then
    #
    #  It is PostScript; use Ghostscript to scan-convert and print it
    #
    /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 -sOutputFile=- - \
        &amp;&amp; exit 0

else
    #
    #  Plain text or HP/PCL, so just print it directly; print a form
    #  at the end to eject the last page.
    #
    echo $first_line &amp;&amp; cat &amp;&amp; printf "\f" &amp;&amp; exit 2
fi

exit 2
</code>
	最後に, <tt/if/ 項目を通して, LPD にこのフィルタを教えてやる
	必要があります. 
<tscreen><verb>
	:if=/usr/local/libexec/hpif:
</verb></tscreen>
	これでおしまいです. <tt/lpr plain.text/ とか <tt/lpr
	whatever.ps/ と入力してみましょう. どちらも正常に印字されるは
	ずです. 

	<em/訳注:/ 日本語を印字する場合は, 日本語対応の Ghostscript が必要で
	す. 日本語対応版の Ghostscript もポート集に入っているはずです. 

	<sect2><heading> 変換フィルタ <label
	      id="printing:advanced:convfilters"></heading>

	  <p><ref name="プリンタ設定導入編" id="printing:simple">」
	に書かれた簡単な設定が完了したら, 最初に, やってみたいと思
	うことは, 多分(プレイン ASCII テキストに加えて) 好みのファイル形式
	のための変換フィルタをインストールすることでしょう. 

	    <sect3><heading> なぜ, 変換フィルタをインストールするのか?
		</heading>

	    <p> 変換フィルタによって, 様々な種類のファイルを印字するこ
	とが簡単になります. 例えば, TeX 組版システムでたくさんの仕事
	をしたと仮定しましょう. そして, PostScript プリンタが接続
	されているとします. すると, TeX で DVI ファイルを作成する度に, 
	DVI ファイルを印字するために, これを PostScript ファイルに
	変換する必要があります. このコマンドは次のようになるでしょう. 
<tscreen>
<verb>
dvips seaweed-analysis.dvi
lpr seaweed-analysis.ps
</verb></tscreen>
	 DVI ファイル用の変換フィルタがインストールしてあると, LPD に
	変換を肩代わりさせることで毎回毎回おこなわなければならなかった面倒
	な変換作業を省くことができます. つまり, DVI を生成したら, 
	次のような1回のコマンド入力だけで, これが印字されます. 
<tscreen><verb>
lpr -d seaweed-analysis.dvi
</verb></tscreen>
	LPD に DVI ファイルの変換をさせるためには, <tt/-d/ オプション
	を指定します. 変換オプションのリストは「<ref
	id="printing:lpr:options:format" name="整形と変換に関するオプ
	ション">」に載せてあります. 

	変化のオプションのそれぞれをプリンタにサポートさせるためには, 
	<em/変換フィルタ/をインストールし, そのパス名を 
	<tt>/etc/printcap</tt> の中で指定しなくてはなりません. 変換フィ
	ルタは, プレインテキストを印字する代わりに, フィルタはファイル
	をプリンタが理解できる形式に変換するところを除けば, 「プリンタ
	の簡単な設定」で説明したテキストファイル (「<ref
	id="printing:textfilter" name="テキストフィルタのインストール">」
	を見て下さい) に似ています. 


	  <sect3><heading> どの変換フィルタをインストールすべきか?
	    </heading>

	    <p> 使いたいと思う変換フィルタをインストールすべきです. 
		DVI のデータを頻繁に印字するならば, DVI 変換フィルタ
		をインストールするのが適切でしょう. 印字しなくてはなら
		ない troff を大量に抱えている場合は, 多分, troff フィ
		ルタが欲しくなるはずです. 

		次の表は, LPD で動作するフィルタと, 
		<tt>/etc/printcap</tt> ファイルでのエントリする項目, 
		そして, <tt/lpr/ コマンドで呼び出す方法をまとめたもの
		です. 
<code>
              /etc/printcap
ファイル形式      項目     lpr オプション
------------  ------------- ----------
cifplot            cf          -c
DVI                df          -d
plot               gf          -g
ditroff            nf          -n
FORTRAN text       rf          -f
troff              tf          -t
raster             vf          -v
プレインテキスト   if     なし, -p, または -l
</code>

		先の例のように, <tt/lpr -d/ を使うためには, 出力先の
		プリンタの <tt>/etc/printcap</tt> 内のエントリで, 
		<tt/df/ 項目が必要であることが分かります. 

		反論はあるかも知れませんが,
		FORTRAN テキストや plot のような形式は, 多分, 廃れ
		てていくでしょう. あなたのサイトで, 自前のフィルタをイ
		ンストールするだけで, プリントオプションのいくつか, あ
		るいは, 全部に新しい意味を与えることができます. 例えば, 
		Prinerleaf ファイル (Interleaf デスクトップパブリッシン
		グプログラムによるファイル) を直接印字したいとします. 
		そして, Printerleaf 用の変換フィルタを <tt/gf/ 項目で
		指定したパスにインストールすれば, <tt/lpr -g/ の意味
		は「Printerleaf ファイルを印字する」意味だとユーザに教
		えることができます. 


	  <sect3><heading> 変換フィルタのインストール</heading>

	    <p> 変換フィルタは FreeBSD の基本システムのインストールとは別
		にインストールするプログラムなので, 変換フィルタは, 多
		分, <tt>/usr/local</tt> ディレクトリの下に置くべ
		きです. フィルタは LPD だけが実行する特別なプログラム, 
		すなわち, 一般ユーザが実行する必要すらない
		プログラムなので, <tt>/usr/local/libexec</tt> ディレ
		クトリに置くのが普通です. 

		変換フィルタを使用可能にするためには, 
		<tt>/etc/printcap</tt> の目的のプリンタの適切な項目に
		フィルタがあるパス名を指定します. 

		DVI 変換フィルタをプリンタ <tt/bamboo/ のエントリに加
		えてみましょう. プリンタ <tt/bamboo/ の <tt/df/ 項目を
		新たに加えた<tt>/etc/printcap</tt> ファイルの例を以下
		に再掲します. 
<code>
#
#  /etc/printcap for host rose - added df filter for bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:sd=/var/spool/lpd/rattan:\
	:lp=/dev/lpt0:\
	:if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:\
	:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
	:if=/usr/local/libexec/psif:\
	:df=/usr/local/libexec/psdf:
</code>
		DVI フィルタは <tt>/usr/local/libexec/psdf</tt> という
		名前のシェルスクリプトです. このスクリプトは次のように
		なっています. 
<code>
#!bin/sh
#
#  DVI to PostScript printer filter
#  Installed in /usr/local/libexec/psdf
#
#  Invoked by lpd when user runs lpr -d
#
exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@"
</code>
		このスクリプトでは, <tt/dvips/ をフィルタモード (引数 
		<tt/-f/) で, 標準入力上で起動しています. 標準入力は印字
		するジョブです. それから, PostScript プリンタ用フィ
		ルタ <tt/lprps/ (これについては「<ref
		id="printing:advanced:if-conversion" name="プレインテキス
		トのジョブを PostScript プリンタで印字する">」
		を参照してください) を LPD に与えられた引数を付けて起動
		します. <tt/lprps/ はこれらの引数を印字されたページ分
		の課金をおこなうために使われます. 

	  <sect3><heading> 変換フィルタのその他の例 </heading>

	    <p> 変換フィルタのインストールには決まったステップがないの
		で, その代わりに, 例をもっと挙げることにします. これを, 
		自分でフィルタを作る際のガイドにしてください. 適当な例が
		あったら, それをそのまま使ってください. 

		次のスクリプト例は, Hewlett Packard LaserJet III-Si の
		ための, raster (ええと・・実は, GIF ファイル) 用の変
		換フィルタです. 
<code>
#!/bin/sh
#
#  hpvf - Convert GIF files into HP/PCL, then print
#  Installed in /usr/local/libexec/hpvf

PATH=/usr/X11R6/bin:$PATH; export PATH

giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \
    && exit 0 \
    || exit 2
</code>
		ここでは, GIF ファイルから PNM (portable anymap) 形式
		に変換し, 次に PGM (portable graymap) 形式に変換してか
		ら, LaserJet/PCL-互換データに変換しています. 

		上記のフィルタを使うプリンタのためのエントリを付け加え
		た <tt>/etc/printcap</tt> ファイルは次のようになります. 
<code>
#
#  /etc/printcap for host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
	:lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
	:if=/usr/local/libexec/hpif:\
	:vf=/usr/local/libexec/hpvf:
</code>

		次のスクリプトは, PostScript プリンタ <tt/bamboo/ 
		のための groff 組版システムの troff データのための変換
		フィルタです. 
<code>
#!/bin/sh
#
#  pstf - Convert groff's troff data into PS, then print.
#  Installed in /usr/local/libexec/pstf
#
exec grops | /usr/local/libexec/lprps "$@"
</code>
		上記のスクリプトではプリンタとの通信をおこなうため, 
		<tt/lprps/ をまた利用しています. プリンタがパラレルポー
		トに接続されている場合は, 代わりに, 次のスクリプトを使
		うかもしれません. 
<code>
#!/bin/sh
#
#  pstf - Convert groff's troff data into PS, then print.
#  Installed in /usr/local/libexec/pstf
#
exec grops
</code>
		これで完成しました. 次に, フィルタを使用可能にするため
		に <tt>/etc/printcap</tt> に加える必要があるエントリを
		示します. 
<tscreen><verb>
	:tf=/usr/local/libexec/pstf:
</verb></tscreen>

		次の例をみたら, FORTRAN のベテランは赤面するかもしれ
		ません. この FORTRAN テキストフィルタは, プレインテキ
		ストを直接印字できるすべてのプリンタで利用できます. この
		フィルタをプリンタ <tt/teak/ にインストールすることに
		しましょう. 
<code>
#!/bin/sh
#
# hprf - FORTRAN text filter for LaserJet 3si:
# Installed in /usr/local/libexec/hprf
#

printf "\033&amp;k2G" &amp;&amp; fpr &amp;&amp; printf "\f" &amp;&amp; exit 0
exit 2
</code>
		そして, このフィルタを使用可能にするため, 以下の行を 
		<tt>/etc/printcap</tt> のプリンタ <tt/teak/ のエントリ
		に加えます. 
<tscreen><verb>
	:rf=/usr/local/libexec/hprf:
</verb></tscreen>

		これが最後の, そして, 若干複雑な例です. 前に紹介した 
		LaserJet プリンタ <tt/teak/ に, DVI フィルタを加える
		ことにしましょう. 最初に, 簡単な部分をおこないます. すなわ
		ち, DVI フィルタの位置を <tt>/etc/printcap</tt> に書
		き加えます. 
<tscreen><verb>
	:df=/usr/local/libexec/hpdf:
</verb></tscreen>

		さて, 難しい部分であるフィルタの作成をおこないます. このた
		めに, DVI から LaserJet/PCL への変換プログラムが必要
		です. FreeBSD のポート集 (「<ref id="ports" name="ポー
		トコレクション">」を参照してください) には, それがあ
		ります. <tt/dvi2xx/ というのがそのパッケージの名前で
		す. これをインストールすると, 必要なプログラム 
		<tt/dvilj2p/ が使えます. このプログラムは DVI を 
		LaserJet IIp, LaserJet III, そして LaserJet 2000 の互
		換コードへ変換してくれます. 

		<tt/dvilj2p/ はフィルタ <tt/hpdf/ を極めて複雑にしてい
		ます. なぜなら, <tt/dvilj2p/ は標準入力からデータを読
		み込むことができないからです. このプログラムを働かせる
		ためには, ファイル名が必要です. もっと悪いことに, ファ
		イル名は <tt/.dvi/ で終わっている必要があり, 標準入力
		の代わりに, <tt>/dev/fd/0</tt> を使うのは問題がありま
		す. この問題は, (<tt/.dvi/ で終わる) 一時的なファイル名
		から<tt>/dev/fd/0</tt> に (シンボリックな) リンクを張る
		ことで回避することができます. これで, <tt/dvilj2p/ に
		強制的に標準入力からデータを読み込ませることができます. 

		もう1つの問題は, 一時的なリンクを張るために /tmp ディ
		レクトリを使うことができないという事実です. シンボリッ
		クリンクはユーザ, グループが <tt/bin/ であるユーザに所
		有されています. フィルタはユーザ <tt/daemon/ として起
		動します. そして, <tt>/tmp</tt> ディレクトリはスティッ
		キービットが立っています. フィルタはリンクを作ることが
		できます. しかし, リンクは別のユーザに所有されているた
		め, 作業が終了したとき, このリンクを削除することができ
		ません. 

		その代わりに, シンボリックリンクは現在の作業ディレクト
		リ, すなわち, スプーリングディレクトリ
		(<tt>/etc/printcap</tt><tt/sd/ 項目で指定する) に作
		ることにします. フィルタが作業するにはここの場所は完璧
		な場所で, なぜなら, 特に, スプーリングディレクトリのディ
		スクの空き容量は (ときどき) <tt>/tmp</tt> ディレクトリ
		よりもたくさんあるからです. 

		以下に示すのが最後のフィルタです. 
<code>
#!/bin/sh
#
#  hpdf - Print DVI data on HP/PCL printer
#  Installed in /usr/local/libexec/hpdf

PATH=/usr/local/bin:$PATH; export PATH

#
#  Define a function to clean up our temporary files.  These exist
#  in the current directory, which will be the spooling directory
#  for the printer.
#
cleanup() {
   rm -f hpdf$$.dvi
}

#
#  Define a function to handle fatal errors: print the given message
#  and exit 2.  Exiting with 2 tells LPD to do not try to reprint the
#  job.
#
fatal() {
    echo "$@" 1>&amp;2
    cleanup
    exit 2
}

#
#  If user removes the job, LPD will send SIGINT, so trap SIGINT
#  (and a few other signals) to clean up after ourselves.
#
trap cleanup 1 2 15 

#
#  Make sure we are not colliding with any existing files.
#
cleanup

#
#  Link the DVI input file to standard input (the file to print).
#
ln -s /dev/fd/0 hpdf$$.dvi || fatal "Cannot symlink /dev/fd/0"

#
#  Make LF = CR+LF
#
printf "\033&amp;k2G" || fatal "Cannot initialize printer"

# 
#  Convert and print.  Return value from dvilj2p does not seem to be
#  reliable, so we ignore it.

#
dvilj2p -M1 -q -e- dfhp$$.dvi

#
#  Clean up and exit
#
cleanup
exit 0
</code>


	  <sect3><heading> 自動変換: その他の変換フィルタ
	      <label id="printing:advanced:autoconv"></heading>

	    <p> ここまでに述べてきたフィルタによって, 印字環境の能率が
		上がったことと思います. しかし, これはどのフィルタを使
		うかを (<tt/lpr/ のコマンドライン上で) ユーザが指定しな
		くてはならないという代価を支払って実現されています. コ
		ンピュータの事情にあまり詳しくないユーザにとって, フィ
		ルタのオプションを指定させられるということはいらいらさ
		せられるものになるでしょう. 更に悪いことに, 間違ったフィ
		ルタオプションを指定されると, 間違った形式のファイルが
		そのフィルタに適用されることになり, その結果, 何百枚も
		の紙を掃き出すことになるかもしれません. 
		
		そのような結果になるならば, 変換フィルタをインストール
		するよりもむしろ, テキストフィルタ (これがデフォルトフィ
		ルタなので) に印字するよう要求されたファイルの形式を検
		出させ, 自動的に, 適切な変換フィルタを起動するようにし
		たいと思うかもしれません. ここでは <tt/file/ コマンド
		のようなツールを役立たせることができます. もちろん, 
		<em/いくつかの/ファイル形式の違いを見分けることは難しい
		ことでしょう. そして, もちろん, それらのファイルに対し
		ては, 変換フィルタを提供するだけで済ますこともできるの
		です. 

		FreeBSD のポート集には, <tt/apsfilter/ と呼ばれる自
		動変換をおこなうテキストフィルタがあります. このフィルタは
		プレインテキスト, PostScript, DVI ファイルを検
		出し, 適当な変換をおこなった後, データを印字することができ
		ます. 


	<sect2><heading> 出力フィルタ <label
	      id="printing:advanced:of"></heading>

	  <p> LPD スプーリングシステムでは, ここまでにまだ取り上げていな
		いフィルタ形式, 出力フィルタをサポートしています. 出力
		フィルタは, テキストフィルタのように, プレインテキスト
		のみを印字するために意図されたものですが, 非常に簡単化
		されています. テキストフィルタを用いずに, 出力フィルタ
		を使っている場合は, 次のようになります. 
	    <itemize>
	      <item> LPD はジョブ中の各ファイルに一度ではなく, ジョブ
		全体に対して一度だけ出力フィルタを起動します. 

	      <item> LPD は出力フィルタに対し, ジョブ中のファイルの先
		頭や末尾を特定するための対策を一切おこなっていません. 

	      <item> LPD はユーザのログイン名やホスト名をフィルタに渡
		しません. したがって, 課金の処理をおこなうことは考えてい
		ません. 実際, 出力フィルタには, 以下2つの引数しか与え
		られません. 
<tscreen>
<tt>-w<it/width/ -l<it/length/</tt>
</tscreen>
		ここで, <it/width/ は対象となるプリンタの <tt/pw/ 項
		目, <it/length/ は <tt/pl/ 項目に指定された数です. 
	    </itemize>

		出力フィルタの簡便さに誘惑されてはいけません. もし, ジョ
		ブ中のそれぞれのファイルに別のページ番号を付加しようと
		しても, 出力フィルタは<em/うまく動作しないでしょう/. 
		そのような動作を期待しているならば, (入力フィルタとし
		ても知られている) テキストフィルタを使ってください. 詳
		しくは, 「<ref id="printing:textfilter" name="テキスト
		フィルタのインストール">」をご覧ください. さらに, 出力
		フィルタは, 実のところ, <em/もっと複雑/になっています. 
		まず, 特殊なフラグ文字を検出するために, フィルタに送ら
		れてくるバイトストリームを検査する必要があります. また, 
		LPD に代わって, 自分自身にシグナルを送らなければなりま
		せん. 

		しかしながら, ヘッダページの印字をおこないたい場合, また, 
		エスケープシーケンスやヘッダページを印字できるようにす
		るその他の初期化文字列を送信する必要がある場合, 出力ファ
		イルが<em/必要/です. 

		1台のプリンタに対し, LPD では出力フィルタとテキスト, 
		または, 他のフィルタを両方使うことができます. このよう
		な場合, LPD はヘッダページ (「<ref
		id="printing:advanced:header-pages" name="ヘッダページ">」
		を参照してください) だけを印字させるために, 出
		力フィルタを起動させます. それから LPD では, アウトプッ
		トフィルタに2バイトの文字 (ASCII 031 の次に ASCII 001)
		を送ることで, 出力フィルタが<em/自力で停止する/ことを
		期待しています. 2バイト (031, 001) が出力フィルタに送られ
		たとき, 出力フィルタは自分自身にシグナル SIGSTOP を送
		ることによって停止するべきです. LPD がその他のフィル
		タの起動を完了したとき, LPD は出力フィルタにシグナル 
		SIGCONT を送ることで, 出力フィルタを再起動させます. 

		出力フィルタがあり, テキストフィルタが<em/ない/場合, 
		LPD はプレインテキストのジョブをおこなう際に, 出力フィル
		タを使います. 前述したように, 出力フィルタでは, ジョブ
		中の各ファイルの並びの間に FROM FEED 文字や紙を排出す
		る他の文字を入れることはしません. この動作は多分, あな
		たが求めているものとは<em/異なっている/でしょう. ほと
		んどすべての場合において, テキストフィルタが必要とされる
		はずです. 

		プログラム <tt/lpf/ は, テキストフィルタの項で既に紹介
		しましたが, 出力フィルタとしても動作させることができま
		す. もし, 簡便で極悪な出力フィルタが必要で, かつ, バイ
		トストリームを検査したりシグナルを送るコードを書きたく
		ないときには, <tt/lpf/ をお試しください. あるいは, プ
		リントが要求する初期化コードを送るために, <tt/lpf/ を
		シェルスクリプトに包んで使うこともできます. 


	<sect2><heading> テキストフィルタ <tt/lpf/ <label
	      id="printing:advanced:lpf"></heading>

	  <p> プログラム <tt>/usr/libexec/lpr/lpf</tt> は, FreeBSD の
		バイナリ配布に付属しているテキストフィルタ (入力フィル
		タ) で, 出力を字下げしたり (<tt/lpr -i/ でジョブが入力さ
		れたとき), 文字を未処理のままプリンタに送ったり
		(<tt/lpr -l/ でジョブが入力されたとき), ジョブ中のバッ
		クスペースやタブの印字位置を調節したり, 印字したページ
		に対して課金したりすることができます. また, このフィル
		タは出力フィルタとしても動作させることができます. 

		<tt/lpf/ は多くの印字環境において使用することに適して
		います. このフィルタには, プリンタに初期化文字列を送る
		機能はありませんが, 必要とされる初期化をおこない, それから 
		<tt/lpf/ を実行させるためのシェルスクリプトを作成する
		のはたやすいことです. 

		<tt/lpf/ に対して, 印字ページへの課金を正確におこなわせる
		ためには, <tt>/etc/printcap</tt> ファイルの中の 
		<tt/pw/ と <tt/pl/ の項目に正確な値を入れておく必要が
		あります. これらの値は, どのくらいの量のテキストがペー
		ジにフィットするか, また, ユーザのジョブが何ページある
		のかを調べるために使われます. プリンタの課金についての
		詳しい情報については, 「<ref
		id="printing:advanced:acct" name="プリンタの利用に対す
		る課金">」をご覧ください. 


<!--
	<sect2><heading> 日本語を印字するために(訳者補足) <label
		id="printing:advanced:kanji" name="日本語を
		印字するために(訳者補足)"></heading>

		<p> 日本語を印字するためには, 当然ながら, 日本語に対応
		したフィルタが必要になります. 本節では, 日本語対応フィ
		ルタについての情報を提供します. 
	
		<itemize>
		<item> フィルタを準備する前に, 漢字コード変換フィルタ
		を準備する必要があります. ご存知の通り, 漢字コードの体
		系は幾つか知られていますが, 大抵のフィルタではその内の
		一種類にしか対応していない場合がほとんどです. どんな漢
		字コードの入力があってもよいように, 漢字コード自動判別
		機能を持った漢字コード変換フィルタを準備し, 印字するデー
		タをフィルタが想定している漢字コードに変換してください. 
		このような漢字フィルタには,  nkf や ack などがしられて
		います. この内, ・・・はポート集に含まれています. 

		<item> 次に, 日本語対応フィルタを用意します. 日本語 
PostScript プリンタの場合は, ・・・などがあります. また,  Canon の 
Lips 対応プリンタの場合は・・・などがあります. 

		<item> 日本語用の GhostScript もあり, ポート集にも付
属しています. ドライバの話・・・

		<item> そうでないとき.  PC-201系と ESC/P系の場合. 自分
で作れ. 練習問題としては最適?
		<item> あとは・・
		</itemize>
, と. を変換する
-->


      <sect1><heading> ヘッダページ <label
	    id="printing:advanced:header-pages"></heading>

	<p> あなたが管理するシステムのユーザが<em/たくさん/おり, ユー
	ザ全員が様々なプリンタを使用する場合, 多分, 必要悪である
	<em/ヘッダページ/を印字させることを検討したいと思うかもしれま
	せん. 

	ヘッダページは, <em/バナー/とか<em/バーストページ/としても知ら
	れていますが, 出力されたジョブが誰によるものなのかを特定させる
	働きがあります. 印字結果の山の中において, ユーザのジョブによっ
	て印字された本物のドキュメント部分よりも際立たせるために, ヘッ
	ダページは, 通常, 多分, 縁が装飾されている大きな太文字で印字さ
	れます. ヘッダページにより, ユーザは自分が出したジョブがどこに
	あるのかをすばやく見つけることができます. ヘッダページの欠点は, 
	明らかに, すべてのジョブに対して, 紙が1枚余分に印字されるという
	ことです. この紙の有効期間は短く, 23分も続きません. 最終的に, 
	これらの紙は再利用紙入れの中かくずの山に入れられることでしょう. 
	 (ヘッダページはジョブ中の各ファイル毎に印字されるのではなく, 
	ジョブ毎に印字されるということに注意してください. したがって, 紙の
	消費はそれほどひどくはないかもしれません). 

	<em/もし/, プリンタがプレインテキストを直接印字できるならば, 
	LPD システムは印字物に対して自動的にヘッダページを付けることが
	できます. PostScript プリンタを使っている場合は, ヘッダペー
	ジを生成する外部プログラムが必要になります. これについては, 
	「<ref id="printing:advanced:header-pages:ps" name="PostScript
	プリンタでのヘッダページ">」をご覧ください. 


	<sect2><heading> ヘッダページの印字を許可する <label
	      id="printing:advanced:header-pages:enabling"></heading>

	  <p><ref id="printing:simple" name="プリンタ設定導入編">」
	では, <tt>/etc/printcap</tt> ファイルの <tt/sh/ (``suppress
	header'' : ヘッダを供給しないという意味) を指定して, ヘッダペー
	ジの印字を止めていました. プリンタでのヘッダページの印字を許可
	するには, <tt/sh/ 項目を取り除くだけよい訳です. 

	とても簡単そうに見えるけど, 本当かな?

	それは本当です. プリンタに初期化文字列を送るための出力フィ
	ルタを用意しなくてはならないかもしれません. 次に, Hewlett
	Packard PCL 互換プリンタの例を挙げます. 
<code>
#!/bin/sh
#
#  hpof - Output filter for Hewlett Packard PCL-compatible printers
#  Installed in /usr/local/libexec/hpof


printf "\033&amp;k2G" || exit 2
exec /usr/libexec/lpr/lpf
</code>
	<tt/of/ 項目に出力フィルタのパス名を指定してください. 詳細につ
	いては, 「<ref id="printing:advanced:of" name="出力フィルタ">」
	をご覧ください. 

	次に, 以前紹介したプリンタ <tt/teak/ のための 
	<tt>/etc/printcap</tt> ファイルの例を示します. ここでは, ヘッ
	ダページの印字を許可し, 上記の出力フィルタを追加しました. 
<code>
#
#  /etc/printcap for host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
	:lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
	:if=/usr/local/libexec/hpif:\
	:vf=/usr/local/libexec/hpvf:\
	:of=/usr/local/libexec/hpof:
</code>
	さて, ユーザが <tt/teak/ からジョブを印字させたとき, それぞれ
	のジョブ毎にヘッダページが印字されます. もし, ユーザが印字物を
	探すのに時間を費やしたいと思うなら, <tt/lpr -h/ によってジョ
	ブを入力することで, ヘッダページの印字を止めることができます. 
	これ以外の <tt/lpr/ のオプションについては, 「<ref
	id="printing:lpr:options:misc" name="ヘッダページ用オプション">」
	をご覧ください. 

	<em/注意:/ LPD では, ヘッダページの最後に, FROM FEED 文字が印
	字されます. プリンタに紙排出をさせるために, 別な文字, もしくは, 
	別な文字列が利用されている場合は, <tt>/etc/printcap</tt> 中の 
	<tt/ff/ 項目で指定することができます. 


	<sect2><heading> ヘッダページを制御する <label
	      id="printing:advanced:header-pages:controlling"></heading>

	  <p> ヘッダページの印字が許可されていると, LPD は <em/長いヘッ
	ダ/を作ります. これには, 紙全面に大きな文字でユーザ名, ホスト
	名, ジョブ名が書かれています. 次に, このヘッダページの例を示
	します (kelly が ジョブ名 outline を rose というホストから印字
	された場合). 
<tscreen><verb>
k                   ll       ll
k                    l        l
k                    l        l
k   k     eeee       l        l     y    y
k  k     e    e      l        l     y    y
k k      eeeeee      l        l     y    y
kk k     e           l        l     y    y
k   k    e    e      l        l     y   yy
k    k    eeee      lll      lll     yyy y
                                         y
                                    y    y
                                     yyyy


                             ll
                    t         l        i
                    t         l
 oooo    u    u   ttttt       l       ii     n nnn     eeee
o    o   u    u     t         l        i     nn   n   e    e
o    o   u    u     t         l        i     n    n   eeeeee
o    o   u    u     t         l        i     n    n   e
o    o   u   uu     t  t      l        i     n    n   e    e
 oooo     uuu u      tt      lll      iii    n    n    eeee









r rrr     oooo     ssss     eeee
rr   r   o    o   s    s   e    e
r        o    o    ss      eeeeee
r        o    o      ss    e
r        o    o   s    s   e    e
r         oooo     ssss     eeee







					Job:  outline
					Date: Sun Sep 17 11:04:58 1995
</verb></tscreen>
	
		LPD はこのテキストの終わりに FROM FEED 文字を加えます
		ので, ジョブは新しいページから開始されます (ただし, 
		<tt>/etc/printcap</tt> で出力先のプリンタのエントリに 
		<tt/sf/ (suppress form feeds) が指定されているときはこ
		の限りではありません). 

		お望みならば, LPD に<em/短いヘッダページ/を出力させる
		こともできます. この場合は, <tt>/etc/printcap</tt> ファ
		イルの中で <tt/sb/ (short banner) を指定してください. 
		ヘッダページは次のようになります. 
<tscreen><verb>
rose:kelly  Job: outline  Date: Sun Sep 17 11:07:51 1995
</verb></tscreen>
		デフォルトでは, LPD はヘッダページを最初に印字し, 次
		にジョブの印字をおこないます. この順番を逆にするときは, 
		<tt>/etc/printcap</tt><tt/hl/ (header last) を指定
		してください. 

	<sect2><heading> ヘッダページに対する課金 <label
	      id="printing:advanced:header-pages:accounting"></heading>

	  <p> LPD に備わっているヘッダページ出力機能を使うと, 入力され
	たジョブに対して課金をおこなうことができても, ヘッダページは<em/無
	料/で提供しなくてはならない, という特有のやり方を強要されます. 

	なぜでしょうか. 

	出力フィルタは単なる外部プログラムなので, 課金をするための制御
	をおこなうとすれば, それはヘッダページを印字するときですが, 出力フィ
	ルタには, <em/ユーザ名とホスト名/の情報や課金情報を格納するファ
	イルがどれな
	のかということが知らされません. それゆえ, 出力ファイルには, 誰
	にプリンタ利用の課金をおこなえばよいのかが分からないのです. テキス
	トフィルタやその他の変換フィルタ (これらのフィルタはユーザやホ
	ストの情報が知らされます) が出力ページの枚数に「1ページ分水増し
	する」だけでは十分ではありません. なぜなら, ユーザは <tt/lpr -h/ に
	よってヘッダページの出力を止めることができるからです. やみくも
	に1ページを水増しすると, 印字されてもいないヘッダページに対する
	料金をとることになります. 基本的に, <tt/lpr -h/ は環境に優し
	い心を持つユーザに好まれるオプションですが, これを使うように奨
	励することもできません. 

	各々のフィルタに独自のヘッダページを生成させる (その結果, ヘッ
	ダページに課金することができる) という方法<em/でも十分であると
	はいえません/. この場合, LPD はフィルタに <tt/-h/ の情報を送
	りませんので, <tt/lpr -h/ によってヘッダページを印字しないオ
	プションを選択したとしても, 依然としてヘッダページは印字され, 
	その分の課金がおこなわれてしまいます. 

	では, どのような選択肢があるのでしょうか. 

	ヘッダページへの課金に関しては, 次のことができます. 

	    <itemize>
	      <item> LPD のやり方を受け入れ, ヘッダページは無料とする. 

	      <item> LPDng や PLP といった LPD の代替品をインストール
		する. LPD と入れ替えが可能な他のスプーリングソフトウェ
		アに関しては, 「<ref name="標準スプーラの代替品"
		id="printing:lpd-alternatives">」をご覧ください. 

	      <item> <em/スマートな/出力フィルタを作成する. 通常, 出力
		フィルタはプリンタを初期化するか, 単純な文字列変換をす
		る程度の働きしかしません. (テキスト (入力) フィルタがな
		い場合) 出力フィルタはヘッダページとプレインテキストの
		印字をおこなうのに適しています. 

		プレインテキストを印字するためのテキストフィルタがない
		場合, LPD はヘッダページを印字するためだけの目的で出
		力フィルタを起動します. そして, LPD が生成するヘッダ
		ページのテキストを解析することにより, 出力フィルタはヘッ
		ダページに課金するために必要なユーザ名とホスト名を取得
		することができます. この方式の唯一の問題点は, 出力フィ
		ルタは課金情報を格納するデータファイルの名前を知ることが
		できないということです (<tt/af/ 項目で指定されたファイ
		ル名は出力ファイルに渡されません). しかし, 既知の
		名前の課金データファイルを使うのならば, その名前を出
		力フィルタのプログラム中に埋め込むことができます. 

		解析の手順を簡単にするためには, 
		<tt>/etc/printcap</tt><tt/sh/ 項目 (短いヘッダを指
		定) を使うとよいでしょう. 

		そしてまた, ここまでの方法は少なからぬトラブルを生じさ
		せるかもしれません. そうなれば, もちろんユーザはヘッダペー
		ジを無料で
		提供してくれる気前のよいシステム管理者に感謝することで
		しょう. 
	    </itemize>

	<sect2><heading> PostScript プリンタでのヘッダページ
	  <label id="printing:advanced:header-pages:ps"></heading>

	  <p> これまでに述べたように, LPD ではプレインテキストのヘッ
	ダページをたくさんのプリンタに合うように生成することができます. 
	残念ながら, PostScript プリンタは, プレインテキストを直接
	印字することができません. ですから, LPD のヘッダページ機能は
	まったく役に立たない, あるいはほとんどの場合で役に立ちません. 

	ヘッダページを出力するための自明な方法の1つに, すべての変換フィ
	ルタとテキストフィルタにヘッダページを生成させる方法があります. 
	フィルタは, 適切なヘッダページを生成するために, ユーザ名とホス
	ト名の引数を使うべきです. この方法の欠点は, いつでも, <tt/lpr
	-h/ によってジョブが入力された場合でさえも, ヘッダページが印字
	されるということです. 

	この方法で試してみましょう. 次のスクリプトは, 3つの引数 (ユーザ
	のログイン名, ホスト名, ジョブ名) をとり, 簡単な PostScript 用
	のヘッダページを生成します. 

<code>
#!/bin/sh
#
#  make-ps-header - make a PostScript header page on stdout
#  Installed in /usr/local/libexec/make-ps-header
#

#
#  These are PostScript units (72 to the inch).  Modify for A4 or
#  whatever size paper you are using:
#
page_width=612
page_height=792
border=72

#
#  Check arguments
#
if [ $# -ne 3 ]; then
    echo "Usage: `basename $0` <user> <host> <job>" 1>&amp;2
    exit 1
fi

#
#  Save these, mostly for readability in the PostScript, below.
#
user=$1
host=$2
job=$3
date=`date`

#
#  Send the PostScript code to stdout.
#
exec cat <<EOF
%!PS

%
%  Make sure we do not interfere with user's job that will follow
%
save

%
%  Make a thick, unpleasant border around the edge of the paper.
%
$border $border moveto
$page_width $border 2 mul sub 0 rlineto
0 $page_height $border 2 mul sub rlineto
currentscreen 3 -1 roll pop 100 3 1 roll setscreen
$border 2 mul $page_width sub 0 rlineto closepath
0.8 setgray 10 setlinewidth stroke 0 setgray

%
%  Display user's login name, nice and large and prominent
%
/Helvetica-Bold findfont 64 scalefont setfont
$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto
($user) show

%
%  Now show the boring particulars
%
/Helvetica findfont 14 scalefont setfont
/y 200 def
[ (Job:) (Host:) (Date:) ] {
	200 y moveto show /y y 18 sub def
} forall

/Helvetica-Bold findfont 14 scalefont setfont
/y 200 def
[ ($job) ($host) ($date) ] {
	270 y moveto show /y y 18 sub def
} forall

%
%  That is it
%
restore
showpage
EOF
</code>
	そして, 変換フィルタやテキストフィルタがそれぞれ, 最初にこのス
	クリプトを起動することで, ヘッダページが出力され, それから, ユー
	ザのジョブの印字をおこないます. 次に, このドキュメントの始めのほう
	で紹介した DVI 変換フィルタを, ヘッダページを印字するように変
	更したものを示します. 
<code>
#!/bin/sh
#
#  DVI to PostScript printer filter
#  Installed in /usr/local/libexec/psdf
#
#  Invoked by lpd when user runs lpr -d
#

orig_args="$@"

fail() {
    echo "$@" 1>&amp;2
    exit 2
}

while getopts "x:y:n:h:" option; do
    case $option in
        x|y)  ;; # Ignore
	n)    login=$OPTARG ;;
	h)    host=$OPTARG ;; 
	*)    echo "LPD started `basename $0` wrong." 1>&amp;2
              exit 2
              ;;
    esac
done

[ "$login" ] || fail "No login name"
[ "$host" ] || fail "No host name"

( /u/kelly/freebsd/printing/filters/make-ps-header $login $host "DVI File"
  /usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args
</code>
	このフィルタがユーザ名やホスト名を決定するために引数リストをど
	のように解析しなくてはならないかという点に注意してください. こ
	の解析方法は他の変換フィルタに対しても同様です. しかしながら, 
	テキストフィルタについては, 引数の設定が少し異なっています (こ
	れについては, 「<ref id="printing:advanced:filters" name="フィ
	ルタはどのように機能しているか">」をご覧ください). 

	前述の通り, 上記の手法は, 極めて単純なのにも関らず, <tt/lpr/ 
	で「ヘッダページを印字しない」オプション (<tt/-h/ オプション) が
	使えなくなっています. ユーザが森林資源を (あるいは, ヘッダペー
	ジが課金されているならば, その僅かな金額を), 節約したいと望んでい
	る場合でも, すべてのフィルタがすべてのジョブ毎にヘッダページを印字
	することになっているので, 節約することはできません. 

	ジョブ毎に印字されるヘッダページをユーザが抑制できるようにする
	ためには, 「<ref
	id="printing:advanced:header-pages:accounting" name="ヘッダペー
	ジに対する課金">」で紹介したトリックを使う必要があります. すな
	わち, LPD が生成するヘッダページの解析をおこない, PostScript
	版のヘッダページを出力させる出力フィルタを作るのです. この場
	合, ユーザが <tt/lpr -h/ でジョブを入力すると, LPD はヘッダペー
	ジを生成しなくなり, また, 出力フィルタも起動されません. そうで
	ないならば, 作成した出力フィルタが LPD からのテキストを読み込
	み, ヘッダページを印字する適当な PostScript のコードがプリ
	ンタに送られるでしょう. 

	PostScript プリンタがシリアルポートに接続されている場合, 
	出力フィルタとして <tt/lprps/ を, 上記の動作をおこなうものとして 
	<tt/psof/ を使うことができます. ただし, <tt/psof/ はヘッダペー
	ジに対して課金をおこないませんので注意してください. 


      <sect1><heading> リモートプリンタからの出力 <label
	    id="printing:advanced:network-printers"></heading>

	<p> FreeBSD では, ネットワーク越しの印字, すなわち, ジョブをリ
	モートプリンタに送ることをサポートしています. リモートプリンタ
	からの出力をするには, 一般に, 次の2つを参照してください. 
	  <itemize>
	    <item> リモートホストに接続されたプリンタにアクセスする方
		法. プリンタがあるホストのシリアル, または, パラレルイ
		ンタフェースに接続されている場合, ネットワーク上の他の
		ホストからこのプリンタにアクセスできるように LPD を設
		定します. 「<ref id="printing:advanced:network:rm"
		name="リモートホストに接続されたプリンタ">」でどのよう
		にするかを説明します. 

	      <item> ネットワークに直接接続されているプリンタにアクセ
		スする方法. プリンタに, 旧来のシリアル, または, パラレ
		ルインタフェースに加えて (もしくは, これらに代わって) ネッ
		トワーク用のインタフェースがある場合. そのようなプリン
		タは次のように動作するでしょう. 

	      <itemize>
		<item> そのプリンタが LPD のプロトコルを理解でき, リモー
		トホストからのジョブをキューに入れることさえできる場合. 
		この場合, プリンタは, LPD が起動している一般のホスト
		のように振る舞います. そのようなプリンタを設定するため
		に, 「<ref id="printing:advanced:network:rm"
		name="リモートホストに接続されたプリンタ">」と同様の手
		順をおこなってください. 


		<item> そのプリンタが, データストリームによるネットワー
		ク接続をサポートしている場合. この場合, ネットワーク上
		の1つのホストとしてプリンタを「接続」します. このホス
		トは, ジョブをスプーリングする責任を負い, スプーリング
		されたジョブはプリンタに送られます. そのようなプリンタ
		をインストールするためのいくつかの提案が「<ref
		id="printing:advanced:network:net-if" name="ネットワー
		クにおけるデータストリームのインタフェースを持つプリン
		タ">」にあります. 
	      </itemize>
	  </itemize>

	<sect2><heading> リモートホストに接続されたプリンタ <label
	      id="printing:advanced:network:rm"></heading>

	  <p> LPD スプーリングシステムでは LPD (または LPD 互換のシス
	テム) が起動している他のホストへジョブを送る機能が始めからサポー
	トされています. この機能により, あるホストに接続されたプリンタ
	へ, 他のホストからアクセスできるようになります. また, LPD プ
	ロトコルを理解するネットワークインタフェースを持ったプリンタに
	対しても, この機能は働きます. 

	リモートプリンタへの出力を許可するためには, 最初に, あるホスト
	 (これを, <em/プリンタホスト/と呼びます) にプリンタを接続します. 
	そして, 「 <ref id="printing:simple" name="プリンタ設定導入編
	">」に書かれた簡単なプリンタの設定をおこなってください. 必要ならば, 
	「<ref id="printing:advanced" name="プリンタ設定上級編">」にあ
	る, 更に進んだ設定をおこなってください. そして, そのプリンタをテス
	トしてうまく動作することを確認し, LPD に許可した機能がうまく働
	くかどうかを見てください. 

	LPD 互換のネットワークインタフェースを持つプリンタを使用してい
	る場合は, そのプリンタ自身が以下で説明する<em/プリンタホスト/
	になります. そして, <em/プリンタ名/とは, そのプリンタに設定し
	た名前のことを指します. これについては, プリンタ, および (また
	は), プリンタのネットワークインタフェースに付属するドキュメン
	トを参照してください. 

	次に, そのプリンタにアクセスしたいと思っている他ホストにおいて, 
	そのホストの <tt>/etc/printcap</tt> ファイルに次にあげるエント
	リを作ります. 
	    <enum>
	      <item> 名前のエントリ. どんな名前でもよいのですが, 簡単
		のため, 多分, プリンタホストで設定されたプリンタ名や別
		名と同じものを使いたいと思うでしょう. 
		
	      <item> <tt/lp/ 項目で指定されるデバイスは明示的に空にす
		る (<tt/:lp=:/ とする). 

	      <item> スプーリングディレクトリを作成し, <tt/sd/ 項目で
		その位置を指定する. LPD では, プリンタホストにジョブ
		を送信するまでの間, このディレクトリにジョブを格納しま
		す. 

	      <item> <tt/rm/ 項目でプリンタホストの名前を指定します. 

	      <item> <tt/rp/ 項目で<em/プリンタホスト/に接続したプリン
	      タ名を指定します. 
	    </enum>
	これで終わりです. 変換フィルタやページの大きさやその他の事項を 
	<tt>/etc/printcap</tt> に加える必要はありません. 

	次に, リモートホストに接続されたプリンタで印字するための設定例
	を示します. ホスト rose には2台のプリンタ <tt/bamboo/ と 
	<tt/rattan/ が接続されています. これらのプリンタをホスト 
	orchid のユーザが使えるようにしましょう. 最初に orchid の 
	<tt>/etc/printcap</tt> を示します (このファイルは, 「<ref
	id="printing:advanced:header-pages:enabling" name="ヘッダペー
	ジの出力を許可する">」で参照することができます). このファイルには, 
	既に, プリンタ <tt/teak/ 用のエントリがありました. 以下では, 
	これに, ホスト rose にある2台のプリンタ用のエントリが加えられ
	ています. 
<code>
#
#  /etc/printcap for host orchid - added (remote) printers on rose
#

#
#  teak is local; it is connected directly to orchid:
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
	:lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
	:if=/usr/local/libexec/ifhp:\
	:vf=/usr/local/libexec/vfhp:\
	:of=/usr/local/libexec/ofhp:

#
#  rattan is connected to rose; send jobs for rattan to rose:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:

#
#  bamboo is connected to rose as well:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:
</code>
	orchid で必要となる作業はスプーリングディレクトリを作ることだ
	けです. 
<tscreen>
<verb>
mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo
chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo
chown daemon.daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo
</verb></tscreen>

	これで, orchid のユーザが <tt/rattan/ と <tt/bamboo/ で印字す
	ることができるようになりました. 例えば, orchid のユーザが次の
	ように入力したとします. 
<tscreen><verb>
lpr -P bamboo -d sushi-review.dvi
</verb></tscreen>
	すると, orchid の LPD システムは, ジョブをスプーリングディレ
	クトリ <tt>/var/spool/lpd/bamboo</tt> にコピーし, これが DVI 
	ファイルを印字するジョブであることを記録します. ホスト rose の 
	<tt/bamboo/ 用のスプーリングディレクトリに十分な容量が確保でき
	次第, 両者の LPD は, ジョブのファイルを rose に転送します. こ
	のファイルは, そのすべてが印字されるまで, rose のキューに留まり
	ます. (bamboo は PostScript プリンタなので) DVI から PostScript
	への変換は rose でおこなわれます. 


	<sect2><heading> ネットワークにおけるデータストリームのインタ
	フェースを持つプリンタ <label id="printing:advanced:network:net-if">
	</heading>

	  <p> プリンタのネットワークインタフェースカードは, 2種類に分
	類することができます. 1つはスプーラをエミュレートするもの (高価)
	で, もう1つはシリアルやパラレルポートを使うようにプリンタにデー
	タを送ることができるだけのもの (安価) です. この節では, 後者の使
	い方を説明します. 前者のプリンタは, 前節「<ref name="リモート
	ホストに接続されたプリンタ" id="printing:advanced:network:rm">」
	の方法が適用できます. 

	<tt>/etc/printcap</tt> ファイルでは, シリアルかパラレルのイン
	タフェースのどちらを使うのか, そして, (シリアルインタフェース
	を使う場合) そのボーレートはいくらであるか, フロー制御は使うのか, 
	タブのための遅延を加えるのか, 改行文字を変換するかなどの指定を
	おこなうことができます. しかし, TCP/IP や他のネットワークポートか
	らデータを受け取るプリンタを接続するための指定をおこなうことはでき
	ません. 

	ネットワーク接続されたプリンタにデータを送るためには, テキスト
	フィルタと変換フィルタから呼び出すことができる通信プログラムを
	開発する必要があります. 以下に, そのようなプログラムの例を示し
	ます. スクリプト <tt/netprint/ では, 標準入力から印字データを
	すべて受け取り, ネットワーク接続されたプリンタにこれを送ります. 
	<tt/netprint/ の最初の引数でプリンタのホスト名を, 2番目の引数
	で接続するポート番号を指定します. このプログラムでは単方向通信
	(FreeBSD からプリンタ) のみをサポートしていることに注意してくだ
	さい. ネットワークプリンタの多くは双方向通信をサポートしていま
	すので, その恩恵 (プリンタの状態を得たり, 課金をおこなうなど) にあず
	かりたいと思われるかもしれません. 
<code>
#!/usr/bin/perl
#
#  netprint - Text filter for printer attached to network
#  Installed in /usr/local/libexec/netprint
#

$#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>";

$printer_host = $ARGV[0];
$printer_port = $ARGV[1];

require 'sys/socket.ph';

($ignore, $ignore, $protocol) = getprotobyname('tcp');
($ignore, $ignore, $ignore, $ignore, $address)
    = gethostbyname($printer_host);

$sockaddr = pack('S n a4 x8', &amp;AF_INET, $printer_port, $address);

socket(PRINTER, &amp;PF_INET, &amp;SOCK_STREAM, $protocol)
    || die "Can't create TCP/IP stream socket: $!";
connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!";
while (<STDIN>) { print PRINTER; }
exit 0;
</code>
	このスクリプトは, 様々なフィルタが利用することができます. 仮に, 
	Diablo 750-N ラインプリンタを持っており, これがネットワークに
	接続されているとしましょう. プリンタはポート番号5100にて印字す
	るデータを受け取ります. プリンタのホスト名は scrivener としま
	す. このとき, このプリンタのテキストフィルタは次のようになりま
	す. 
<code>
#!/bin/sh
#
#  diablo-if-net - Text filter for Diablo printer `scrivener' listening
#  on port 5100.  Installed in /usr/local/libexec/diablo-if-net
#

exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100
</code>


      <sect1><heading> プリンタの利用に制約を与える <label
	    id="printing:advanced:restricting"></heading>
	
	<p> 本節では, プリンタの利用に制約を与えるための情報を記して
	います. LPD システムでは, プリンタ (ローカル, リモートのいずれ
	に接続されていても) にアクセスできる人を制限する機能, 複数部の
	コピーの印字の可否を制御する機能, ジョブのサイズの最大値やプリ
	ンタキューに入るジョブの最大個数を制御する機能を提供しています. 


	<sect2><heading> 複数部のコピーの印字を制限する <label
	      id="printing:advanced:restricting:copies"></heading>

	  <p> LPD システムではユーザが複数部のコピーの印字を簡単におこなう
	機能を提供しています. ユーザが, (例えば) <tt/lpr -&num;5/ コマ
	ンドを使ってジョブを印字すると, ジョブのそれぞれのファイルのコ
	ピーを5部得ることができます. これがよい機能であると思うかどう
	かは人それぞれでしょう. 

	複数部のコピーの印字によってプリンタが必要以上に消耗してしまう
	と感じるならば, <tt>/etc/printcap</tt> ファイルに <tt/sc/ 項
	目を加えてください. これにより, <tt/-&num;/ オプションの使用
	が禁止されます. このオプションが指定されているにも関らず, 
	<tt/-&num;/ オプションを使うと, 次のようなメッセージが表示され, 
	このオプションの利用できない旨を伝えます. 
<tscreen><verb>
lpr: multiple copies are not allowed
</verb></tscreen>

	リモートホストからプリンタをアクセスできる設定にしている場合 (この
	設定については, 「<ref name="リモートホストに接続されたプリン
	タ" id="printing:advanced:network:rm">」をご覧ください), その
	リモートホストの <tt>/etc/printcap</tt> にも同じように <tt/sc/ 
	項目を追加する必要があることに注意してください. そうしないと, 
	ユーザは別なホストから複数部のコピーの印字することができてしま
	います. 

	例を使って説明しましょう. 次に示す <tt>/etc/printcap</tt> ファ
	イルは, ホスト rose のものです. プリンタ <tt/rattan/ は極めて
	頑丈なので, 複数部のコピーの印字は許可されています. しかし, レー
	ザプリンタの <tt/bamboo/ はもう少しデリケートで, このプリンタ
	から複数部のコピーを印字することを <tt/sc/ 項目を追加すること
	で禁止しています. 
<code>
#
#  /etc/printcap for host rose - restrict multiple copies on bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:sd=/var/spool/lpd/rattan:\
	:lp=/dev/lpt0:\
	:if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:sc:\
	:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
	:if=/usr/local/libexec/psif:\
	:df=/usr/local/libexec/psdf:
</code>
	さらに, orchid の <tt>/etc/printcap</tt> にも <tt/sc/ 項目を
	追加する必要があります (orchid でこの編集をおこなっているときに, つ
	いでに, プリンタ <tt/teak/ でも複数部のコピーの印字を禁止する
	ことにしましょう). 
<code>
#
#  /etc/printcap for host orchid - no multiple copies for local
#  printer teak or remote printer bamboo

teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
	:lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\
	:if=/usr/local/libexec/ifhp:\
	:vf=/usr/local/libexec/vfhp:\
	:of=/usr/local/libexec/ofhp:

rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc:
</code>
	<tt/sc/ 項目を指定することにより, <tt/lpr -&num;/ の使用を防
	ぐことができます. しかし, この状態では <tt/lpr/ を複数回起動し
	たり, 1回のジョブで次のように同じファイルを複数個指定すること
	を防ぐまでには至っていません. 
<tscreen><verb>
lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign 
</verb></tscreen>
	このような悪用を防ぐ方法は (その指示を無視することも含めて) たく
	さんあります. 各自で調べてみてください. 


	<sect2><heading> プリンタを使用できる人を限定する <label
	      id="printing:advanced:restricting:access"></heading>

	  <p> それぞれのプリンタを使用できる人を限定するには, UNIX の
	グループ権限のメカニズムを利用し, さらに, 
	<tt>/etc/printcap</tt><tt/rg/ 項目を指定することでおこないます. 
	あるプリンタにアクセスさせてもよいと思うユーザすべてをUNIXのある
	グループに入れてください. そして, そのグループ名を <tt/rg/ で
	指定します. 

	このとき, そのグループに含まれないユーザ (root も含む) が 
	<tt/rg/ の指定がされたプリンタを使用すると, 次のようなメッセー
	ジが表示され, プリンタの使用はできません. 

<tscreen><verb>
lpr: Not a member of the restricted group
</verb></tscreen>
	<tt/sc/ (suppress multiple copies : 複数部のコピーの印字を禁止
	する) を指定するときと同様に, <tt/rg/ が指定されたプリンタがリ
	モートホストからもアクセスでき (この設定については, 「<ref
	name="リモートホストに接続されたプリンタ"
	id="printing:advanced:network:rm">」をご覧ください), かつ, そ
	のホストでもプリンタを使用できる人を限定するのが妥当であると思
	う場合は, そのホストの <tt>/etc/printcap</tt> にも <tt/rg/ 指
	定をおこなう必要があります. 

	例えば, プリンタ <tt/rattan/ は誰でも利用できるが, 
	<tt/bamboo/ はグループ <tt/artists/ に属している人のみが利用で
	きるようにしてみましょう. 以下に, もうお馴染みとなったホスト 
	rose の <tt>/etc/printcap</tt> を示します. 
<code>
#
#  /etc/printcap for host rose - restricted group for bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:sd=/var/spool/lpd/rattan:\
	:lp=/dev/lpt0:\
	:if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\
	:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
	:if=/usr/local/libexec/psif:\
	:df=/usr/local/libexec/psdf:
</code>
	これ以外の <tt>/etc/printcap</tt> ファイル (ホスト orchidのもの) 
	はそのままにしておくことにします. もちろん, orchid のユーザは
	全員 <tt/bamboo/ を利用することができます. これは, orchid に
	は特定のユーザのみにしかアクセスさせておらず, そのユーザにはプ
	リンタを利用させたいと思っているからなのかもしれませんし, そう
	でないかもしれません. 

	<em/注意:/ 1台のプリンタを複数グループのユーザに利用させること
	はできません. 

	<sect2><heading> 入力可能なジョブのサイズを制限する <label
	      id="printing:advanced:restricting:sizes"></heading>

	  <p> たくさんのユーザからプリンタが利用される場合には, 多分, 
	ユーザが印字要求を出すことができるファイルのサイズに上限値を置
	く必要が生じるでしょう. 結局のところ, スプーリングディレクトリ
	が置かれているファイルシステムの空き容量がその上限値になる訳で
	すが, あるユーザがこれを独占的に使用すること避けるために, 他ユー
	ザからのジョブ用の空き容量を確保する必要もあります. 

	LPD では, <tt/mx/ 項目を指定することにより, ジョブ中の個々のファ
	イルのサイズの上限値を制限する機能を提供しています. 指定される
	ファイルサイズの単位は BUFSIZ ブロックで, 1 BUFSIZ ブロックは
	1024バイトを表わします. この <tt/mx/ 項目の値として0が指定される
	と, ファイルサイズの制限はなくなります. この制限はジョブ中の各
	<em/ファイル/に対して適用されるものであり, ジョブ全体のサイズ
	を<em/制限するものではない/ことに注意してください. 

	ところで, プリンタに設定された上限値を超えるファイルサイズのファ
	イルが入力された場合でも, LPD はこれを拒否しません. その代わ
	りに, このファイルは, その先頭から上限値のファイルサイズまでし
	かキューに入れられません. そして, その部分までが印字され, 残り
	の部分は捨てられます. これが正しい動作といえるのかどうかは議
	論の余地があるところです. 

	それでは, 設定例に登場しているプリンタ <tt/rattan/ と 
	<tt/bamboo/ の印字可能なファイルサイズに制限を加えてみましょう. 
	artists グループの人達が作る PostScript ファイルのサイズは
	巨大になる傾向があるので, 上限値を5Mバイトとします. それから, 
	プレインテキスト用のラインプリンタは無制限とします. 
<code>
#
#  /etc/printcap for host rose
#

#
#  No limit on job size:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:sd=/var/spool/lpd/rattan:\
	:lp=/dev/lpt0:\
	:if=/usr/local/libexec/if-simple:

#
#  Limit of five megabytes:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
	:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
	:if=/usr/local/libexec/psif:\
	:df=/usr/local/libexec/psdf:
</code>
	この場合もそうですが, この制限はローカル (ホスト rose) のユーザ
	のみに適用されます. リモートホストからプリンタを利用できるよう
	に設定している場合は, そのリモートホストのユーザはこの制限を受
	けません. これらのユーザにも制限を加える場合は, リモートホスト
	の <tt>/etc/printcap</tt><tt/mx/ を指定する必要があります. 
	リモートホストから印字するための詳しい情報については, 「<ref
	name="リモートホストに接続されたプリンタ"
	id="printing:advanced:network:rm">」を参照してください. 

	リモートホストに接続されたプリンタへのジョブのサイズを制限する
	特別な方法は他にもあります. これについては, 「<ref
	id="printing:advanced:restricting:remote" name="リモートホスト
	からのプリンタの利用を制限する">」を参照してください. 


	<sect2><heading> リモートホストからのプリンタの利用を制限する
	<label id="printing:advanced:restricting:remote"></heading>

	  <p> LPD スプーリングシステムでは, リモートホストから要求され
	たジョブの印字を制限するための方法がいくつか提供されています. 

	    <descrip>
	      <tag/ホストの制限/

		ローカルの LPD が印字要求を受け付けるリモートホストは, 
		ファイル <tt>/etc/hosts.equiv</tt><tt>/etc/hosts.lpd</tt> によって制御することができます. 
		LPD では, あるホストから印字の要求がきたとき, このホス
		トの名前がこれら2つのファイルのどちらかに含まれている
		かどうかを調べます. これが含まれていない場合は, LPD 
		はこの要求を拒否します. 

		これらのファイルの形式は単純です. 各行にホストの名前を
		1つずつ書いていきます. ファイル 
		<tt>/etc/hosts.equiv</tt> の方は ruserok(3) プロトコル
		でも利用され, <tt/rsh/ や <tt/rcp/ といったプログラム
		の動作に影響するので注意が必要です. 
		<tt>/etc/hosts.equiv</tt> の記述は慎重におこないましょう. 

		例として, 以下にホスト rose の <tt>/etc/hosts.lpd</tt> 
		を示します. 
<code>
orchid
violet
madrigal.fishbaum.de
</code>
		この例では, rose はホスト orchid, violet, そして 
		madrigal.fishbaum.de からの要求を受け付けることになり
		ます. その他のホストが rose の LPD にアクセスしようと
		しても, LPD はこれを拒否します (訳注:拒否されるのは, 
		そのホストが <tt>/etc/hosts.equiv</tt> にも含まれてい
		ない場合です). 


	      <tag/サイズの制限/

		スプーリングディレクトリがあるファイルシステムに残して
		おく必要がある空き容量の大きさを制御することができます. 
		ローカルプリンタ用のスプーリングディレクトリに 
		<tt/minfree/ という名前のファイルを作成します. そして, 
		そのファイルの中にリモートホストからのジョブの要求を受
		け付けるために必要な空き容量のディスクブロックサイズ (1
		ディスクブロック=512バイト) を記します. 

		これで, リモートホストのユーザにファイルシステムを満杯
		にされないことが保証されます. この機能を使うと, ローカ
		ルホストのユーザに対してある種の優先権を与えることもで
		きます. ローカルホストのユーザは, <tt/minfree/ ファイ
		ルで指定された値よりもディスクの空き容量が下回った後で
		もずっと, ジョブをキューに入れることができるのです. 

		例えば, プリンタ <tt/bamboo/ 用の <tt/minfree/ を作っ
		てみましょう. このプリンタのスプーリングディレクトリを
		調べるために, <tt>/etc/printcap</tt> を調べてみましょ
		う. 以下に, <tt/bamboo/ のエントリ部分を示します. 
<tscreen><verb>
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
	:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:mx#5000:\
	:if=/usr/local/libexec/psif:\
	:df=/usr/local/libexec/psdf:
</verb></tscreen>
		スプーリングディレクトリは <tt/sd/ で指定されます. 
		LPD がリモートホストからのジョブを受け付けるために必要
		なファイルシステムの空き容量を3Mバイト (=6144ディスクブ
		ロック) にすることにしましょう. 
<tscreen><verb>
echo 6144 > /var/spool/lpd/bamboo/minfree
</verb></tscreen>

	      <tag/利用ユーザの制限/

		<tt>/etc/printcap</tt><tt/rs/ 項目を指定することで, 
		ローカルプリンタを利用できるリモートホストのユーザを制
		限することができます. ローカルホストに接続されたプリン
		タ用のエントリに <tt/rs/ 項目が指定されている場合, 
		LPD は印字を要求したユーザのアカウントと同じログイン名
		がローカルホストに登録されている/em/場合に限り/, その
		ジョブが受け付けられます. そうでないユーザからのジョブ
		は LPD は拒否します. 

		この機能は, (例えば) 複数の部署がネットワークを共有して
		おり, この内のあるユーザが部署の境界を越えて活動してい
		る場合には特に有用です. そのようなユーザに対して, シス
		テムのアカウントを与えるだけで, これらのユーザは自分が
		所属する部署のシステムからそのシステムに接続されている
		プリンタを使用することができます. これらのユーザにはむ
		しろ, プリンタの使用<em/だけ/を認め, その他のコンピュー
		タ資源を利用させたくないときは, それらのユーザにはホー
		ムディレクトリを与えず, ログインシェルはシェルとしては
		何の役にも立たない <tt>/usr/bin/false</tt> などを指定
		して, これらのユーザのアカウントはプリンタ用の「形式的
		な」ものとします. 
	    </descrip>

      <sect1><heading> プリンタの利用に対する課金 <label
	    id="printing:advanced:acct"></heading>

	<p> という訳で, 印字するためには料金をとることが必要です. 取ら
	ない理由などありましょうか. 紙やインクにはお金がかかります. そ
	して, プリンタの維持費もかかります. プリンタには可動部分が搭載
	されており, これらの部分は壊れやすいという傾向があります. プリ
	ンタや, その利用形態, 維持費について調査をし, 1ページ (1フィー
	ト, 1メートルなど) 当たりにかかるコストを調べておいてください. 
	これに基づき, プリンタの利用に対する課金を, 実際に, どのように
	始めればよいのでしょうか. 

	さて, 残念ながら, この部分に関しては LPD スプーリングシステム
	はほとんど役に立ちません. 課金は使用しているプリンタの種類, 印
	字するもののファイルの形式, プリンタの利用に対する課金での<em/
	あなた自身の/要求に大きく左右されます. 

	課金システムを実現するためには, プリンタのテキストフィルタ (プ
	レインテキストのジョブに対して課金するため) と変換フィルタ (その
	他のファイル形式に対して課金するため) を変更して, 印字したペー
	ジを数えたり, プリンタに印字したページ数を取得するための要求を
	送る必要があります. ただし, 出力フィルタのみを利用している場合
	は, 課金をおこなうことができません. フィルタに関しては, 「<ref
	name="フィルタ" id="printing:advanced:filter-intro">」をご覧く
	ださい. 

	一般に, 課金方式には次の2つがあります. 
	  <itemize>
	    <item><em/定期的に課金する方法/はよく利用される方法です. 
		この理由は, 恐らく, 比較的簡単に実現できるからです. 誰
		かがジョブを印字する度に, フィルタはそのユーザ名, ホス
		ト名, 印字したページ数を課金データファイルに記録します. 
		毎月, 毎学期, 毎年, あるいは, お好みの時期に, 様々なプ
		リンタの課金用ファイルを集め, それぞれのユーザが印字し
		たページ数を合計し, その分の課金をおこないます. 次回の課金
		時期のためのデータを0にして課金を再開するために, この
		処理をおこなった後, すべてのログファイルを削除し, 

	    <item><em/利用毎に課金する方法/はあまり利用されていません. 
		これは, 実現するのが比較的難しいからです. この方式では, 
		プリンタを使用したらすぐに, フィルタがユーザにその利用
		に対する課金をおこないます. ディスククオータのように, 課金
		作業は瞬時におこなわれます. この方式では, ユーザのアカウン
		トが赤字になる場合に, ユーザが印字をおこなうことを拒否する
		ことができます. また, ユーザに「プリンタ版 quota」を
		調べたり, 調整したりする方法を提供したいと思うかもしれ
		ません. これを実現するためには, ユーザとその quota を
		追跡するために, あるデータベース用のコードが必要となり
		ます. 
	  </itemize>

		LPD スプーリングシステムでは, 両方式を簡単にですがサポー
		トしています. これは, (ほとんどの場合で) 印字作業をフィ
		ルタがおこなっていたように, 課金作業もこのためのコードも用
		意することで実現されています. しかし, 明るい面もありま
		す. それは, 課金方式に関して, 非常に大きな柔軟性が与え
		られたということです. 例えば, 「定期的に課金する方法」
		か, 「利用毎に課金する方法」のどちらかを選びまず, そし
		て, どんな情報 (ユーザ名, ホスト名, ジョブのタイプ, 印
		字された頁数, 使用した紙の大きさ, 印字をするために要した
		時間など) をログに記録するかを決めます. 以上のことをおこな
		うには, 上記の情報を保持するために, フィルタを変更しな
		くてはなりません. 



	<sect2><heading> 手軽なプリンタ課金方法</heading>

	  <p> FreeBSD には, 「定期的に課金する方法」による課金をすぐに
		設定できるように, 2個のプログラムを添付しています. そ
		の内の1つはテキストフィルタ <tt/lpf/ で, これについて
		は, 「<ref id="printing:advanced:lpf" name="テキストフィ
		ルタ lpf">」をご覧ください. もう1つは, <tt/pac/ で, 
		これはプリンタの課金データファイルからのエントリを集め, 
		これを合計するプログラムです. 

		「<ref id="printing:advanced:filters" name="フィルタは
		どのように機能しているか">」で述べたように, LPD では
		テキストフィルタや変換フィルタを起動しますが, そのコマ
		ンドラインで使用している課金データファイルの名前が指定
		されます. 両フィルタはこの引数を使って, どの課金データ
		ファイルのエントリに書き込めばよいのかを知ることができ
		ます. このファイルの名前は <tt>/etc/printcap</tt> 中の 
		<tt/af/ 項目によって指定されます. このファイルが絶対パ
		スで指定されない場合は, スプーリングディレクトリからの
		相対パスとして扱われます. 

		LPD は, 紙のページの幅と行数 (<tt/pw/ と <tt/pl/ 項目で
		指定される) を引数として <tt/lpf/ を起動します. 
		<tt/lpf/ では, 何ページ印字したかを決定するためにこれ
		らの引数を使用します. ファイルをプリンタに送った後, 課
		金情報を課金データファイルに書き込みます. このファイル
		は次のようになります. 
<tscreen><verb>
   2.00 rose:andy
   3.00 rose:kelly
   3.00 orchid:mary
   5.00 orchid:mary
   2.00 orchid:zhang
</verb></tscreen>
		課金データファイルはプリンタ毎に分けて作るべきです. こ
		れは, <tt/lpf/ にはデータファイルをロックする機構が組
		み込まれていないためです. したがって, <tt/lpf/ が2つ起動
		されたとき, 同じファイルに同時に書き込みをおこなった場合, 
		お互いのエントリが破壊されてしまうかもしれません. 課金
		用ファイルを各プリンタ毎に確実に分けるには, 
		<tt>/etc/printcap</tt> 中の <tt/af=acct/ 項目を使いま
		す. 

		プリンタの利用に対してユーザに課金する準備ができたら, 
		スプーリングディレクトリに移動した後, <tt/pac/ と入力
		してください. 次のような, ドル中心主義の課金リストが表
		示されます(訳注:ドル中心主義という表現は, 表示がドルで
		出ることへの著者の皮肉でしょう. セントがあるので小数点
		以下が表示されますが, この機能も日本では邪魔ですね).
<code>
  Login               pages/feet   runs    price
orchid:kelly                5.00    1   $  0.10
orchid:mary                31.00    3   $  0.62
orchid:zhang                9.00    1   $  0.18
rose:andy                   2.00    1   $  0.04
rose:kelly                177.00  104   $  3.54
rose:mary                  87.00   32   $  1.74
rose:root                  26.00   12   $  0.52

total                     337.00  154   $  6.74
</code>
		<tt/pac/ が受け付ける引数には次のようなものがあります. 
	    <descrip>
	      <tag/<tt/-P<it/printer///

		プリンタ <it/printer/ の利用に対する課金リストを作成し
		ます. このオプションは, <tt>/etc/printcap</tt><tt/af/ が絶対パスで指定されていた場合に限り, 動作しま
		す. 

	      <tag/<tt/-c//

		ユーザ名のアルファベット順ではなく, 課金額の低い順にリ
		ストを並べます. 

	      <tag/<tt/-m//

		課金データファイルにあるホスト名を無視します. このオプショ
		ンを使用すると, ホスト alpha のユーザ smith とホスト 
		gamma のユーザ smith は同一人物として扱われます. この
		オプションが指定されない場合は, 両者は別なユーザとして
		扱います. 

	      <tag/<tt/-p<it/price///

		
		<tt>/etc/printcap</tt><tt/pc/ 項目で指定された値, 
		または, デフォルトの値 (2セント) に代わり, 紙1ページ, ま
		たは, 1フィート当たりの価格を指定します. <it/price/ 
		として, 浮動小数点数を指定することができます. 

	      <tag/<tt/-r//

		リストの並べる順番を逆順にします. 

	      <tag/<tt/-s//
	      
		課金リストを作成し, 課金データファイルを削除します. 

	      <tag/<tt/<it/names...///

		ユーザ <it/names/ に対する課金情報のみを表示します. 
	    </descrip>

	<tt/pac/ が生成するデフォルトのリストには, 各ホストのユーザ別
	に印字ページ数が表示されます. (ユーザがサイト内のすべてのホスト
	を使用できるため) ホスト名の情報が意味を持たない場合, 
	 <tt/pac -m/ を実行してください. 次のようなリストが得られます. 

<code>
  Login               pages/feet   runs    price
andy                        2.00    1   $  0.04
kelly                     182.00  105   $  3.64
mary                      118.00   35   $  2.36
root                       26.00   12   $  0.52
zhang                       9.00    1   $  0.18

total                     337.00  154   $  6.74
</code>
	課金額を決めるために, <tt/pac/ は <tt>/etc/printcap</tt> ファ
	イルの <tt/pc/ 項目で指定された値 (デフォルト値は200, すなわち1
	ページ当たり2セント) を使います. この項目で, 印字物に課金したい
	と思う1ページ当たり, または, 1フィート当たりの価格を100分の1セ
	ント単位で指定します. <tt/pac/ を <tt/-p/ オプション付きで起動
	すると, この値を置き換えることができます. この <tt/-p/ オプショ
	ンで指定する額の単位は, 100分の1セント単位ではなく, ドル単位で
	す. 例えば, 次の指定では, 1ページ当たりの単価が1ドル50セントに
	なります. 
<tscreen><verb>
pac -p1.50
</verb></tscreen>
	このオプションを使うと, 実際の課金額を集計することができます. 

	最後に, <tt/pac -s/ を起動すると, 課金情報は課金データ累計ファ
	イルに保存されます. このファイルの名前は, プリンタの課金データ
	ファイルの後ろに <tt/_sum/ を付けたものとなります. そして, 課
	金データファイルは削除されます. 次に <tt/pac/ が起動されると, 
	その時点までの累計金額を得るために, 課金データ累計ファイルが読
	み込まれ, 通常の課金データファイルからの情報に加算されます. 


	<sect2><heading> 印字されたページ数をどのように数えるか?
	</heading>

	  <p> 課金を, リモートホストからの印字でさえも, 正確におこなうため
		には, ジョブで使用された紙が何ページであるかを特定でき
		る必要があります. このことは, プリンタ利用に対する課金
		をおこなう上の根本的な問題です. 

		プレインテキストのジョブの場合, 問題を解決するのはさほ
		ど難しくはありません. ジョブが何行であったかを数え, プ
		リンタがサポートしている紙1ページに印字できる最大の行
		数と比較すればよいのです. 重ね打ちするために利用される
		ファイル中のバックスペース文字や, 物理的に複数の行に渡
		る長い論理行に対する取り扱いを忘れずにおこなってください. 

		 (「<ref id="printing:advanced:lpf" name="テキストフィ
		ルタ lpf">」で紹介した) テキストフィルタ <tt/lpf/ では, 
		課金をおこなうときに, これらの取り扱いをおこなってくれます. 課
		金をおこなうために必要なテキストフィルタを作成している方は, 
		<tt/lpf/ のソースコードが参考になるでしょう. 

		これに対して, 他のファイル形式の処理はどのようにすれば
		よいのでしょうか. 

		まず, DVI から LaserJet, または, DVI から PostScript 
		への変換の場合, フィルタが <tt/dvilj/ や <tt/dvips/ の
		出力メッセージを解析することで, 何ページ分の変換がおこなわ
		れたかを知ることができます. 他のファイル形式とその変換
		プログラムに関しても, 同様のことができるかもしれません. 

		しかし, この方式には問題点があります. それは, 変換され
		たページがすべて印字されるとは限らないということです. 例
		えば, プリンタが紙詰まりを起こしたり, トナー切れになっ
		たり, はたまた, 爆発したりするかもしれません. そのよう
		な状況により印字が途中で中止されたとしても, この方式で
		は, ユーザは全ページ分の料金を課されてしまうのです. 

		それでは, どのような対策をたてることができるのでしょう
		か. 

		<em/正確な/課金をおこなうための唯一の<em/確実な/方法は, 何
		ページ印字したのかを知らせることができるプリンタを入手
		し, これをシリアルポートかネットワークに接続することで
		す. ほとんどすべての PostScript プリンタではこの概念
		がサポートされています. 他のプリンタも同様です (Imagen 
		レーザプリンタをネットワーク接続するなど). それぞれの
		プリンタのフィルタを, ジョブを印字した後で印字ページ数
		を得るように, 変更してください. そして, 課金情報はここ
		で得られた値<em/のみに/基づいて記録してください. 行数
		を数えたり, エラーが生じやすいファイルの調査は必要とさ
		れません. 

		もちろん, 気前よく印字料
		金をすべて無料にすることもできます. 

    <sect><heading> 標準スプーラの代替品 <label
	  id="printing:lpd-alternatives"></heading> 

      <p> このマニュアルを最初から通読されている方ならば, ここまでで, 
	FreeBSD 付属の LPD スプーリングシステムに関して知っておくべき
	ことすべてを学ばれたことと思います. 多分, このシステムに
	あるたくさんの欠点について認識できたことでしょう. すると, 
	「(FreeBSD 上で動作する) スプーリングシステムには他にどのような
	ものがあるのか」という疑問が自然と湧いてきます. 

	残念ながら, 著者は代替のスプーラを<em/2つ/だけしか探し出すこと
	ができませんでした. そして, それぞれはほとんど同一のものです. 
	以下に, 両システムの紹介をおこないます. 
	<descrip>
	  <tag/PLP (Portable Line Printer スプーリングシステム) /

		PLP は Patrick Powell によって開発されたソフトウエアを
		ベースにされており, インタネット規模のグループの開発者
		によって管理されていました. このソフトの主要サイトは「
		<htmlurl
		url="ftp://ftp.iona.ie/pub/plp"
		name="ftp://ftp.iona.ie/pub/plp">」です. 
		「<htmlurl
		url="http://www.iona.ie:8000/www/hyplan/jmason/plp.html"
		name="web page">」にもあります. 


		PLP は BSD LPD スプーラと極めて似ていますが, 以下のも
		のを含むホストの機能が自慢です. 
	    <itemize>
	      <item> ネットワークサポートの強化. ネットワーク接続され
		るプリンタのサポートや NIS で管理可能な printcap ファ
		イル, NFS マウントされるスプーリングディレクトリの機
		能が組み込まれています. 

	      <item> 洗練されたなキュー管理. 1つのキューで複数のプリン
		タに対応可能. キュー間でジョブを転送したり, キューのリ
		ダイレクトができます. 

	      <item> リモートプリンタの制御機能

	      <item> ジョブの優先順位付け

	      <item> 拡張性のあるセキュリティとアクセスオプション
	    </itemize>

	  <tag/LPRng/

		LPRng は, その称するところの意味は「LPR: the Next
		Generation」ですが, PLP を完全に書き換えたものになっ
		ています. Patrick Powell と Justin Mason (PLP の主要
		なの管理者) の共同で LPRng が作成されました. LPRng の
		主要サイトは「
		<htmlurl url="ftp://dickory.sdsu.edu/pub/LPRng"
		name="ftp://dickory.sdsu.edu/pub/LPRng">」です. 
	</descrip>


    <sect><heading> 謝辞 </heading>

      <p> このドキュメントの開発の手助けをして頂いた以下の方々に感謝の
	意を表わしたいと思います. 

	<descrip>
	  <tag/Daniel Eischen <tt/&lt;deischen@iworks.interworks.org&gt;//

		精読するためのあり余るほどの HP 用フィルタを提供してく
		れたことに. 

      <tag/&a.jehamby;/

		提供して頂いた Ghostscript から HP へのフィルタに. 

	  <tag/私の妻, Mary Kelly <tt/&lt;urquhart@argyre.colorado.edu&gt;//

		彼女と一緒にいるよりもずっと長い時間を FreeBSD のため
		に費やすことを許してくれたことに. 

	</descrip>