OVH Cloud OVH Cloud

[FreeBSD] redirections shell et /dev/fd/N

1 réponse
Avatar
Marie-Lan Nguyen
Bonjour,

J'essaie de faire marcher mon imprimante (une HP LaserJet 6L) avec mon
FreeBSD 5.1-RELEASE.

Mon imprimante n'étant pas PS, j'ai mis en place un filtre en
copiant-collant celui indiqué dans le Handbook
(www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/printing-advanced.html).
Ma seule modification a été de modifier l'argument -sDEVICE de gs.

Quand je tente d'imprimer un .ps (que ce soit comme simple utilisateur
ou comme root), lpr me dit blah. Voici le log :

Error: /invalidfileaccess in --.outputpage--
Operand stack:
1 true
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-
<snip>
Current allocation mode is local
Last OS error: 45
GNU Ghostscript 7.07: Unrecoverable error, exit code 1
Nov 11 14:41:26 earendil lpd[45855]: ingwe: job could not be printed
(cfA023earendil.silmaril.vl)

Le passage incriminé dans le filtre est le suivant :

exec 3>&1 1>&2
/usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=ljet4 \
-sOutputFile=/dev/fd/3 - && exit 0

Il semblerait que /dev/fd/3 n'existe pas au moment où gs veut
l'ouvrir, ou qu'il refuse d'être ouvert (d'où le EOPNOTSUPP). Le
script fonctionne si on enlève les redirections et qu'on met
-sOutputFile=/dev/fd/1.

Quelqu'un voit-il où est le problème dans ce bout de script ?

Merci,

--
Marie-Lan Nguyen
"Five exclamation marks, the sure sign of an insane mind."
(Terry Pratchett, _Reaper Man_)
<http://www.pip-pip.org/>

1 réponse

Avatar
Marie-Lan Nguyen
Marie-Lan Nguyen in scripsit:

Il semblerait que /dev/fd/3 n'existe pas au moment où gs veut
l'ouvrir, ou qu'il refuse d'être ouvert (d'où le EOPNOTSUPP). Le
script fonctionne si on enlève les redirections et qu'on met
-sOutputFile=/dev/fd/1.


On m'a répondu en privé (merci à Christian Weisgerber), je donne
l'explication pour mémoire : le devfs de FreeBSD 5 a des entrées
statiques pour /dev/fd/[0-2] et c'est tout. Pour avoir les entrées
correspondant aux file descriptors ouverts, il faut monter fdescfs.

earendil ~ $ grep fdesc /etc/fstab
fdesc /dev/fd fdescfs rw 0 0

--
Marie-Lan Nguyen
"Five exclamation marks, the sure sign of an insane mind."
(Terry Pratchett, _Reaper Man_)
<http://www.pip-pip.org/>