OpenOffice, system-config-printer and cups browsing bug

Fernando Perez Fernando.Perez at colorado.edu
Fri Jun 4 21:28:06 UTC 2004


Hi all,

I've finally understood the origin of my OO.o problems.  I document below the 
bug and my workaround.  I hope this gets fixed soon so others don't struggle 
with it as well.

============================================================================

OO Problem understood
---------------------

OO.o in Fedora2 runs behind the scenes system-config-printer in a mode which
browses the network and auto-detects printers and adds them to the list of
CUPS printers.  In my system, it is adding a printer which when configured
normally works correctly, but for some reason in this case it just hangs.

I think it is adding this printer as a queued printer from a remote server,
when it shouldn't: it adds braque at eady (printer at server).  This server may
somehow be refusing connections.  When I've manually configured cups, I always
add this printer on its own (it is a network printer), and it works fine.

Here is the relevant part of 'strace oowriter':

open("/lib/libnss_dns.so.2", O_RDONLY)  = 28
read(28, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\360\f\0"..., 512) = 512
fstat64(28, {st_mode=S_IFREG|0755, st_size=22172, ...}) = 0
old_mmap(NULL, 16516, PROT_READ|PROT_EXEC, MAP_PRIVATE, 28, 0) = 0x1c83000
old_mmap(0x1c86000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 28, 
0x3000) = 0x1c86000
close(28)                               = 0
mprotect(0x1c86000, 4096, PROT_READ)    = 0
munmap(0x2a84a000, 103889)              = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 28
connect(28, {sa_family=AF_INET, sin_port=htons(53), 
sin_addr=inet_addr("128.138.240.1")}, 28) = 0
send(28, "\320L\1\0\0\1\0\0\0\0\0\0\4eady\10colorado\3edu\0\0"..., 35, 0) = 35
gettimeofday({1086381998, 726854}, NULL) = 0
poll([{fd=28, events=POLLIN, revents=POLLIN}], 1, 5000) = 1
ioctl(28, FIONREAD, [213])              = 0
recvfrom(28, "\320L\205\200\0\1\0\1\0\4\0\4\4eady\10colorado\3edu\0\0"..., 
1024, 0, {sa_family=AF_INET, sin_port=htons(53), 
sin_addr=inet_addr("128.138.240.1")}, [16]) = 213
close(28)                               = 0
time(NULL)                              = 1086381998
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 28
fcntl64(28, F_SETFD, FD_CLOEXEC)        = 0
setsockopt(28, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(28, SOL_TCP, TCP_NODELAY, [1], 4) = 0
connect(28, {sa_family=AF_INET, sin_port=htons(631), 
sin_addr=inet_addr("128.138.249.230")}, 16) = 0
getuid32()                              = 33212
gettimeofday({1086381998, 731126}, NULL) = 0
open("/var/tmp/40c0dfaeb27f6", O_RDWR|O_CREAT|O_EXCL, 0600) = 29
send(28, "GET /printers/braque.ppd HTTP/1."..., 35, 0) = 35
send(28, "Host: eady.colorado.edu\r\n", 25, 0) = 25
send(28, "\r\n", 2, 0)                  = 2
recv(28, "HTTP/1.1 200 OK\r\nDate: Fri, 04 J"..., 2048, 0) = 72
time(NULL)                              = 1086381998
time(NULL)                              = 1086381998
time(NULL)                              = 1086381998
recv(28, "Connection: Keep-Alive\r\nKeep-Ali"..., 2048, 0) = 2048
time(NULL)                              = 1086381998
time(NULL)                              = 1086381998
time(NULL)                              = 1086381998
time(NULL)                              = 1086381998
time(NULL)                              = 1086381998
write(29, "Content-Type: text/plain; charse"..., 1978) = 1978
time(NULL)                              = 1086381998
recv(28, "gBBox null>>setpagedevice\"\n*Page"..., 8192, 0) = 3683
write(29, "gBBox null>>setpagedevice\"\n*Page"..., 3683) = 3683
time(NULL)                              = 1086381998
recv(28, " Feed of Paper: PickOne\n*OrderDe"..., 8192, 0) = 8192
write(29, " Feed of Paper: PickOne\n*OrderDe"..., 8192) = 8192
time(NULL)                              = 1086381998
recv(28, "149: \"%% FoomaticOpt: Copies=149"..., 8192, 0) = 4696
write(29, "149: \"%% FoomaticOpt: Copies=149"..., 4696) = 4696
time(NULL)                              = 1086381998
recv(28, " \"%% FoomaticOpt: Copies=251\"\n*C"..., 8192, 0) = 6144
write(29, " \"%% FoomaticOpt: Copies=251\"\n*C"..., 6144) = 6144
time(NULL)                              = 1086381998
recv(28, "84\"\n*Copies 385/385: \"%% Foomati"..., 8192, 0) = 8192
write(29, "84\"\n*Copies 385/385: \"%% Foomati"..., 8192) = 8192
time(NULL)                              = 1086381998
recv(28, "*Copies 563/563: \"%% FoomaticOpt"..., 8192, 0) = 8192
write(29, "*Copies 563/563: \"%% FoomaticOpt"..., 8192) = 8192
time(NULL)                              = 1086381998
recv(28, "ies 741/741: \"%% FoomaticOpt: Co"..., 8192, 0) = 8192
write(29, "ies 741/741: \"%% FoomaticOpt: Co"..., 8192) = 8192
time(NULL)                              = 1086381998
recv(28, "919/919: \"%% FoomaticOpt: Copies"..., 8192, 0) = 8192
write(29, "919/919: \"%% FoomaticOpt: Copies"..., 8192) = 8192
time(NULL)                              = 1086381998
recv(28, "  \'type\' => \'P\',\n*% COMDATA #  \'"..., 8192, 0) = 7592
write(29, "  \'type\' => \'P\',\n*% COMDATA #  \'"..., 7592) = 7592
time(NULL)                              = 1086381998
recv(28, "</Duplex true /Tumble true>>setp"..., 8192, 0) = 7240
write(29, "</Duplex true /Tumble true>>setp"..., 7240) = 7240
time(NULL)                              = 1086381998
recv(28, "     \'vals\' => [\n*% COMDATA #   "..., 8192, 0) = 7944
write(29, "     \'vals\' => [\n*% COMDATA #   "..., 7944) = 7944
time(NULL)                              = 1086381998
recv(28, "->{\'args\'}[0]{\'vals\'}[3];\n*% COM"..., 8192, 0) = 4725
write(29, "->{\'args\'}[0]{\'vals\'}[3];\n*% COM"..., 4725) = 4725
time(NULL)                              = 1086381998
recv(28,

At this point it just hangs forever.

Workaround
----------

1. Run cupsdconf, go to browsing (bottom of left column of options)
and disable browsing altogether.

2. Manually delete the offending printer from cups (the easiest is to use the 
web cups admin: http://localhost:631/printers).

3. Restart Cups: 'service cups restart'

After this, OO will run fine.

Thoughts
--------

This is definitely new buggy behavior which did not exist in Fedora1.  Even if 
there is the good intention of automatically discovering printers for the 
user, the system should be far more robust in the face of whatever is failing 
here.  Having a dead, hung OpenOffice is not exactly 'user friendly'.

============================================================================

Cheers,

f





More information about the fedora-list mailing list