FreeBSD QandA 558
Q. FreeBSD 2.2.5-RELEASEにおいてリモートプリンタに印刷しようとすると、
印刷が途中で止まってしまい、lpqコマンドで調べると
`Warning: no daemon present'
と言われてしまいます。何故でしょう?
A. 2.2.5-RELEASEでは、リモートプリンタへの出力中に/etc/printcapの`ct'の
項目に指定している時間(デフォルトでは120秒)が経過すると実際にデータを
転送している子プロセスをlpdデーモンが殺してしまうそうです。
回避策としては、/etc/printcapのリモートプリンタの項に`ct#0'(0はこ
の場合無限大を意味する)という記述を加える、あるいは、lpdを2.2-stable
のものと入れ替えるといった方法があります。以下のパッチを当ててもよ
いでしょう。
Index: src/usr.sbin/lpr/common_source/displayq.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/lpr/common_source/displayq.c,v
retrieving revision 1.4.2.5
retrieving revision 1.4.2.6
diff -u -u -r1.4.2.5 -r1.4.2.6
--- displayq.c 1997/10/15 12:25:35 1.4.2.5
+++ displayq.c 1997/11/07 13:20:29 1.4.2.6
@@ -242,6 +242,7 @@
savealrm = signal(SIGALRM, alarmhandler);
alarm(CT);
fd = getport(RM, 0);
+ alarm(0);
(void)signal(SIGALRM, savealrm);
if (fd < 0) {
if (from != host)
Index: src/usr.sbin/lpr/lpd/printjob.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/lpr/lpd/printjob.c,v
retrieving revision 1.11.2.3
retrieving revision 1.11.2.4
diff -u -u -r1.11.2.3 -r1.11.2.4
--- printjob.c 1997/10/15 09:56:00 1.11.2.3
+++ printjob.c 1997/11/07 13:20:37 1.11.2.4
@@ -1474,6 +1474,7 @@
savealrm = signal(SIGALRM, alarmhandler);
alarm(CT);
pfd = getport(cp, port);
+ alarm(0);
(void)signal(SIGALRM, savealrm);
if (pfd < 0 && errno == ECONNREFUSED)
resp = 1;
@@ -1541,6 +1542,7 @@
savealrm = signal(SIGALRM, alarmhandler);
alarm(CT);
pfd = getport(RM, 0);
+ alarm(0);
(void)signal(SIGALRM, savealrm);
if (pfd >= 0) {
(void) snprintf(line, sizeof(line), "\2%s\n", RP);
間違い・追加情報を見付けた場合は、
修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで
お知らせください。