system-config-printer/system-config-printer-a6cf4d3.patch
Tim Waugh 48725f4825 - Sync with 1.1.x.
- Added patch for cupspk DevicesGet method call.
2009-07-31 14:14:42 +00:00

6539 lines
224 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

diff -up system-config-printer-1.1.10/aclocal.m4.a6cf4d3 system-config-printer-1.1.10/aclocal.m4
--- system-config-printer-1.1.10/aclocal.m4.a6cf4d3 2009-07-22 13:54:02.000000000 +0100
+++ system-config-printer-1.1.10/aclocal.m4 2009-07-31 15:09:03.192962439 +0100
@@ -1867,6 +1867,162 @@ AC_DEFUN([AM_NLS],
AC_SUBST(USE_NLS)
])
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+ [AC_MSG_RESULT([no])
+ $4])
+elif test $pkg_failed = untried; then
+ ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+ [$4])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
+
# po.m4 serial 15 (gettext-0.17)
dnl Copyright (C) 1995-2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
diff -up system-config-printer-1.1.10/configure.in.a6cf4d3 system-config-printer-1.1.10/configure.in
--- system-config-printer-1.1.10/configure.in.a6cf4d3 2009-07-22 13:53:25.000000000 +0100
+++ system-config-printer-1.1.10/configure.in 2009-07-31 15:09:03.194961651 +0100
@@ -40,6 +40,9 @@ AC_ARG_WITH(udev-rules,
AM_CONDITIONAL([UDEV_RULES], [test x$with_udev_rules != xno])
if test x$with_udev_rules != xno; then
+ PKG_CHECK_MODULES(DBUS_GLIB, [dbus-glib-1 >= 0.76])
+ AC_SUBST(DBUS_GLIB_CFLAGS)
+ AC_SUBST(DBUS_GLIB_LIBS)
AM_PROG_CC_C_O
fi
diff -up system-config-printer-1.1.10/cupshelpers/ppds.py.a6cf4d3 system-config-printer-1.1.10/cupshelpers/ppds.py
--- system-config-printer-1.1.10/cupshelpers/ppds.py.a6cf4d3 2009-07-22 13:22:49.000000000 +0100
+++ system-config-printer-1.1.10/cupshelpers/ppds.py 2009-07-31 15:09:03.198961636 +0100
@@ -113,7 +113,7 @@ def ppdMakeModelSplit (ppd_make_and_mode
model = ppd_make_and_model
# Handle PPDs provided by Turboprint
- elif l.startswith ("turboprint"):
+ elif l.find ("turboprint") != -1:
t = ppd_make_and_model.find (" TurboPrint")
if t != -1:
ppd_make_and_model = ppd_make_and_model[:t]
@@ -159,29 +159,32 @@ def ppdMakeModelSplit (ppd_make_and_mode
# HP PPDs give NickNames like:
# *NickName: "HP LaserJet 4 Plus v2013.111 Postscript (recommended)"
# Find the version number.
- v = model.find (" v")
+ modell = model.lower ()
+ v = modell.find (" v")
if v != -1 and (model[v + 2].isdigit () or
(model[v + 2] == '.' and
model[v + 3].isdigit ())):
# Truncate at that point.
model = model[:v]
+ modell = modell[:v]
for suffix in [" hpijs",
- " Foomatic/",
+ " foomatic/",
" - ",
" w/",
" (",
- " PostScript",
- " PS",
- " PS1",
- " PS2",
- " PS3",
- " PXL",
- " series"
+ " postscript",
+ " ps",
+ " ps1",
+ " ps2",
+ " ps3",
+ " pxl",
+ " series",
","]:
- s = model.find (suffix)
+ s = modell.find (suffix)
if s != -1:
model = model[:s]
+ modell = modell[:s]
if makel == "hp":
modelnames = {"dj": "DeskJet",
@@ -190,10 +193,10 @@ def ppdMakeModelSplit (ppd_make_and_mode
"color lj": "Color LaserJet",
"ps ": "PhotoSmart",
"hp ": ""}
- modell = model.lower ()
for (name, fullname) in modelnames.iteritems ():
if modell.startswith (name):
model = fullname + model[len (name):]
+ modell = model.lower ()
for mfr in [ "Apple", "Canon", "Epson", "Lexmark", "Oki" ]:
if makel == mfr.lower ():
diff -up system-config-printer-1.1.10/cupspk.py.a6cf4d3 system-config-printer-1.1.10/cupspk.py
--- system-config-printer-1.1.10/cupspk.py.a6cf4d3 2009-07-21 15:10:03.000000000 +0100
+++ system-config-printer-1.1.10/cupspk.py 2009-07-31 15:09:03.202962569 +0100
@@ -719,8 +719,8 @@ class Connection:
settings = {}
if result != None:
for i in result.keys():
- if type(i) == 'dbus.String':
- settings[i.encode()] = result[i].encode()
+ if type(i) == dbus.String:
+ settings[str(i)] = str(result[i])
else:
settings[i] = result[i]
diff -up system-config-printer-1.1.10/jobviewer.py.a6cf4d3 system-config-printer-1.1.10/jobviewer.py
--- system-config-printer-1.1.10/jobviewer.py.a6cf4d3 2009-07-21 15:10:03.000000000 +0100
+++ system-config-printer-1.1.10/jobviewer.py 2009-07-31 15:09:03.206962505 +0100
@@ -1351,8 +1351,8 @@ class JobViewer (GtkGUI, monitor.Watcher
elif jobid in self.active_jobs:
self.active_jobs.remove (jobid)
- self.update_status ()
self.update_job (jobid, jobdata)
+ self.update_status ()
jobdata = self.jobs[jobid]
# If the job has finished, let the user know.
@@ -1376,7 +1376,8 @@ class JobViewer (GtkGUI, monitor.Watcher
if (self.trayicon and
(eventname == 'job-stopped' or
(eventname == 'job-state-changed' and
- event['job-state'] == cups.IPP_JOB_STOPPED))and
+ event['job-state'] in [cups.IPP_JOB_STOPPED,
+ cups.IPP_JOB_PENDING])) and
not jobid in self.stopped_job_prompts):
# Why has the job stopped? It might be due to a job error
# of some sort, or it might be that the backend requires
@@ -1386,7 +1387,7 @@ class JobViewer (GtkGUI, monitor.Watcher
# update_job.
may_be_problem = True
jstate = jobdata['job-state']
- if (jstate in [cups.IPP_JOB_PENDING, cups.IPP_JOB_PROCESSING] or
+ if (jstate == cups.IPP_JOB_PROCESSING or
(jstate == cups.IPP_JOB_HELD and
jobdata['job-hold-until'] == 'auth-info-required')):
# update_job already dealt with this.
@@ -1421,7 +1422,8 @@ class JobViewer (GtkGUI, monitor.Watcher
elif notify_text.find ("filter errors") != -1:
message = _("There was a problem processing document `%s' "
"(job %d).") % (document, jobid)
- elif notify_text.find ("being paused") != -1:
+ elif (notify_text.find ("being paused") != -1 or
+ jstate != cups.IPP_JOB_STOPPED):
may_be_problem = False
else:
# Give up and use the provided message untranslated.
diff -up system-config-printer-1.1.10/Makefile.am.a6cf4d3 system-config-printer-1.1.10/Makefile.am
--- system-config-printer-1.1.10/Makefile.am.a6cf4d3 2009-07-22 15:11:41.000000000 +0100
+++ system-config-printer-1.1.10/Makefile.am 2009-07-31 15:09:03.189962811 +0100
@@ -25,10 +25,11 @@ EXPORT_MODULES= \
dist-hook: mk-ChangeLog
.PHONE: mk-ChangeLog
mk-ChangeLog:
- if test -d .git; then \
- $(top_srcdir)/gitlog-to-changelog --since=2009-05-01 \
- > $(distdir)/cl ;\
- mv -f $(distdir)/cl $(distdir)/ChangeLog ;\
+ if test -d .git; then \
+ $(top_srcdir)/gitlog-to-changelog \
+ --since=2009-05-01 -- --no-merges \
+ > $(distdir)/cl ; \
+ mv -f $(distdir)/cl $(distdir)/ChangeLog ; \
fi
config.py: config.py.in Makefile
@@ -152,14 +153,65 @@ bin_SCRIPTS=\
if UDEV_RULES
udevrulesdir=$(sysconfdir)/udev/rules.d
udevrules_DATA=udev/70-printers.rules
-udev_udev_configure_printer_SOURCES=\
- udev/udev-configure-printer.c
-udev_udev_configure_printer_LDADD=-lcups -ludev -lusb
+
+udev_printer_config_daemon_SOURCES= \
+ udev/printer-config-daemon.c \
+ udev/printer-config-main.c \
+ udev/printer-config.h
+udev_printer_config_daemon_DEPENDENCIES= \
+ udev/printer-config-server-bindings.h
+udev_printer_config_daemon_CPPFLAGS= \
+ $(DBUS_GLIB_CFLAGS)
+udev_printer_config_daemon_LDADD= \
+ $(DBUS_GLIB_LIBS) \
+ -lcups -ludev -lusb
+
+udev_udev_usb_printer_SOURCES= \
+ udev/udev-usb-printer.c
+udev_udev_usb_printer_DEPENDENCIES= \
+ udev/printer-config-client-bindings.h
+udev_udev_usb_printer_CPPFLAGS= \
+ $(DBUS_GLIB_CFLAGS)
+udev_udev_usb_printer_LDADD= \
+ $(DBUS_GLIB_LIBS) \
+ -ludev -lusb
udevhelperdir=/lib/udev
udevhelper_PROGRAMS=\
- udev/udev-configure-printer
-udevhelper_SCRIPTS=\
+ udev/udev-usb-printer
+
+udev/printer-config-server-bindings.h: udev/com.redhat.PrinterConfig.xml \
+ Makefile
+ dbus-binding-tool --prefix=printer_config_daemon \
+ --mode=glib-server \
+ --output=$@ $<
+
+udev/printer-config-client-bindings.h: udev/com.redhat.PrinterConfig.xml \
+ Makefile
+ dbus-binding-tool --prefix=printer_config_daemon \
+ --mode=glib-client \
+ --output=$@ $<
+
+BUILT_SOURCES= \
+ udev/printer-config-server-bindings.h \
+ udev/printer-config-client-bindings.h
+
+libexec_PROGRAMS=\
+ udev/printer-config-daemon
+libexec_SCRIPTS=\
udev/udev-add-printer
+
+dbusifdir = $(datadir)/dbus-1/interfaces
+dbusif_DATA = udev/com.redhat.PrinterConfig.xml
+
+servicedir = $(datadir)/dbus-1/system-services
+service_in_files = udev/com.redhat.PrinterConfig.service.in
+service_DATA = $(service_in_files:.service.in=.service)
+
+$(service_DATA): $(service_in_files) Makefile
+ @sed -e "s,\@libexecdir\@,$(libexecdir)," $< > $@
+
+dbusconfdir = $(sysconfdir)/dbus-1/system.d
+dbusconf_DATA = udev/com.redhat.PrinterConfig.conf
endif
man_MANS= \
@@ -238,7 +290,10 @@ EXTRA_DIST=\
intltool-merge.in \
intltool-update.in \
config.py.in \
- udev/70-printers.rules
+ udev/70-printers.rules \
+ udev/com.redhat.PrinterConfig.xml \
+ udev/com.redhat.PrinterConfig.service.in \
+ udev/com.redhat.PrinterConfig.conf
desktop_in_files = $(desktop_DATA:.desktop=.desktop.in)
@@ -293,12 +348,17 @@ test-ppd-module.sh:
TESTS = test-ppd-module.sh
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ udev/*.o
+
DISTCLEANFILES=*.pyc *.pyo *~ *.bak \
troubleshoot/*.pyc troubleshoot/*.pyo troubleshoot/*~ \
intltool-extract intltool-merge intltool-update \
*.desktop man/*.1 \
test-ppd-module.sh pickled-ppds \
- config.py
+ config.py \
+ $(service_DATA)
distclean-local:
rm -rf html
diff -up system-config-printer-1.1.10/PhysicalDevice.py.a6cf4d3 system-config-printer-1.1.10/PhysicalDevice.py
--- system-config-printer-1.1.10/PhysicalDevice.py.a6cf4d3 2009-07-21 15:10:03.000000000 +0100
+++ system-config-printer-1.1.10/PhysicalDevice.py 2009-07-31 15:09:03.189962811 +0100
@@ -41,10 +41,12 @@ class PhysicalDevice:
def _get_host_from_uri (self, uri):
(scheme, rest) = urllib.splittype (uri)
- if scheme == 'hp':
+ if scheme == 'hp' or scheme == 'hpfax':
if rest.startswith ("/net/"):
- (hostport, rest) = urllib.splithost (rest[5:])
- if hostport == None:
+ (rest, ipparam) = urllib.splitquery (rest[5:])
+ if ipparam != None and ipparam.startswith("ip="):
+ hostport = ipparam[3:]
+ else:
return None
else:
(hostport, rest) = urllib.splithost (rest)
diff -up system-config-printer-1.1.10/po/el.po.a6cf4d3 system-config-printer-1.1.10/po/el.po
--- system-config-printer-1.1.10/po/el.po.a6cf4d3 2009-07-22 13:25:20.000000000 +0100
+++ system-config-printer-1.1.10/po/el.po 2009-07-31 15:09:03.236086751 +0100
@@ -14,7 +14,7 @@ msgstr ""
"Project-Id-Version: el\n"
"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/bugzilla\n"
"POT-Creation-Date: 2009-07-22 13:20+0100\n"
-"PO-Revision-Date: 2009-05-13 01:34+0200\n"
+"PO-Revision-Date: 2009-07-27 00:15+0200\n"
"Last-Translator: nikosCharonitakis <nikosx@gmail.com>\n"
"Language-Team: Greek <fedora-trans-el@redhat.com>\n"
"MIME-Version: 1.0\n"
@@ -51,9 +51,7 @@ msgid "Browse Servers"
msgstr "Μετάβαση στον εξυπηρετητή"
#: ../AdvancedServerSettings.py:93
-msgid ""
-"Usually print servers broadcast their queues. Specify print servers below "
-"to periodically ask for queues instead."
+msgid "Usually print servers broadcast their queues. Specify print servers below to periodically ask for queues instead."
msgstr ""
#: ../AdvancedServerSettings.py:214
@@ -61,11 +59,13 @@ msgstr ""
msgid "Enter IP address"
msgstr "Ο εκτυπωτής προστέθηκε"
-#: ../authconn.py:35 ../glade/NewPrinterWindow.glade.h:106
+#: ../authconn.py:35
+#: ../glade/NewPrinterWindow.glade.h:106
msgid "Username:"
msgstr "Όνομα χρήστη:"
-#: ../authconn.py:36 ../glade/NewPrinterWindow.glade.h:75
+#: ../authconn.py:36
+#: ../glade/NewPrinterWindow.glade.h:75
msgid "Password:"
msgstr "Συνθηματικό:"
@@ -73,7 +73,8 @@ msgstr "Συνθηματικό:"
msgid "Domain:"
msgstr "Τομέας:"
-#: ../authconn.py:46 ../authconn.py:412
+#: ../authconn.py:46
+#: ../authconn.py:412
msgid "Authentication"
msgstr "Πιστοποίηση"
@@ -90,7 +91,8 @@ msgstr ""
msgid "You are not authorized to carry out the requested action."
msgstr "Δεν είστε εξουσιοδοτημένος/η να διεκπαιρώσετε αυτήν την εργασία."
-#: ../authconn.py:213 ../authconn.py:234
+#: ../authconn.py:213
+#: ../authconn.py:234
msgid "Operation canceled"
msgstr "Διαδικασία ακυρώθηκε"
@@ -99,11 +101,14 @@ msgstr "Διαδικασία ακυρώ<CF81>
msgid "CUPS server error (%s)"
msgstr "σφάλμα εξυπηρετητή CUPS (%s)"
-#: ../authconn.py:253 ../errordialogs.py:56 ../errordialogs.py:70
+#: ../authconn.py:253
+#: ../errordialogs.py:56
+#: ../errordialogs.py:70
msgid "CUPS server error"
msgstr "σφάλμα εξυπηρετητή CUPS"
-#: ../authconn.py:262 ../errordialogs.py:57
+#: ../authconn.py:262
+#: ../errordialogs.py:57
#: ../troubleshoot/PrintTestPage.py:417
#, python-format
msgid "There was an error during the CUPS operation: '%s'."
@@ -113,12 +118,16 @@ msgstr "Διαπιστώθηκε σφά<CF86>
msgid "Retry"
msgstr "Νέα προσπάθεια"
-#: ../authconn.py:386 ../authconn.py:388 ../errordialogs.py:65 ../pysmb.py:75
+#: ../authconn.py:386
+#: ../authconn.py:388
+#: ../errordialogs.py:65
+#: ../pysmb.py:75
#: ../pysmb.py:77
msgid "Not authorized"
msgstr "Χωρίς εξουσιοδότηση"
-#: ../authconn.py:389 ../pysmb.py:78
+#: ../authconn.py:389
+#: ../pysmb.py:78
msgid "The password may be incorrect."
msgstr "Το συνθηματικό μπορεί να μην είναι σωστό."
@@ -128,12 +137,8 @@ msgid "Authentication (%s)"
msgstr "Πιστοποίηση (%s)"
#: ../errordialogs.py:66
-msgid ""
-"The password may be incorrect, or the server may be configured to deny "
-"remote administration."
-msgstr ""
-"Το συνθηματικό μπορεί να είναι λανθασμένο ή ο εξυπηρετητής μπορεί να είναι "
-"ρυθμισμένος να αρνείται απομακρυσμένη διαχείριση."
+msgid "The password may be incorrect, or the server may be configured to deny remote administration."
+msgstr "Το συνθηματικό μπορεί να είναι λανθασμένο ή ο εξυπηρετητής μπορεί να είναι ρυθμισμένος να αρνείται απομακρυσμένη διαχείριση."
#: ../errordialogs.py:72
msgid "Bad request"
@@ -155,7 +160,8 @@ msgstr "Απαιτείται αναβά<CEB2>
msgid "Server error"
msgstr "Σφάλμα εξυπηρετητή"
-#: ../errordialogs.py:82 ../system-config-printer.py:1219
+#: ../errordialogs.py:82
+#: ../system-config-printer.py:1219
msgid "Not connected"
msgstr "Χωρίς σύνδεση"
@@ -177,7 +183,8 @@ msgstr "_Νέα Ομάδα"
msgid "_New Group from Selection"
msgstr ""
-#: ../GroupsPane.py:98 ../system-config-printer.py:411
+#: ../GroupsPane.py:98
+#: ../system-config-printer.py:411
msgid "_Rename"
msgstr "_Μετονομασία"
@@ -196,9 +203,7 @@ msgid "Are you sure you want to permanen
msgstr "Είστε σίγουρος/η ότι θέλετε να διαγραφεί μόνιμα το \"%s\";"
#: ../GroupsPane.py:296
-msgid ""
-"This will not delete any printer queues from your computer. To delete queues "
-"completely, you must delete them from the 'All Printers' group."
+msgid "This will not delete any printer queues from your computer. To delete queues completely, you must delete them from the 'All Printers' group."
msgstr ""
#: ../GroupsPane.py:318
@@ -229,7 +234,8 @@ msgstr "Εανεκτύπωση"
msgid "_Authenticate"
msgstr "_Πιστοποίηση"
-#: ../jobviewer.py:213 ../troubleshoot/PrintTestPage.py:82
+#: ../jobviewer.py:213
+#: ../troubleshoot/PrintTestPage.py:82
msgid "Job"
msgstr "Εργασία"
@@ -237,12 +243,15 @@ msgstr "Εργασία"
msgid "User"
msgstr "Χρήστης"
-#: ../jobviewer.py:215 ../troubleshoot/PrintTestPage.py:86
+#: ../jobviewer.py:215
+#: ../troubleshoot/PrintTestPage.py:86
msgid "Document"
msgstr "Έγγραφο"
-#: ../jobviewer.py:216 ../my-default-printer.py:153
-#: ../system-config-printer.py:384 ../system-config-printer.py:1367
+#: ../jobviewer.py:216
+#: ../my-default-printer.py:153
+#: ../system-config-printer.py:384
+#: ../system-config-printer.py:1367
#: ../troubleshoot/PrintTestPage.py:84
msgid "Printer"
msgstr "Εκτυπωτής"
@@ -255,7 +264,8 @@ msgstr "Μέγεθος"
msgid "Time submitted"
msgstr "Ώρα καταχώρησης"
-#: ../jobviewer.py:219 ../troubleshoot/PrintTestPage.py:87
+#: ../jobviewer.py:219
+#: ../troubleshoot/PrintTestPage.py:87
msgid "Status"
msgstr "Κατάσταση"
@@ -277,17 +287,26 @@ msgstr "όλες οι εργασίες"
msgid "Document Print Status (%s)"
msgstr "Κατάσταση εκτύπωσης εγγράφου (%s)"
-#: ../jobviewer.py:395 ../jobviewer.py:460 ../jobviewer.py:461
-#: ../jobviewer.py:512 ../jobviewer.py:629 ../jobviewer.py:756
-#: ../jobviewer.py:1232 ../jobviewer.py:1258 ../system-config-printer.py:2555
+#: ../jobviewer.py:395
+#: ../jobviewer.py:460
+#: ../jobviewer.py:461
+#: ../jobviewer.py:512
+#: ../jobviewer.py:629
+#: ../jobviewer.py:756
+#: ../jobviewer.py:1232
+#: ../jobviewer.py:1258
+#: ../system-config-printer.py:2555
#: ../glade/NewPrinterWindow.glade.h:104
#: ../troubleshoot/ChooseNetworkPrinter.py:101
#: ../troubleshoot/ChooseNetworkPrinter.py:102
#: ../troubleshoot/ChooseNetworkPrinter.py:105
#: ../troubleshoot/ChooseNetworkPrinter.py:106
-#: ../troubleshoot/ChoosePrinter.py:87 ../troubleshoot/ChoosePrinter.py:88
-#: ../troubleshoot/ChoosePrinter.py:91 ../troubleshoot/ChoosePrinter.py:92
-#: ../troubleshoot/DeviceListed.py:92 ../troubleshoot/DeviceListed.py:93
+#: ../troubleshoot/ChoosePrinter.py:87
+#: ../troubleshoot/ChoosePrinter.py:88
+#: ../troubleshoot/ChoosePrinter.py:91
+#: ../troubleshoot/ChoosePrinter.py:92
+#: ../troubleshoot/DeviceListed.py:92
+#: ../troubleshoot/DeviceListed.py:93
msgid "Unknown"
msgstr "Άγνωστο"
@@ -332,7 +351,8 @@ msgstr "%d εβδομάδες πριν"
msgid "Held for authentication"
msgstr "Αναμονή για πιστοποίηση"
-#: ../jobviewer.py:566 ../troubleshoot/PrintTestPage.py:42
+#: ../jobviewer.py:566
+#: ../troubleshoot/PrintTestPage.py:42
msgid "Held"
msgstr "Σε αναμονή"
@@ -366,33 +386,40 @@ msgstr ""
msgid "Held until weekend"
msgstr "Σε αναμονή μέχρι:"
-#: ../jobviewer.py:619 ../troubleshoot/PrintTestPage.py:41
+#: ../jobviewer.py:619
+#: ../troubleshoot/PrintTestPage.py:41
msgid "Pending"
msgstr "Σε αναμονή"
-#: ../jobviewer.py:620 ../system-config-printer.py:198
+#: ../jobviewer.py:620
+#: ../system-config-printer.py:198
#: ../troubleshoot/PrintTestPage.py:43
msgid "Processing"
msgstr "Γίνεται επεξεργασία"
-#: ../jobviewer.py:621 ../system-config-printer.py:200
+#: ../jobviewer.py:621
+#: ../system-config-printer.py:200
#: ../troubleshoot/PrintTestPage.py:44
msgid "Stopped"
msgstr "Σταματημένος"
-#: ../jobviewer.py:622 ../troubleshoot/PrintTestPage.py:45
+#: ../jobviewer.py:622
+#: ../troubleshoot/PrintTestPage.py:45
msgid "Canceled"
msgstr "Ακυρώθηκε"
-#: ../jobviewer.py:623 ../troubleshoot/PrintTestPage.py:46
+#: ../jobviewer.py:623
+#: ../troubleshoot/PrintTestPage.py:46
msgid "Aborted"
msgstr "Εγκαταλήφθηκε"
-#: ../jobviewer.py:624 ../troubleshoot/PrintTestPage.py:47
+#: ../jobviewer.py:624
+#: ../troubleshoot/PrintTestPage.py:47
msgid "Completed"
msgstr "Ολοκληρώθηκε"
-#: ../jobviewer.py:697 ../jobviewer.py:786
+#: ../jobviewer.py:697
+#: ../jobviewer.py:786
msgid "authenticating job"
msgstr "πιστοποίηση εργασίας"
@@ -460,7 +487,8 @@ msgstr "Υπήρξε σφάλμα κατ
msgid "There was a problem printing document `%s' (job %d): `%s'."
msgstr "Υπηήρξε σφάλμα κατά την εκτύπωση του εγγράφου `%s' (job %d): `%s'."
-#: ../jobviewer.py:1435 ../jobviewer.py:1451
+#: ../jobviewer.py:1435
+#: ../jobviewer.py:1451
msgid "Print Error"
msgstr "Σφάλμα εκτυπωτή"
@@ -473,19 +501,23 @@ msgstr ""
msgid "The printer called `%s' has been disabled."
msgstr "Ο εκτυπωτής `%s' ακυρώθηκε."
-#: ../my-default-printer.py:137 ../my-default-printer.desktop.in.h:1
+#: ../my-default-printer.py:137
+#: ../my-default-printer.desktop.in.h:1
msgid "Default Printer"
-msgstr "Προεπιλεγμένος εκτυπωτή"
+msgstr "Προεπιλεγμένος εκτυπωτής"
-#: ../my-default-printer.py:141 ../my-default-printer.py:177
+#: ../my-default-printer.py:141
+#: ../my-default-printer.py:177
msgid "_Use System Default"
msgstr "Εαναφορά στην προεπιλογή συστήματος"
-#: ../my-default-printer.py:142 ../my-default-printer.py:179
+#: ../my-default-printer.py:142
+#: ../my-default-printer.py:179
msgid "_Set Default"
msgstr "_Προεπιλογή"
-#: ../my-default-printer.py:158 ../system-config-printer.py:441
+#: ../my-default-printer.py:158
+#: ../system-config-printer.py:441
#: ../troubleshoot/ChooseNetworkPrinter.py:37
#: ../troubleshoot/ChoosePrinter.py:38
msgid "Location"
@@ -516,7 +548,8 @@ msgstr "Προεπιλεγμένος ε<>
msgid "Authenticated"
msgstr "Πιστοποιημένο"
-#: ../ppdippstr.py:50 ../system-config-printer.py:6133
+#: ../ppdippstr.py:50
+#: ../system-config-printer.py:6133
msgid "None"
msgstr "Κανένας"
@@ -752,7 +785,8 @@ msgstr "Αδρανής"
msgid "Busy"
msgstr "Απασχολημένος"
-#: ../system-config-printer.py:390 ../system-config-printer.py:1373
+#: ../system-config-printer.py:390
+#: ../system-config-printer.py:1373
#, fuzzy
msgid "Class"
msgstr "Νέα κλάση(*.ppd[.gz])"
@@ -793,8 +827,10 @@ msgstr "Ενεργό"
msgid "_Shared"
msgstr "_Κοινή χρήση"
-#: ../system-config-printer.py:439 ../troubleshoot/ChooseNetworkPrinter.py:35
-#: ../troubleshoot/ChoosePrinter.py:36 ../troubleshoot/DeviceListed.py:36
+#: ../system-config-printer.py:439
+#: ../troubleshoot/ChooseNetworkPrinter.py:35
+#: ../troubleshoot/ChoosePrinter.py:36
+#: ../troubleshoot/DeviceListed.py:36
msgid "Name"
msgstr "Όνομα"
@@ -815,11 +851,13 @@ msgstr "Μήνυμα"
msgid "Problems?"
msgstr "Προβλήματα;"
-#: ../system-config-printer.py:655 ../system-config-printer.py:657
+#: ../system-config-printer.py:655
+#: ../system-config-printer.py:657
msgid "Members of this class"
msgstr "Μέλη αυτής της κλάσης"
-#: ../system-config-printer.py:656 ../system-config-printer.py:658
+#: ../system-config-printer.py:656
+#: ../system-config-printer.py:658
msgid "Others"
msgstr "Άλλα"
@@ -843,7 +881,8 @@ msgstr "Μοντέλο"
msgid "Drivers"
msgstr "Οδηγοί"
-#: ../system-config-printer.py:664 ../glade/NewPrinterWindow.glade.h:54
+#: ../system-config-printer.py:664
+#: ../glade/NewPrinterWindow.glade.h:54
msgid "Downloadable Drivers"
msgstr ""
@@ -882,7 +921,8 @@ msgid "Connected to %s"
msgstr "Συνδέθηκε στο %s"
#. Update our copy of the printer's settings.
-#: ../system-config-printer.py:1257 ../system-config-printer.py:2045
+#: ../system-config-printer.py:1257
+#: ../system-config-printer.py:2045
msgid "obtaining queue details"
msgstr ""
@@ -899,12 +939,15 @@ msgstr "Νέος εκτυπωτής"
msgid "Network class (discovered)"
msgstr ""
-#: ../system-config-printer.py:1370 ../system-config-printer.py:5437
-#: ../system-config-printer.py:5507 ../system-config-printer.py:5509
+#: ../system-config-printer.py:1370
+#: ../system-config-printer.py:5437
+#: ../system-config-printer.py:5507
+#: ../system-config-printer.py:5509
msgid "Fax"
msgstr "Φαξ"
-#: ../system-config-printer.py:1376 ../system-config-printer.py:1382
+#: ../system-config-printer.py:1376
+#: ../system-config-printer.py:1382
#: ../troubleshoot/LocalOrRemote.py:30
msgid "Network printer"
msgstr "Δίκτυο εκτυπωτή"
@@ -914,7 +957,8 @@ msgstr "Δίκτυο εκτυπωτή"
msgid "Network print share"
msgstr "Νέος εκτυπωτής"
-#: ../system-config-printer.py:1508 ../glade/ConnectingDialog.glade.h:2
+#: ../system-config-printer.py:1508
+#: ../glade/ConnectingDialog.glade.h:2
#, no-c-format, python-format
msgid "<i>Opening connection to %s</i>"
msgstr ""
@@ -933,9 +977,12 @@ msgstr "Επιλογές εκτυπωτ<CF89>
msgid "modifying class %s"
msgstr ""
-#: ../system-config-printer.py:1929 ../system-config-printer.py:3038
-#: ../system-config-printer.py:3063 ../system-config-printer.py:6421
-#: ../system-config-printer.py:6433 ../system-config-printer.py:6455
+#: ../system-config-printer.py:1929
+#: ../system-config-printer.py:3038
+#: ../system-config-printer.py:3063
+#: ../system-config-printer.py:6421
+#: ../system-config-printer.py:6433
+#: ../system-config-printer.py:6455
#, fuzzy, python-format
msgid "modifying printer %s"
msgstr "Προσθήκη εκτυπωτή"
@@ -952,7 +999,8 @@ msgstr "Συνέχεια ούτως ή <20>
#. but we have never fetched the server settings to see whether
#. the server is publishing shared printers. Fetch the settings
#. now so that we can update the "not published" label if necessary.
-#: ../system-config-printer.py:2033 ../system-config-printer.py:3222
+#: ../system-config-printer.py:2033
+#: ../system-config-printer.py:3222
#, fuzzy
msgid "fetching server settings"
msgstr "<b>Βασικές επιλογές οδηγού</b>"
@@ -987,19 +1035,18 @@ msgstr "Επιλογή προεπιλε<CEBB>
msgid "printing test page"
msgstr "Εκτύπωση δοκιμαστικής σελίδας"
-#: ../system-config-printer.py:2185 ../system-config-printer.py:2220
+#: ../system-config-printer.py:2185
+#: ../system-config-printer.py:2220
msgid "Not possible"
msgstr "Δεν είναι εφικτό"
-#: ../system-config-printer.py:2186 ../system-config-printer.py:2221
-msgid ""
-"The remote server did not accept the print job, most likely because the "
-"printer is not shared."
-msgstr ""
-"Ο απομακρυσμένος διακομιστής δε δέχθηκε την εκτύπωση, κατά πάσα πιθανότητα ο "
-"εκτυπωτής δε διατίθεται για κοινή χρήση."
+#: ../system-config-printer.py:2186
+#: ../system-config-printer.py:2221
+msgid "The remote server did not accept the print job, most likely because the printer is not shared."
+msgstr "Ο απομακρυσμένος διακομιστής δε δέχθηκε την εκτύπωση, κατά πάσα πιθανότητα ο εκτυπωτής δε διατίθεται για κοινή χρήση."
-#: ../system-config-printer.py:2198 ../system-config-printer.py:2213
+#: ../system-config-printer.py:2198
+#: ../system-config-printer.py:2213
msgid "Submitted"
msgstr "Καταχωρήθηκε"
@@ -1020,7 +1067,8 @@ msgstr "Η δοκιμαστική σελ
#. The underlying cupsGetPPD2() function returned NULL without
#. setting an IPP error, so it'll be something like a failed
#. connection.
-#: ../system-config-printer.py:2288 ../system-config-printer.py:2384
+#: ../system-config-printer.py:2288
+#: ../system-config-printer.py:2384
msgid "Error"
msgstr "Σφάλμα"
@@ -1081,9 +1129,7 @@ msgid "Publish Shared Printers"
msgstr ""
#: ../system-config-printer.py:3090
-msgid ""
-"Shared printers are not available to other people unless the 'Publish shared "
-"printers' option is enabled in the server settings."
+msgid "Shared printers are not available to other people unless the 'Publish shared printers' option is enabled in the server settings."
msgstr ""
#: ../system-config-printer.py:3283
@@ -1103,12 +1149,8 @@ msgstr ""
#: ../system-config-printer.py:3309
#, fuzzy
-msgid ""
-"You may need to adjust the firewall to allow network printing to this "
-"computer."
-msgstr ""
-"Ίσως να χρειαστεί να ρυθμίσετε το τείχος προστασίας για να επιτραπεί στο "
-"δικτυακή εκτύπωση σε αυτόν τον υπολογιστή."
+msgid "You may need to adjust the firewall to allow network printing to this computer."
+msgstr "Ίσως να χρειαστεί να ρυθμίσετε το τείχος προστασίας για να επιτραπεί στο δικτυακή εκτύπωση σε αυτόν τον υπολογιστή."
#: ../system-config-printer.py:3639
msgid "Browsing not available (pysmbc not installed)"
@@ -1125,21 +1167,22 @@ msgstr "Σχόλιο"
#: ../system-config-printer.py:3665
#, fuzzy
-msgid ""
-"PostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *."
-"PPD.GZ)"
+msgid "PostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *.PPD.GZ)"
msgstr "Περιγραφή εκτυπωτή PostScript (*.ppd[.gz])"
#: ../system-config-printer.py:3674
msgid "All files (*)"
msgstr "Όλα τα αρχεία (*)"
-#: ../system-config-printer.py:3710 ../system-config-printer.py:5839
-#: ../system-config-printer.py:5877 ../applet.py:127
+#: ../system-config-printer.py:3710
+#: ../system-config-printer.py:5839
+#: ../system-config-printer.py:5877
+#: ../applet.py:127
msgid "Search"
msgstr "Αναζήτηση"
-#: ../system-config-printer.py:3734 ../system-config-printer.py:3758
+#: ../system-config-printer.py:3734
+#: ../system-config-printer.py:3758
#: ../glade/NewPrinterWindow.glade.h:72
msgid "New Printer"
msgstr "Νέος εκτυπωτής"
@@ -1156,9 +1199,12 @@ msgstr "Αλλαγή URI συσκευή<CF85>
msgid "Change Driver"
msgstr "Αλλαγή οδηγού"
-#: ../system-config-printer.py:3928 ../system-config-printer.py:4007
-#: ../system-config-printer.py:4321 ../system-config-printer.py:4519
-#: ../system-config-printer.py:5683 ../system-config-printer.py:5864
+#: ../system-config-printer.py:3928
+#: ../system-config-printer.py:4007
+#: ../system-config-printer.py:4321
+#: ../system-config-printer.py:4519
+#: ../system-config-printer.py:5683
+#: ../system-config-printer.py:5864
msgid "Searching"
msgstr "Εκτελείται αναζήτηση"
@@ -1166,11 +1212,13 @@ msgstr "Εκτελείται αναζή<CEB6>
msgid "Searching for downloadable drivers"
msgstr "Εκτελείται αναζήτηση για οδηγούς"
-#: ../system-config-printer.py:4008 ../system-config-printer.py:4322
+#: ../system-config-printer.py:4008
+#: ../system-config-printer.py:4322
msgid "Searching for drivers"
msgstr "Εκτελείται αναζήτηση για οδηγούς"
-#: ../system-config-printer.py:4520 ../system-config-printer.py:5684
+#: ../system-config-printer.py:4520
+#: ../system-config-printer.py:5684
msgid "Searching for printers"
msgstr "Εκτελείται αναζήτηση για εκτυπωτές"
@@ -1192,8 +1240,7 @@ msgstr ""
#: ../system-config-printer.py:4622
msgid ""
-"Installing the plugin is optional, it completes or enhances the "
-"functionality\n"
+"Installing the plugin is optional, it completes or enhances the functionality\n"
"of your printer. Without plugin at least basic operations work.\n"
"\n"
msgstr ""
@@ -1265,15 +1312,18 @@ msgstr "Αντιγραφή εκτυπω<CF80>
msgid "Set up without plugin"
msgstr ""
-#: ../system-config-printer.py:4671 ../troubleshoot/PrintTestPage.py:118
+#: ../system-config-printer.py:4671
+#: ../troubleshoot/PrintTestPage.py:118
msgid "Yes"
msgstr "Ναι"
-#: ../system-config-printer.py:4672 ../troubleshoot/PrintTestPage.py:119
+#: ../system-config-printer.py:4672
+#: ../troubleshoot/PrintTestPage.py:119
msgid "No"
msgstr "Όχι"
-#: ../system-config-printer.py:4841 ../system-config-printer.py:4845
+#: ../system-config-printer.py:4841
+#: ../system-config-printer.py:4845
msgid " (Current)"
msgstr " (Τρέχον)"
@@ -1303,20 +1353,21 @@ msgid "No Print Shares"
msgstr "Νέος εκτυπωτής"
#: ../system-config-printer.py:5047
-msgid ""
-"There were no print shares found. Please check that the Samba service is "
-"marked as trusted in your firewall configuration."
+msgid "There were no print shares found. Please check that the Samba service is marked as trusted in your firewall configuration."
msgstr ""
-#: ../system-config-printer.py:5308 ../system-config-printer.py:5371
+#: ../system-config-printer.py:5308
+#: ../system-config-printer.py:5371
msgid "Print Share Verified"
msgstr ""
-#: ../system-config-printer.py:5309 ../system-config-printer.py:5372
+#: ../system-config-printer.py:5309
+#: ../system-config-printer.py:5372
msgid "This print share is accessible."
msgstr "Ο κοινόχρηστος εκτυπωτής είναι προσβάσιμος."
-#: ../system-config-printer.py:5314 ../system-config-printer.py:5376
+#: ../system-config-printer.py:5314
+#: ../system-config-printer.py:5376
msgid "This print share is not accessible."
msgstr "Ο κοινόχρηστος εκτυπωτής δεν είναι προσβάσιμος."
@@ -1341,15 +1392,15 @@ msgstr "Σειριακή θύρα"
msgid "USB"
msgstr "USB"
-#: ../system-config-printer.py:5435 ../system-config-printer.py:5438
+#: ../system-config-printer.py:5435
+#: ../system-config-printer.py:5438
msgid "HP Linux Imaging and Printing (HPLIP)"
msgstr ""
#: ../system-config-printer.py:5440
#, fuzzy
msgid "Hardware Abstraction Layer (HAL)"
-msgstr ""
-"Τοπικός εκτυπωτής που ανιχνεύτηκε από το Hardware Abstraction Layer (HAL)."
+msgstr "Τοπικός εκτυπωτής που ανιχνεύτηκε από το Hardware Abstraction Layer (HAL)."
#: ../system-config-printer.py:5442
msgid "AppSocket/HP JetDirect"
@@ -1368,7 +1419,8 @@ msgstr "ουρά LPD/LPR"
msgid "Windows Printer via SAMBA"
msgstr ""
-#: ../system-config-printer.py:5458 ../glade/NewPrinterWindow.glade.h:64
+#: ../system-config-printer.py:5458
+#: ../glade/NewPrinterWindow.glade.h:64
msgid "IPP"
msgstr "IPP"
@@ -1385,25 +1437,16 @@ msgid "A printer connected to a USB port
msgstr "Ένας εκτυπωτής συνδεδεμένος στη θύρα USB."
#: ../system-config-printer.py:5546
-msgid ""
-"HPLIP software driving a printer, or the printer function of a multi-"
-"function device."
-msgstr ""
-"Λογισμικό HPLIP για οδήγηση εκτυπωτή ή η λειτουργία εκτύπωσης μιας πολυ-"
-"λειτουργικής συσκευής."
+msgid "HPLIP software driving a printer, or the printer function of a multi-function device."
+msgstr "Λογισμικό HPLIP για οδήγηση εκτυπωτή ή η λειτουργία εκτύπωσης μιας πολυ-λειτουργικής συσκευής."
#: ../system-config-printer.py:5549
-msgid ""
-"HPLIP software driving a fax machine, or the fax function of a multi-"
-"function device."
-msgstr ""
-"Λογισμικό HPLIP για οδήγηση φαξ ή η λειτουργία φαξμιας πολυ-λειτουργικής "
-"συσκευής."
+msgid "HPLIP software driving a fax machine, or the fax function of a multi-function device."
+msgstr "Λογισμικό HPLIP για οδήγηση φαξ ή η λειτουργία φαξμιας πολυ-λειτουργικής συσκευής."
#: ../system-config-printer.py:5552
msgid "Local printer detected by the Hardware Abstraction Layer (HAL)."
-msgstr ""
-"Τοπικός εκτυπωτής που ανιχνεύτηκε από το Hardware Abstraction Layer (HAL)."
+msgstr "Τοπικός εκτυπωτής που ανιχνεύτηκε από το Hardware Abstraction Layer (HAL)."
#: ../system-config-printer.py:5752
msgid "No printer was found at that address."
@@ -1453,7 +1496,8 @@ msgstr ""
msgid "No support contacts known"
msgstr ""
-#: ../system-config-printer.py:6181 ../system-config-printer.py:6194
+#: ../system-config-printer.py:6181
+#: ../system-config-printer.py:6194
msgid "Not specified."
msgstr "Μη ορισμένο"
@@ -1473,9 +1517,7 @@ msgstr "Ο οδηγός '%s' δε μπο
#: ../system-config-printer.py:6245
#, python-format
msgid "You will need to install the '%s' package in order to use this driver."
-msgstr ""
-"Θα χρειαστεί να εγκαταστήσετε το πακέτο '%s' για να χρησιμοποιήσετε αυτόν "
-"τον οδηγό."
+msgstr "Θα χρειαστεί να εγκαταστήσετε το πακέτο '%s' για να χρησιμοποιήσετε αυτόν τον οδηγό."
#. This error came from trying to open the PPD file.
#: ../system-config-printer.py:6252
@@ -1500,7 +1542,8 @@ msgstr "Αποτυχία λήψης PPD.
msgid "fetching PPD"
msgstr "Αλλαγή PPD"
-#: ../system-config-printer.py:6308 ../system-config-printer.py:6346
+#: ../system-config-printer.py:6308
+#: ../system-config-printer.py:6346
#, fuzzy
msgid "No Installable Options"
msgstr "Επιλογές για εγκατάσταση"
@@ -1518,11 +1561,11 @@ msgstr "Θα θέλατε να εκτυ<CF84>
msgid "Install driver"
msgstr "Εγκατάσταση οδηγού"
-#: ../system-config-printer.py:6621 ../troubleshoot/CheckPPDSanity.py:131
+#: ../system-config-printer.py:6621
+#: ../troubleshoot/CheckPPDSanity.py:131
#, python-format
msgid "Printer '%s' requires the %s package but it is not currently installed."
-msgstr ""
-"Ο εκτυπωτής '%s' απαιτεί το πακέτο %s, το οποίο όμως δεν είναι εγκατεστημένο."
+msgstr "Ο εκτυπωτής '%s' απαιτεί το πακέτο %s, το οποίο όμως δεν είναι εγκατεστημένο."
#: ../system-config-printer.py:6637
msgid "Missing driver"
@@ -1530,13 +1573,8 @@ msgstr "Λείπει οδηγός"
#: ../system-config-printer.py:6638
#, python-format
-msgid ""
-"Printer '%s' requires the '%s' program but it is not currently installed. "
-"Please install it before using this printer."
-msgstr ""
-"Ο εκτυπωτής '%s' απαιτεί το πρόγραμμα %s, το οποίο όμως δεν είναι "
-"εγκατεστημένο. Παρακαλούμε εγκαταστήστε το πριν χρησιμοποιήσετε αυτόν τον "
-"εκτυπωτή."
+msgid "Printer '%s' requires the '%s' program but it is not currently installed. Please install it before using this printer."
+msgstr "Ο εκτυπωτής '%s' απαιτεί το πρόγραμμα %s, το οποίο όμως δεν είναι εγκατεστημένο. Παρακαλούμε εγκαταστήστε το πριν χρησιμοποιήσετε αυτόν τον εκτυπωτή."
#: ../glade/AboutDialog.glade.h:1
#, fuzzy
@@ -1550,19 +1588,11 @@ msgstr "Copyright 2006, 2007 Red Hat, In
#: ../glade/AboutDialog.glade.h:3
msgid ""
-"This program is free software; you can redistribute it and/or modify it "
-"under the terms of the GNU General Public License as published by the Free "
-"Software Foundation; either version 2 of the License, or (at your option) "
-"any later version.\n"
+"This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\n"
"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
-"more details.\n"
+"This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n"
"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program; if not, write to the Free Software Foundation, Inc., 675 Mass "
-"Ave, Cambridge, MA 02139, USA."
+"You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA."
msgstr ""
#: ../glade/AboutDialog.glade.h:8
@@ -1619,7 +1649,8 @@ msgstr "_Εργασία"
msgid "_Refresh"
msgstr "_Ανανέωση"
-#: ../glade/JobsWindow.glade.h:5 ../glade/PrintersWindow.glade.h:17
+#: ../glade/JobsWindow.glade.h:5
+#: ../glade/PrintersWindow.glade.h:17
msgid "_View"
msgstr "_Προβολή"
@@ -1823,7 +1854,8 @@ msgstr ""
msgid "Description:"
msgstr "Περιγραφή:"
-#: ../glade/NewPrinterWindow.glade.h:51 ../troubleshoot/DeviceListed.py:40
+#: ../glade/NewPrinterWindow.glade.h:51
+#: ../troubleshoot/DeviceListed.py:40
msgid "Device URI"
msgstr "URI Συσκευής"
@@ -1848,8 +1880,7 @@ msgid "Flow Control"
msgstr "Έλεγχος ροής"
#: ../glade/NewPrinterWindow.glade.h:58
-msgid ""
-"For the printer you have selected there are drivers available for download."
+msgid "For the printer you have selected there are drivers available for download."
msgstr ""
#: ../glade/NewPrinterWindow.glade.h:59
@@ -1923,14 +1954,8 @@ msgstr "Αριθμός θύρας:"
#: ../glade/NewPrinterWindow.glade.h:79
#, fuzzy
-msgid ""
-"PostScript Printer Description (PPD) files can often be found on the driver "
-"disk that comes with the printer. For PostScript printers they are often "
-"part of the Windows<sup>®</sup> driver."
-msgstr ""
-"Αρχεία PostScript Printer Description (PPD) μπορούν να βρεθούν συχνά στο "
-"δίσκο που έρχεται μαζί με τον εκτυπωτή. Για εκτυπωτές PostScript αυτά είναι "
-"συχνά κομμάτι του οδηγού Windows<sup>®</sup>."
+msgid "PostScript Printer Description (PPD) files can often be found on the driver disk that comes with the printer. For PostScript printers they are often part of the Windows<sup>®</sup> driver."
+msgstr "Αρχεία PostScript Printer Description (PPD) μπορούν να βρεθούν συχνά στο δίσκο που έρχεται μαζί με τον εκτυπωτή. Για εκτυπωτές PostScript αυτά είναι συχνά κομμάτι του οδηγού Windows<sup>®</sup>."
#: ../glade/NewPrinterWindow.glade.h:80
msgid "Printer model:"
@@ -2003,50 +2028,24 @@ msgid "Text:"
msgstr "Κείμενο:"
#: ../glade/NewPrinterWindow.glade.h:97
-msgid ""
-"The foomatic printer database contains various manufacturer provided "
-"PostScript Printer Description (PPD) files and also can generate PPD files "
-"for a large number of (non PostScript) printers. But in general manufacturer "
-"provided PPD files provide better access to the specific features of the "
-"printer."
-msgstr ""
-"Η βάση δεδομένων εκτυπωτή foomatic περιέχει αρχεία Περιγραφής Εκτυπωτή "
-"PostScript (PPD) που παρέχουνται από διάφορους κατασκευαστές και επίσης "
-"μπορούν να δημιουργήσουν αρχεία PPD για ένα μεγάλο αριθμό εκτυπωτών (όχι "
-"PostScript). Αλλά γενικά, αρχεία PPD που προσφέρονται από κατασκευαστές "
-"παρέχουν καλύτερη πρόσβαση στις συγκεκριμένες ιδιότητες του εκτυπωτή."
+msgid "The foomatic printer database contains various manufacturer provided PostScript Printer Description (PPD) files and also can generate PPD files for a large number of (non PostScript) printers. But in general manufacturer provided PPD files provide better access to the specific features of the printer."
+msgstr "Η βάση δεδομένων εκτυπωτή foomatic περιέχει αρχεία Περιγραφής Εκτυπωτή PostScript (PPD) που παρέχουνται από διάφορους κατασκευαστές και επίσης μπορούν να δημιουργήσουν αρχεία PPD για ένα μεγάλο αριθμό εκτυπωτών (όχι PostScript). Αλλά γενικά, αρχεία PPD που προσφέρονται από κατασκευαστές παρέχουν καλύτερη πρόσβαση στις συγκεκριμένες ιδιότητες του εκτυπωτή."
#: ../glade/NewPrinterWindow.glade.h:98
-msgid ""
-"These drivers do not come from your operating system supplier and will not "
-"be covered by their commercial support. See the support and license terms "
-"of the driver's supplier."
+msgid "These drivers do not come from your operating system supplier and will not be covered by their commercial support. See the support and license terms of the driver's supplier."
msgstr ""
#: ../glade/NewPrinterWindow.glade.h:99
-msgid ""
-"This driver supports additional hardware that may be installed in the "
-"printer."
+msgid "This driver supports additional hardware that may be installed in the printer."
msgstr ""
#: ../glade/NewPrinterWindow.glade.h:100
-msgid ""
-"This is done by assuming that options with the same name do have the same "
-"meaning. Settings of options that are not present in the new PPD will be "
-"lost and options only present in the new PPD will be set to default."
-msgstr ""
-"Αυτό πραγματοποιήθηκε δεχόμενοι ότι οι επιλογές με το ίδιο όνομα έχουν "
-"ουσιαστικά και την ίδια ερμηνεία. Ρυθμίσεις επιλογών που δεν υπάρχουν στο "
-"νέο PPD θα χαθούν και μόνο επιλογές που βρίσκονται στο νέο PPD θα τεθούν ως "
-"προεπιλογή."
+msgid "This is done by assuming that options with the same name do have the same meaning. Settings of options that are not present in the new PPD will be lost and options only present in the new PPD will be set to default."
+msgstr "Αυτό πραγματοποιήθηκε δεχόμενοι ότι οι επιλογές με το ίδιο όνομα έχουν ουσιαστικά και την ίδια ερμηνεία. Ρυθμίσεις επιλογών που δεν υπάρχουν στο νέο PPD θα χαθούν και μόνο επιλογές που βρίσκονται στο νέο PPD θα τεθούν ως προεπιλογή."
#: ../glade/NewPrinterWindow.glade.h:101
-msgid ""
-"This way all current option settings will be lost. The default settings of "
-"the new PPD will be used. "
-msgstr ""
-"Με αυτόν τον τρόπο οι τρέχουσες επιλογές ρυθμίσεων θα χαθούν. Οι "
-"προεπιλεγμένες ρυθμίσεις για το νέο PPD θα χρησιμοποιηθούν. "
+msgid "This way all current option settings will be lost. The default settings of the new PPD will be used. "
+msgstr "Με αυτόν τον τρόπο οι τρέχουσες επιλογές ρυθμίσεων θα χαθούν. Οι προεπιλεγμένες ρυθμίσεις για το νέο PPD θα χρησιμοποιηθούν. "
#: ../glade/NewPrinterWindow.glade.h:102
msgid "Try to copy the option settings over from the old PPD. "
@@ -2061,9 +2060,7 @@ msgid "Use the new PPD (Postscript Print
msgstr "Χρήση των νέων PPD (Περιγραφές Εκτυπωτών Postscript) όπως είναι."
#: ../glade/NewPrinterWindow.glade.h:107
-msgid ""
-"With this choice no driver download will be performed. In the next steps a "
-"locally installed driver will be selected."
+msgid "With this choice no driver download will be performed. In the next steps a locally installed driver will be selected."
msgstr ""
#: ../glade/NewPrinterWindow.glade.h:108
@@ -2479,14 +2476,8 @@ msgid "Sides:"
msgstr "Πλευρές:"
#: ../glade/PrinterPropertiesDialog.glade.h:121
-msgid ""
-"Specify the default job options for this printer. Jobs arriving at this "
-"print server will have these options added if they are not already set by "
-"the application."
-msgstr ""
-"Ορίστε τις προεπιλεγμένες ρυθμίσεις εργασιών για αυτόν τον εκτυπωτή. Οι "
-"εργασίες που θα φτάνουν σε αυτόν τον εξυπηρετητή εκτύπωσης θα διαθέτουν "
-"αυτές τις επιλογές αν δεν έχουν ήδη οριστεί από την εφαρμογή."
+msgid "Specify the default job options for this printer. Jobs arriving at this print server will have these options added if they are not already set by the application."
+msgstr "Ορίστε τις προεπιλεγμένες ρυθμίσεις εργασιών για αυτόν τον εκτυπωτή. Οι εργασίες που θα φτάνουν σε αυτόν τον εξυπηρετητή εκτύπωσης θα διαθέτουν αυτές τις επιλογές αν δεν έχουν ήδη οριστεί από την εφαρμογή."
#: ../glade/PrinterPropertiesDialog.glade.h:122
msgid "Starting Banner:"
@@ -2499,9 +2490,7 @@ msgstr "Νέο όνομα εκτυπωτ
#: ../glade/PrinterPropertiesDialog.glade.h:124
msgid "To add a new option, enter its name in the box below and click to add."
-msgstr ""
-"Για να προσθέσετε μια νέα επιλογή, εισάγετε το όνομα της στο παρακάτω "
-"πλαίσιο και κάντε κλικ για προσθήκη."
+msgstr "Για να προσθέσετε μια νέα επιλογή, εισάγετε το όνομα της στο παρακάτω πλαίσιο και κάντε κλικ για προσθήκη."
#: ../glade/PrinterPropertiesDialog.glade.h:125
msgid "Top margin:"
@@ -2607,9 +2596,7 @@ msgstr "Επίτρεψη απομακρ<CEBA>
#: ../glade/ServerSettingsDialog.glade.h:3
#, fuzzy
msgid "Allow _users to cancel any job (not just their own)"
-msgstr ""
-"Να επιτρέπεται οι χρήστες να ακυρώνουν οποιαδήποτε εργασία (όχι μόνο τις "
-"δικές τους)"
+msgstr "Να επιτρέπεται οι χρήστες να ακυρώνουν οποιαδήποτε εργασία (όχι μόνο τις δικές τους)"
#: ../glade/ServerSettingsDialog.glade.h:4
#, fuzzy
@@ -2632,8 +2619,7 @@ msgstr ""
#: ../glade/ServerSettingsDialog.glade.h:8
#, fuzzy
msgid "_Publish shared printers connected to this system"
-msgstr ""
-"Κοινή χρήση δημοσιευμένων εκτυπωτών που είναι συνδεδεμένοι σε αυτό το σύστημα"
+msgstr "Κοινή χρήση δημοσιευμένων εκτυπωτών που είναι συνδεδεμένοι σε αυτό το σύστημα"
#: ../glade/ServerSettingsDialog.glade.h:9
#, fuzzy
@@ -2756,7 +2742,8 @@ msgstr "Χωρίς σύνδεση;"
msgid "Printer '%s' may not be connected."
msgstr "Ο εκτυπωτής '%s' μπορεί να μην είναι συνδεδεμένος."
-#: ../statereason.py:105 ../statereason.py:121
+#: ../statereason.py:105
+#: ../statereason.py:121
msgid "Printer error"
msgstr "Σφάλμα εκτυπωτή"
@@ -2778,11 +2765,13 @@ msgstr "Προειδοποίηση εκ<CEB5>
msgid "Printer '%s': '%s'."
msgstr "Εκτυπωτής '%s':·'%s'."
-#: ../timedops.py:101 ../timedops.py:169
+#: ../timedops.py:101
+#: ../timedops.py:169
msgid "Please wait"
msgstr "Παρακαλούμε περιμένετε"
-#: ../timedops.py:107 ../timedops.py:176
+#: ../timedops.py:107
+#: ../timedops.py:176
msgid "Gathering information"
msgstr "Συγκέντρωση πληροφοριών"
@@ -2796,9 +2785,7 @@ msgid "Printing troubleshooter"
msgstr ""
#: ../troubleshoot/base.py:33
-msgid ""
-"To start this tool, select System->Administration->Printing from the main "
-"menu."
+msgid "To start this tool, select System->Administration->Printing from the main menu."
msgstr ""
#: ../troubleshoot/CheckLocalServerPublishing.py:28
@@ -2806,18 +2793,15 @@ msgid "Server Not Exporting Printers"
msgstr ""
#: ../troubleshoot/CheckLocalServerPublishing.py:29
-msgid ""
-"Although one or more printers are marked as being shared, this print server "
-"is not exporting shared printers to the network."
+msgid "Although one or more printers are marked as being shared, this print server is not exporting shared printers to the network."
msgstr ""
#: ../troubleshoot/CheckLocalServerPublishing.py:33
-msgid ""
-"Enable the 'Publish shared printers connected to this system' option in the "
-"server settings using the printing administration tool."
+msgid "Enable the 'Publish shared printers connected to this system' option in the server settings using the printing administration tool."
msgstr ""
-#: ../troubleshoot/CheckPPDSanity.py:44 ../applet.py:184
+#: ../troubleshoot/CheckPPDSanity.py:44
+#: ../applet.py:184
msgid "Install"
msgstr "Εγκατάσταση"
@@ -2827,9 +2811,7 @@ msgstr "Άκυρο αρχείο PPD"
#: ../troubleshoot/CheckPPDSanity.py:106
#, python-format
-msgid ""
-"The PPD file for printer '%s' does not conform to the specification. "
-"Possible reason follows:"
+msgid "The PPD file for printer '%s' does not conform to the specification. Possible reason follows:"
msgstr ""
#. Perhaps cupstestppd is not in the path.
@@ -2844,28 +2826,26 @@ msgstr "Λείπει οδηγός εκτ
#: ../troubleshoot/CheckPPDSanity.py:136
#, fuzzy, python-format
-msgid ""
-"Printer '%s' requires the '%s' program but it is not currently installed."
-msgstr ""
-"Ο εκτυπωτής '%s' απαιτεί το πακέτο %s, το οποίο όμως δεν είναι εγκατεστημένο."
+msgid "Printer '%s' requires the '%s' program but it is not currently installed."
+msgstr "Ο εκτυπωτής '%s' απαιτεί το πακέτο %s, το οποίο όμως δεν είναι εγκατεστημένο."
#: ../troubleshoot/ChooseNetworkPrinter.py:29
msgid "Choose Network Printer"
msgstr "Επιλογή δικτυακού εκτυπωτή"
#: ../troubleshoot/ChooseNetworkPrinter.py:30
-msgid ""
-"Please select the network printer you are trying to use from the list below. "
-"If it does not appear in the list, select 'Not listed'."
+msgid "Please select the network printer you are trying to use from the list below. If it does not appear in the list, select 'Not listed'."
msgstr ""
#: ../troubleshoot/ChooseNetworkPrinter.py:39
-#: ../troubleshoot/ChoosePrinter.py:40 ../troubleshoot/DeviceListed.py:38
+#: ../troubleshoot/ChoosePrinter.py:40
+#: ../troubleshoot/DeviceListed.py:38
msgid "Information"
msgstr "Πληροφορία"
#: ../troubleshoot/ChooseNetworkPrinter.py:75
-#: ../troubleshoot/ChoosePrinter.py:64 ../troubleshoot/DeviceListed.py:70
+#: ../troubleshoot/ChoosePrinter.py:64
+#: ../troubleshoot/DeviceListed.py:70
#, fuzzy
msgid "Not listed"
msgstr "Χωρίς σύνδεση"
@@ -2875,9 +2855,7 @@ msgid "Choose Printer"
msgstr "Επιλογή εκτυπωτή"
#: ../troubleshoot/ChoosePrinter.py:31
-msgid ""
-"Please select the printer you are trying to use from the list below. If it "
-"does not appear in the list, select 'Not listed'."
+msgid "Please select the printer you are trying to use from the list below. If it does not appear in the list, select 'Not listed'."
msgstr ""
#: ../troubleshoot/DeviceListed.py:30
@@ -2885,9 +2863,7 @@ msgid "Choose Device"
msgstr "Επιλογή συσκευής"
#: ../troubleshoot/DeviceListed.py:31
-msgid ""
-"Please select the device you want to use from the list below. If it does not "
-"appear in the list, select 'Not listed'."
+msgid "Please select the device you want to use from the list below. If it does not appear in the list, select 'Not listed'."
msgstr ""
#: ../troubleshoot/ErrorLogCheckpoint.py:31
@@ -2895,9 +2871,7 @@ msgid "Debugging"
msgstr "Αποσφαλμάτωση"
#: ../troubleshoot/ErrorLogCheckpoint.py:32
-msgid ""
-"I would like to enable debugging output from the CUPS scheduler. This may "
-"cause the scheduler to restart. Click the button below to enable debugging."
+msgid "I would like to enable debugging output from the CUPS scheduler. This may cause the scheduler to restart. Click the button below to enable debugging."
msgstr ""
#: ../troubleshoot/ErrorLogCheckpoint.py:36
@@ -2925,9 +2899,7 @@ msgid "Incorrect Page Size"
msgstr "Εσφαλμένο μέγεθος σελίδας"
#: ../troubleshoot/Locale.py:30
-msgid ""
-"The page size for the print job was not the printer's default page size. If "
-"this is not intentional it may cause alignment problems."
+msgid "The page size for the print job was not the printer's default page size. If this is not intentional it may cause alignment problems."
msgstr ""
#: ../troubleshoot/Locale.py:43
@@ -2987,13 +2959,8 @@ msgid "Test Page"
msgstr "Δοκιμαστική σελίδα"
#: ../troubleshoot/PrintTestPage.py:63
-msgid ""
-"Now print a test page. If you are having problems printing a specific "
-"document, print that document now and mark the print job below."
-msgstr ""
-"Τώρα εκτυπώστε μια δοκιμαστική σελίδα. Εάν έχετε προβλήματα με την εκτύπωση "
-"συγκεκριμένου εγγράφου, εκτυπώστε το έγγραφο αυτό τώρα και σημειώστε την "
-"εργασία εκτύπωσης παρακάτω."
+msgid "Now print a test page. If you are having problems printing a specific document, print that document now and mark the print job below."
+msgstr "Τώρα εκτυπώστε μια δοκιμαστική σελίδα. Εάν έχετε προβλήματα με την εκτύπωση συγκεκριμένου εγγράφου, εκτυπώστε το έγγραφο αυτό τώρα και σημειώστε την εργασία εκτύπωσης παρακάτω."
#: ../troubleshoot/PrintTestPage.py:75
msgid "Cancel All Jobs"
@@ -3026,9 +2993,7 @@ msgstr "Η πόρτα είναι ανο<CEBD>
#: ../troubleshoot/QueueNotEnabled.py:58
#, fuzzy
msgid "This may be due to the printer being disconnected or switched off."
-msgstr ""
-"Αυτό μπορεί να οφείλεται στο ότι ο εκτυπωτής είναι με συνδεδεμένος ή "
-"απενεργοποιημένος."
+msgstr "Αυτό μπορεί να οφείλεται στο ότι ο εκτυπωτής είναι με συνδεδεμένος ή απενεργοποιημένος."
#: ../troubleshoot/QueueNotEnabled.py:62
msgid "Queue Not Enabled"
@@ -3040,9 +3005,7 @@ msgid "The queue '%s' is not enabled."
msgstr "Ο κοινόχρηστος εκτυπωτής δεν είναι προσβάσιμος."
#: ../troubleshoot/QueueNotEnabled.py:71
-msgid ""
-"To enable it, select the 'Enabled' checkbox in the 'Policies' tab for the "
-"printer in the printer administration tool."
+msgid "To enable it, select the 'Enabled' checkbox in the 'Policies' tab for the printer in the printer administration tool."
msgstr ""
#: ../troubleshoot/QueueRejectingJobs.py:31
@@ -3055,9 +3018,7 @@ msgid "The queue '%s' is rejecting jobs.
msgstr ""
#: ../troubleshoot/QueueRejectingJobs.py:70
-msgid ""
-"To make the queue accept jobs, select the 'Accepting Jobs' checkbox in the "
-"'Policies' tab for the printer in the printer administration tool."
+msgid "To make the queue accept jobs, select the 'Accepting Jobs' checkbox in the 'Policies' tab for the printer in the printer administration tool."
msgstr ""
#: ../troubleshoot/RemoteAddress.py:26
@@ -3065,9 +3026,7 @@ msgid "Remote Address"
msgstr "Απομακρυσμένη διεύθυνση"
#: ../troubleshoot/RemoteAddress.py:27
-msgid ""
-"Please enter as many details as you can about the network address of this "
-"printer."
+msgid "Please enter as many details as you can about the network address of this printer."
msgstr ""
#: ../troubleshoot/RemoteAddress.py:35
@@ -3084,10 +3043,7 @@ msgid "CUPS Service Stopped"
msgstr ""
#: ../troubleshoot/SchedulerNotRunning.py:29
-msgid ""
-"The CUPS print spooler does not appear to be running. To correct this, "
-"choose System->Administration->Services from the main menu and look for the "
-"'cups' service."
+msgid "The CUPS print spooler does not appear to be running. To correct this, choose System->Administration->Services from the main menu and look for the 'cups' service."
msgstr ""
#: ../troubleshoot/ServerFirewalled.py:26
@@ -3101,9 +3057,7 @@ msgstr "Διαπιστώθηκε σφά<CF86>
#: ../troubleshoot/ServerFirewalled.py:42
#, python-format
-msgid ""
-"Please check to see if a firewall or router configuration is blocking TCP "
-"port %d on server '%s'."
+msgid "Please check to see if a firewall or router configuration is blocking TCP port %d on server '%s'."
msgstr ""
#: ../troubleshoot/Shrug.py:26
@@ -3111,12 +3065,8 @@ msgid "Sorry!"
msgstr "Συγνώμη!"
#: ../troubleshoot/Shrug.py:27
-msgid ""
-"I have not been able to work out what the problem is, but I have collected "
-"some useful information to put in a bug report."
-msgstr ""
-"Δεν κατάφερα να αντιληφθώ ποιό είναι το πρόβλημα, αλλά έχω συλλέξει χρήσιμες "
-"πληροφορίες να προσθέσω σε μια αναφορά σφαλμάτων"
+msgid "I have not been able to work out what the problem is, but I have collected some useful information to put in a bug report."
+msgstr "Δεν κατάφερα να αντιληφθώ ποιό είναι το πρόβλημα, αλλά έχω συλλέξει χρήσιμες πληροφορίες να προσθέσω σε μια αναφορά σφαλμάτων"
#: ../troubleshoot/Shrug.py:32
msgid "Diagnostic Output (Advanced)"
@@ -3127,9 +3077,7 @@ msgid "Trouble-shooting Printing"
msgstr ""
#: ../troubleshoot/Welcome.py:45
-msgid ""
-"In the next few screens I will ask you some questions about your problem "
-"with printing. Based on your answers I will try to suggest a solution."
+msgid "In the next few screens I will ask you some questions about your problem with printing. Based on your answers I will try to suggest a solution."
msgstr ""
#: ../troubleshoot/Welcome.py:49
@@ -3138,7 +3086,8 @@ msgstr "Πατήστε 'Εκκίνηση
#. name is a URI, no queue was generated, because no suitable
#. driver was found
-#: ../applet.py:113 ../applet.py:173
+#: ../applet.py:113
+#: ../applet.py:173
msgid "Missing printer driver"
msgstr "Λείπει οδηγός εκτυπωτή"
@@ -3170,7 +3119,8 @@ msgstr ""
msgid "`%s' is ready for printing."
msgstr "Ο εκτυπωτής `%s' είναι έτοιμος για εκτύπωση."
-#: ../applet.py:203 ../applet.py:216
+#: ../applet.py:203
+#: ../applet.py:216
msgid "Print test page"
msgstr "Εκτύπωση δοκιμαστικής σελίδας"
@@ -3213,7 +3163,6 @@ msgstr "Επιλογή προεπιλε<CEBB>
#, fuzzy
#~ msgid "It is not possible to obtain a list of queues from '%s'."
#~ msgstr "Διαπιστώθηκε σφάλμα κατά τη λειτουργία του εξυπηρετητή CUPS."
-
#~ msgid "Job %d completed"
#~ msgstr "%d ολοκληρώθηκε"
@@ -3243,28 +3192,20 @@ msgstr "Επιλογή προεπιλε<CEBB>
#, fuzzy
#~ msgid "Authenticate"
#~ msgstr "<b>Πιστοποίηση</b>"
-
#~ msgid "Adding"
#~ msgstr "Προσθήκη"
-
#~ msgid "Adding printer"
#~ msgstr "Προσθήκη εκτυπωτή"
-
#~ msgid "Show _printer status"
#~ msgstr "Εμφάνιση κατάστασης _εκτυπωτή"
-
#~ msgid "Printer status"
#~ msgstr "Κατάσταση εκτυπωτή"
-
#~ msgid "1 hour and 1 minute ago"
#~ msgstr "1 ώρα και 1 λεπτό πριν"
-
#~ msgid "1 hour and %d minutes ago"
#~ msgstr "1 ώρα και %d λεπτά πριν"
-
#~ msgid "%d hours and 1 minute ago"
#~ msgstr "%d ώρες και 1 λεπτό πριν"
-
#~ msgid "%d hours and %d minutes ago"
#~ msgstr "%d ώρες και %d λεπτά πριν"
@@ -3275,14 +3216,12 @@ msgstr "Επιλογή προεπιλε<CEBB>
#, fuzzy
#~ msgid "<b>Recommended Driver</b>"
#~ msgstr "<b>Προεπιλεγμένος εκτυπωτής</b>"
-
#~ msgid ""
#~ "Connecting to server:\n"
#~ "%s"
#~ msgstr ""
#~ "Σύνδεση στην εξυπηρετητή:\n"
#~ "%s"
-
#~ msgid ""
#~ "Connecting to Server:\n"
#~ "%s\n"
@@ -3297,10 +3236,8 @@ msgstr "Επιλογή προεπιλε<CEBB>
#, fuzzy
#~ msgid "<b>Installed Options</b>"
#~ msgstr "<b>Επιλογές εικόνας</b>"
-
#~ msgid "<b>Printers to be members of this Class</b>"
#~ msgstr "<b>Εκτυπωτές που θα είναι μέλη αυτής της κλάσης</b>"
-
#~ msgid "<b>Select Connection</b>"
#~ msgstr "<b>Επιλογή σύνδεσης</b>"
@@ -3311,7 +3248,6 @@ msgstr "Επιλογή προεπιλε<CEBB>
#, fuzzy
#~ msgid "_Enabled"
#~ msgstr "Ενεργό"
-
#~ msgid ""
#~ "<span weight=\"bold\" size=\"larger\">Apply changes?</span>\n"
#~ "\n"
@@ -3320,10 +3256,8 @@ msgstr "Επιλογή προεπιλε<CEBB>
#~ "<span weight=\"bold\" size=\"larger\">Εφαρμογή αλλαγών;</span>\n"
#~ "\n"
#~ "Οποιεσδήποτε αλλαγές έγιναν θα χαθούν εκτός κι αν τις εφαρμόσετε."
-
#~ msgid "_Do not apply"
#~ msgstr "_Χωρίς εφαρμογή"
-
#~ msgid "Verified"
#~ msgstr "Επαληθεύτηκε"
@@ -3342,17 +3276,14 @@ msgstr "Επιλογή προεπιλε<CEBB>
#, fuzzy
#~ msgid "Local printer"
#~ msgstr "Τοπικος εκτυπωτής"
-
#~ msgid "New Clas_s"
#~ msgstr "Νέα κλά_ση"
-
#~ msgid "New _Printer"
#~ msgstr "_Νέος εκτυπωτής"
#, fuzzy
#~ msgid "_Disable"
#~ msgstr "_Αρχείο"
-
#~ msgid "_Edit"
#~ msgstr "_Επεξεργασία"
@@ -3381,10 +3312,8 @@ msgstr "Επιλογή προεπιλε<CEBB>
#~ "May contain any printable characters except \"/\", \"#\", and space.\n"
#~ "Name must be unique on the local machine!"
#~ msgstr "Μπορεί να περιέχει χαρακτήρες εκτός των \"/\", \"#\" και το κενό"
-
#~ msgid "No default printer set."
#~ msgstr "Δεν ορίστηκε προεπιλεγμένος εκτυπωτής."
-
#~ msgid "Cancel Tests"
#~ msgstr "Ακύρωση ελέγχων"
@@ -3395,7 +3324,6 @@ msgstr "Επιλογή προεπιλε<CEBB>
#, fuzzy
#~ msgid "Make Default"
#~ msgstr "_Προεπιλογή"
-
#~ msgid "User name:"
#~ msgstr "Όνομα χρήστη:"
@@ -3430,57 +3358,40 @@ msgstr "Επιλογή προεπιλε<CEBB>
#~ msgstr ""
#~ "Ο απομακρυσμένος διακομιστής δε δέχθηκε την εκτύπωση, κατά πάσα "
#~ "πιθανότητα ο εκτυπωτής δε διατίθεται για κοινή χρήση."
-
#~ msgid "Hostname"
#~ msgstr "Όνομα συστήματος"
-
#~ msgid "Printername"
#~ msgstr "Όνομα εκτυπωτή"
-
#~ msgid "Default printer is %s"
#~ msgstr "Ο προεπιλεγμένος εκτυπωτής είναι %s"
-
#~ msgid "Going to create a new class %s."
#~ msgstr "Θα δημιουργηθεί νέα κλάση %s."
-
#~ msgid " PPD "
#~ msgstr " PPD "
-
#~ msgid "<b>Comment about the Printer</b>"
#~ msgstr "<b>Σχόλιο για τον εκτυπωτή</b>"
-
#~ msgid "<b>Information about the PPD</b>"
#~ msgstr "<b>Σχόλιο για το PPD</b>"
-
#~ msgid "About"
#~ msgstr "Περί"
-
#~ msgid "About System-Config-Printer"
#~ msgstr "Περί ρύθμισης εκτυπωτών"
-
#~ msgid "Apply"
#~ msgstr "Εφαρμογή"
-
#~ msgid "Authors"
#~ msgstr "Δημιουργοί"
-
#~ msgid "Class Members"
#~ msgstr "Μέλη κλάσης"
-
#~ msgid "Comments: "
#~ msgstr "Σχόλια: "
-
#~ msgid "Device"
#~ msgstr "Συσκευή"
-
#~ msgid "Driver"
#~ msgstr "Οδηγός"
-
#~ msgid "Make Default Printer"
#~ msgstr "Προεπιλογή εκτυπωτή"
-
#~ msgid "PPD"
#~ msgstr "PPD"
-
#~ msgid "System-Config-Printer %s"
#~ msgstr "Ρύθμιση εκτυπωτών %s"
+
diff -up system-config-printer-1.1.10/po/it.po.a6cf4d3 system-config-printer-1.1.10/po/it.po
--- system-config-printer-1.1.10/po/it.po.a6cf4d3 2009-07-22 13:25:20.000000000 +0100
+++ system-config-printer-1.1.10/po/it.po 2009-07-31 15:09:03.241086937 +0100
@@ -1,21 +1,22 @@
-# translation of system-config-printer.1.1.x.it.po to Italiano
+# translation of system-config-printer.master.it.po to Italiano
# Copyright (C) 2001 Red Hat, Inc.
# Gabriella Bertilaccio <gbertilaccio@redhat.it>, 2001.
# Bettina De Monti <bdemonti@redhat.it>, 2001.
# Valentina Besi <valentina@redhat.it>, 2001.
# Francesco Valente <fvalen@redhat.com>, 2003, 2004.
-# Francesco Tombolini <tombo@adamantio.net>, 2006, 2007, 2009.
+# Francesco Tombolini <tombo@adamantio.net>, 2006, 2007, 2008, 2009.
# Guido Grazioli <guido.grazioli@gmail.com>, 2008.
# Silvio Pierro <perplesso82 at gmail.com>, 2009.
+# Daniele Catanesi <translate@ccielogs.com>, 2009.
#
#
msgid ""
msgstr ""
"Project-Id-Version: system-config-printer.master.it\n"
"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/bugzilla\n"
-"POT-Creation-Date: 2009-07-22 13:20+0100\n"
-"PO-Revision-Date: 2009-03-28 13:00+0100\n"
-"Last-Translator: Pierro Silvio <perplesso82@gmail.com>\n"
+"POT-Creation-Date: 2009-07-11 16:33+0100\n"
+"PO-Revision-Date: 2009-07-29 06:47+0100\n"
+"Last-Translator: Daniele Catanesi <translate@ccielogs.com>\n"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -47,23 +48,20 @@ msgid "Browse Servers"
msgstr "Sfoglia server"
#: ../AdvancedServerSettings.py:93
-msgid ""
-"Usually print servers broadcast their queues. Specify print servers below "
-"to periodically ask for queues instead."
-msgstr ""
-"Generalmente i server di stampa trasmettono le proprie code. Specifica di "
-"seguito i server di stampa in modo da richiedere periodicamente le code di "
-"stampa."
+msgid "Usually print servers broadcast their queues. Specify print servers below to periodically ask for queues instead."
+msgstr "Generalmente i server di stampa trasmettono le proprie code. Specifica di seguito i server di stampa in modo da richiedere periodicamente le code di stampa."
#: ../AdvancedServerSettings.py:214
msgid "Enter IP address"
msgstr "Inserire indirizzo IP"
-#: ../authconn.py:35 ../glade/NewPrinterWindow.glade.h:106
+#: ../authconn.py:35
+#: ../glade/NewPrinterWindow.glade.h:107
msgid "Username:"
msgstr "Nome utente:"
-#: ../authconn.py:36 ../glade/NewPrinterWindow.glade.h:75
+#: ../authconn.py:36
+#: ../glade/NewPrinterWindow.glade.h:76
msgid "Password:"
msgstr "Password:"
@@ -71,7 +69,8 @@ msgstr "Password:"
msgid "Domain:"
msgstr "Dominio:"
-#: ../authconn.py:46 ../authconn.py:412
+#: ../authconn.py:46
+#: ../authconn.py:412
msgid "Authentication"
msgstr "Autenticazione"
@@ -88,7 +87,8 @@ msgstr "Richiesta non autorizzata (%s)"
msgid "You are not authorized to carry out the requested action."
msgstr "Non si è autorizzati a portare a termine l'azione richiesta."
-#: ../authconn.py:213 ../authconn.py:234
+#: ../authconn.py:213
+#: ../authconn.py:234
msgid "Operation canceled"
msgstr "Operazione annullata"
@@ -97,11 +97,14 @@ msgstr "Operazione annullata"
msgid "CUPS server error (%s)"
msgstr "Errore del server CUPS (%s)"
-#: ../authconn.py:253 ../errordialogs.py:56 ../errordialogs.py:70
+#: ../authconn.py:253
+#: ../errordialogs.py:56
+#: ../errordialogs.py:70
msgid "CUPS server error"
msgstr "Errore del server CUPS"
-#: ../authconn.py:262 ../errordialogs.py:57
+#: ../authconn.py:262
+#: ../errordialogs.py:57
#: ../troubleshoot/PrintTestPage.py:417
#, python-format
msgid "There was an error during the CUPS operation: '%s'."
@@ -111,12 +114,16 @@ msgstr "Si è verificato un errore duran
msgid "Retry"
msgstr "Riprova"
-#: ../authconn.py:386 ../authconn.py:388 ../errordialogs.py:65 ../pysmb.py:75
+#: ../authconn.py:386
+#: ../authconn.py:388
+#: ../errordialogs.py:65
+#: ../pysmb.py:75
#: ../pysmb.py:77
msgid "Not authorized"
msgstr "Non autorizzato"
-#: ../authconn.py:389 ../pysmb.py:78
+#: ../authconn.py:389
+#: ../pysmb.py:78
msgid "The password may be incorrect."
msgstr "La password potrebbe non essere corretta."
@@ -126,12 +133,8 @@ msgid "Authentication (%s)"
msgstr "Autenticazione (%s)"
#: ../errordialogs.py:66
-msgid ""
-"The password may be incorrect, or the server may be configured to deny "
-"remote administration."
-msgstr ""
-"La password potrebbe non essere corretta, o il server potrebbe essere "
-"configurato per negare l'amministrazione remota."
+msgid "The password may be incorrect, or the server may be configured to deny remote administration."
+msgstr "La password potrebbe non essere corretta, o il server potrebbe essere configurato per negare l'amministrazione remota."
#: ../errordialogs.py:72
msgid "Bad request"
@@ -153,7 +156,8 @@ msgstr "Aggiornamento necessario"
msgid "Server error"
msgstr "Errore del server"
-#: ../errordialogs.py:82 ../system-config-printer.py:1219
+#: ../errordialogs.py:82
+#: ../system-config-printer.py:1241
msgid "Not connected"
msgstr "Non connesso"
@@ -175,7 +179,8 @@ msgstr "_Nuovo gruppo"
msgid "_New Group from Selection"
msgstr "_Nuovo gruppo dalla selezione"
-#: ../GroupsPane.py:98 ../system-config-printer.py:411
+#: ../GroupsPane.py:98
+#: ../system-config-printer.py:412
msgid "_Rename"
msgstr "_Rinomina"
@@ -186,8 +191,7 @@ msgstr "L'oggetto non può essere rinomi
#: ../GroupsPane.py:171
#, python-format
msgid "The name \"%s\" is already in use. Please use a different name."
-msgstr ""
-"Il nome \"%s\" è già utilizzato. Si prega di utilizzare un nome differente."
+msgstr "Il nome \"%s\" è già utilizzato. Si prega di utilizzare un nome differente."
#: ../GroupsPane.py:290
#, python-format
@@ -195,13 +199,8 @@ msgid "Are you sure you want to permanen
msgstr "Si è certi di voler eliminare permanentemente \"%s\"?"
#: ../GroupsPane.py:296
-msgid ""
-"This will not delete any printer queues from your computer. To delete queues "
-"completely, you must delete them from the 'All Printers' group."
-msgstr ""
-"Questo non cancellerà alcuna coda di stampa dal computer in uso. Per "
-"cancellare completamente le code, è necessario eliminarle dal gruppo 'Tutte "
-"le stampanti'."
+msgid "This will not delete any printer queues from your computer. To delete queues completely, you must delete them from the 'All Printers' group."
+msgstr "Questo non cancellerà alcuna coda di stampa dal computer in uso. Per cancellare completamente le code, è necessario eliminarle dal gruppo 'Tutte le stampanti'."
#: ../GroupsPane.py:318
msgid "New Group"
@@ -231,7 +230,8 @@ msgstr "Ristam_pa"
msgid "_Authenticate"
msgstr "_Autenticare"
-#: ../jobviewer.py:213 ../troubleshoot/PrintTestPage.py:82
+#: ../jobviewer.py:213
+#: ../troubleshoot/PrintTestPage.py:82
msgid "Job"
msgstr "Lavoro"
@@ -239,12 +239,15 @@ msgstr "Lavoro"
msgid "User"
msgstr "Utente"
-#: ../jobviewer.py:215 ../troubleshoot/PrintTestPage.py:86
+#: ../jobviewer.py:215
+#: ../troubleshoot/PrintTestPage.py:86
msgid "Document"
msgstr "Documento"
-#: ../jobviewer.py:216 ../my-default-printer.py:153
-#: ../system-config-printer.py:384 ../system-config-printer.py:1367
+#: ../jobviewer.py:216
+#: ../my-default-printer.py:153
+#: ../system-config-printer.py:385
+#: ../system-config-printer.py:1389
#: ../troubleshoot/PrintTestPage.py:84
msgid "Printer"
msgstr "Stampante"
@@ -257,7 +260,8 @@ msgstr "Dimensione"
msgid "Time submitted"
msgstr "Ora d'invio"
-#: ../jobviewer.py:219 ../troubleshoot/PrintTestPage.py:87
+#: ../jobviewer.py:219
+#: ../troubleshoot/PrintTestPage.py:87
msgid "Status"
msgstr "Stato"
@@ -279,17 +283,26 @@ msgstr "tutti i lavori"
msgid "Document Print Status (%s)"
msgstr "Stato di stampa del documento (%s)"
-#: ../jobviewer.py:395 ../jobviewer.py:460 ../jobviewer.py:461
-#: ../jobviewer.py:512 ../jobviewer.py:629 ../jobviewer.py:756
-#: ../jobviewer.py:1232 ../jobviewer.py:1258 ../system-config-printer.py:2555
-#: ../glade/NewPrinterWindow.glade.h:104
+#: ../jobviewer.py:395
+#: ../jobviewer.py:460
+#: ../jobviewer.py:461
+#: ../jobviewer.py:512
+#: ../jobviewer.py:629
+#: ../jobviewer.py:756
+#: ../jobviewer.py:1232
+#: ../jobviewer.py:1258
+#: ../system-config-printer.py:2577
+#: ../glade/NewPrinterWindow.glade.h:105
#: ../troubleshoot/ChooseNetworkPrinter.py:101
#: ../troubleshoot/ChooseNetworkPrinter.py:102
#: ../troubleshoot/ChooseNetworkPrinter.py:105
#: ../troubleshoot/ChooseNetworkPrinter.py:106
-#: ../troubleshoot/ChoosePrinter.py:87 ../troubleshoot/ChoosePrinter.py:88
-#: ../troubleshoot/ChoosePrinter.py:91 ../troubleshoot/ChoosePrinter.py:92
-#: ../troubleshoot/DeviceListed.py:92 ../troubleshoot/DeviceListed.py:93
+#: ../troubleshoot/ChoosePrinter.py:87
+#: ../troubleshoot/ChoosePrinter.py:88
+#: ../troubleshoot/ChoosePrinter.py:91
+#: ../troubleshoot/ChoosePrinter.py:92
+#: ../troubleshoot/DeviceListed.py:92
+#: ../troubleshoot/DeviceListed.py:93
msgid "Unknown"
msgstr "Sconosciuto"
@@ -333,7 +346,8 @@ msgstr "%d settimane fa"
msgid "Held for authentication"
msgstr "Sospesa per autenticazione"
-#: ../jobviewer.py:566 ../troubleshoot/PrintTestPage.py:42
+#: ../jobviewer.py:566
+#: ../troubleshoot/PrintTestPage.py:42
msgid "Held"
msgstr "Mantieni"
@@ -366,33 +380,40 @@ msgstr "Mantieni fino al terzo tentativo
msgid "Held until weekend"
msgstr "Mantieni fino al fine settimana"
-#: ../jobviewer.py:619 ../troubleshoot/PrintTestPage.py:41
+#: ../jobviewer.py:619
+#: ../troubleshoot/PrintTestPage.py:41
msgid "Pending"
msgstr "In corso"
-#: ../jobviewer.py:620 ../system-config-printer.py:198
+#: ../jobviewer.py:620
+#: ../system-config-printer.py:198
#: ../troubleshoot/PrintTestPage.py:43
msgid "Processing"
msgstr "In elaborazione"
-#: ../jobviewer.py:621 ../system-config-printer.py:200
+#: ../jobviewer.py:621
+#: ../system-config-printer.py:200
#: ../troubleshoot/PrintTestPage.py:44
msgid "Stopped"
msgstr "Arrestata"
-#: ../jobviewer.py:622 ../troubleshoot/PrintTestPage.py:45
+#: ../jobviewer.py:622
+#: ../troubleshoot/PrintTestPage.py:45
msgid "Canceled"
msgstr "Annullata"
-#: ../jobviewer.py:623 ../troubleshoot/PrintTestPage.py:46
+#: ../jobviewer.py:623
+#: ../troubleshoot/PrintTestPage.py:46
msgid "Aborted"
msgstr "Interrotta"
-#: ../jobviewer.py:624 ../troubleshoot/PrintTestPage.py:47
+#: ../jobviewer.py:624
+#: ../troubleshoot/PrintTestPage.py:47
msgid "Completed"
msgstr "Completata"
-#: ../jobviewer.py:697 ../jobviewer.py:786
+#: ../jobviewer.py:697
+#: ../jobviewer.py:786
msgid "authenticating job"
msgstr "Autenticazione lavoro"
@@ -435,9 +456,8 @@ msgid "%d documents queued"
msgstr "%d documenti nella coda di stampa"
#: ../jobviewer.py:1259
-#, fuzzy
msgid "Document printed"
-msgstr "Documento"
+msgstr "Documento stampato"
#: ../jobviewer.py:1260
#, python-format
@@ -447,26 +467,21 @@ msgstr "La stampa del documento `%s' è
#: ../jobviewer.py:1419
#, python-format
msgid "There was a problem sending document `%s' (job %d) to the printer."
-msgstr ""
-"Si è verificato un problema durante l'invio del documento `%s' (lavoro %d) "
-"alla stampante."
+msgstr "Si è verificato un problema durante l'invio del documento `%s' (lavoro %d) alla stampante."
#: ../jobviewer.py:1422
#, python-format
msgid "There was a problem processing document `%s' (job %d)."
-msgstr ""
-"Si è verificato un problema durante l'elaborazione del documento `%"
-"s' (lavoro %d)."
+msgstr "Si è verificato un problema durante l'elaborazione del documento `%s' (lavoro %d)."
#. Give up and use the provided message untranslated.
#: ../jobviewer.py:1428
#, python-format
msgid "There was a problem printing document `%s' (job %d): `%s'."
-msgstr ""
-"Si è verificato un errore durante la stampa del documento `%s' (lavoro %d): `"
-"%s'."
+msgstr "Si è verificato un errore durante la stampa del documento `%s' (lavoro %d): `%s'."
-#: ../jobviewer.py:1435 ../jobviewer.py:1451
+#: ../jobviewer.py:1435
+#: ../jobviewer.py:1451
msgid "Print Error"
msgstr "Errore di stampa"
@@ -479,19 +494,24 @@ msgstr "_Diagnostica"
msgid "The printer called `%s' has been disabled."
msgstr "La stampante chiamata `%s' è stata disabilitata."
-#: ../my-default-printer.py:137 ../my-default-printer.desktop.in.h:1
+#: ../my-default-printer.py:137
+#: ../my-default-printer.desktop.in.h:1
msgid "Default Printer"
msgstr "Stampante predefinita"
-#: ../my-default-printer.py:141 ../my-default-printer.py:177
+#: ../my-default-printer.py:141
+#: ../my-default-printer.py:177
msgid "_Use System Default"
msgstr "_Usa valori predefiniti"
-#: ../my-default-printer.py:142 ../my-default-printer.py:179
+#: ../my-default-printer.py:142
+#: ../my-default-printer.py:179
msgid "_Set Default"
msgstr "Impo_sta predefinita"
-#: ../my-default-printer.py:158 ../system-config-printer.py:441
+#: ../my-default-printer.py:158
+#: ../system-config-printer.py:442
+#: ../system-config-printer.py:3704
#: ../troubleshoot/ChooseNetworkPrinter.py:37
#: ../troubleshoot/ChoosePrinter.py:38
msgid "Location"
@@ -521,7 +541,8 @@ msgstr "Comportamento predefinito"
msgid "Authenticated"
msgstr "Autenticato"
-#: ../ppdippstr.py:50 ../system-config-printer.py:6133
+#: ../ppdippstr.py:50
+#: ../system-config-printer.py:6287
msgid "None"
msgstr "Nessuna"
@@ -736,9 +757,7 @@ msgstr "1200 dpi, foto, cartuccia nero +
#: ../system-config-printer.py:140
msgid "To do this, select System->Administration->Firewall from the main menu."
-msgstr ""
-"Per fare questo, selezionare dal menu principale Sistema->Amministrazione-"
-">Firewall."
+msgstr "Per fare questo, selezionare dal menu principale Sistema->Amministrazione->Firewall."
#: ../system-config-printer.py:197
msgid "Idle"
@@ -748,111 +767,117 @@ msgstr "In attesa"
msgid "Busy"
msgstr "Occupata"
-#: ../system-config-printer.py:390 ../system-config-printer.py:1373
+#: ../system-config-printer.py:391
+#: ../system-config-printer.py:1395
msgid "Class"
msgstr "Classe"
-#: ../system-config-printer.py:417
+#: ../system-config-printer.py:418
msgid "Set As De_fault"
msgstr "Imposta come Pr_edefinita"
-#: ../system-config-printer.py:421
+#: ../system-config-printer.py:422
msgid "_Create class"
msgstr "_Crea classe"
-#: ../system-config-printer.py:423
+#: ../system-config-printer.py:424
msgid "View Print _Queue"
msgstr "Visualizza _Coda di Stampa"
-#: ../system-config-printer.py:425
+#: ../system-config-printer.py:426
msgid "_Add to Group"
msgstr "_Aggiungi al gruppo"
-#: ../system-config-printer.py:427
+#: ../system-config-printer.py:428
msgid "Save Results as _Group"
msgstr "Salva i risultati come _Gruppo"
-#: ../system-config-printer.py:429
+#: ../system-config-printer.py:430
msgid "Save Filter as _Search Group"
msgstr "Salva i filtri come _Cerca Gruppo"
-#: ../system-config-printer.py:433
+#: ../system-config-printer.py:434
msgid "E_nabled"
msgstr "A_bilita"
-#: ../system-config-printer.py:435
+#: ../system-config-printer.py:436
msgid "_Shared"
msgstr "_Condivisa"
-#: ../system-config-printer.py:439 ../troubleshoot/ChooseNetworkPrinter.py:35
-#: ../troubleshoot/ChoosePrinter.py:36 ../troubleshoot/DeviceListed.py:36
+#: ../system-config-printer.py:440
+#: ../troubleshoot/ChooseNetworkPrinter.py:35
+#: ../troubleshoot/ChoosePrinter.py:36
+#: ../troubleshoot/DeviceListed.py:36
msgid "Name"
msgstr "Nome"
-#: ../system-config-printer.py:440
+#: ../system-config-printer.py:441
msgid "Description"
msgstr "Descrizione"
-#: ../system-config-printer.py:442
+#: ../system-config-printer.py:443
msgid "Manufacturer / Model"
msgstr "Produttore / Modello"
#. Printer state reasons list
-#: ../system-config-printer.py:517
+#: ../system-config-printer.py:518
msgid "Message"
msgstr "Messaggio"
-#: ../system-config-printer.py:552
+#: ../system-config-printer.py:553
msgid "Problems?"
msgstr "Problemi?"
-#: ../system-config-printer.py:655 ../system-config-printer.py:657
+#: ../system-config-printer.py:656
+#: ../system-config-printer.py:658
msgid "Members of this class"
msgstr "Appartenenti a questa classe"
-#: ../system-config-printer.py:656 ../system-config-printer.py:658
+#: ../system-config-printer.py:657
+#: ../system-config-printer.py:659
msgid "Others"
msgstr "Altre"
-#: ../system-config-printer.py:659
+#: ../system-config-printer.py:660
msgid "Devices"
msgstr "Dispositivi"
-#: ../system-config-printer.py:660
+#: ../system-config-printer.py:661
msgid "Connections"
msgstr "Connessioni"
-#: ../system-config-printer.py:661
+#: ../system-config-printer.py:662
msgid "Makes"
msgstr "Produttori"
-#: ../system-config-printer.py:662
+#: ../system-config-printer.py:663
msgid "Models"
msgstr "Modelli"
-#: ../system-config-printer.py:663
+#: ../system-config-printer.py:664
msgid "Drivers"
msgstr "Driver"
-#: ../system-config-printer.py:664 ../glade/NewPrinterWindow.glade.h:54
+#: ../system-config-printer.py:665
+#: ../glade/NewPrinterWindow.glade.h:54
msgid "Downloadable Drivers"
msgstr "Driver disponibili per il download"
-#: ../system-config-printer.py:665
+#: ../system-config-printer.py:666
msgid "Users"
msgstr "Utenti"
-#: ../system-config-printer.py:700
+#: ../system-config-printer.py:701
msgid "Automatic rotation"
msgstr "Rotazione automatica"
-#: ../system-config-printer.py:986
+#: ../system-config-printer.py:1008
#, python-format
msgid "Printer Properties - '%s' on %s"
msgstr "Proprietà stampante - '%s' su %s"
#. The Conflict button was pressed.
-#: ../system-config-printer.py:994
+#: ../system-config-printer.py:1016
msgid ""
"There are conflicting options.\n"
"Changes can only be applied after\n"
@@ -862,78 +887,86 @@ msgstr ""
"I cambiamenti possono essere applicati solo\n"
"dopo la risoluzione dei conflitti."
-#: ../system-config-printer.py:1213
+#: ../system-config-printer.py:1235
#, python-format
msgid "Printer configuration - %s"
msgstr "Configurazione stampante - %s"
-#: ../system-config-printer.py:1217
+#: ../system-config-printer.py:1239
#, python-format
msgid "Connected to %s"
msgstr "Connesso a %s"
#. Update our copy of the printer's settings.
-#: ../system-config-printer.py:1257 ../system-config-printer.py:2045
+#: ../system-config-printer.py:1279
+#: ../system-config-printer.py:2067
msgid "obtaining queue details"
msgstr "recupero dettagli coda"
-#: ../system-config-printer.py:1295
+#: ../system-config-printer.py:1317
msgid "Remove from Group"
msgstr "Rimuovere dal Gruppo"
-#: ../system-config-printer.py:1361
+#: ../system-config-printer.py:1383
msgid "Network printer (discovered)"
msgstr "Stampante di rete (scoperta)"
-#: ../system-config-printer.py:1364
+#: ../system-config-printer.py:1386
msgid "Network class (discovered)"
msgstr "Classe di rete (scoperta)"
-#: ../system-config-printer.py:1370 ../system-config-printer.py:5437
-#: ../system-config-printer.py:5507 ../system-config-printer.py:5509
+#: ../system-config-printer.py:1392
+#: ../system-config-printer.py:5591
+#: ../system-config-printer.py:5661
+#: ../system-config-printer.py:5663
msgid "Fax"
msgstr "Fax"
-#: ../system-config-printer.py:1376 ../system-config-printer.py:1382
+#: ../system-config-printer.py:1398
+#: ../system-config-printer.py:1404
#: ../troubleshoot/LocalOrRemote.py:30
msgid "Network printer"
msgstr "Stampante di rete"
-#: ../system-config-printer.py:1379
+#: ../system-config-printer.py:1401
msgid "Network print share"
msgstr "Condivisione di stampa di rete"
-#: ../system-config-printer.py:1508 ../glade/ConnectingDialog.glade.h:2
+#: ../system-config-printer.py:1530
+#: ../glade/ConnectingDialog.glade.h:2
#, no-c-format, python-format
msgid "<i>Opening connection to %s</i>"
msgstr "<i>Apertura connessione a %s</i>"
-#: ../system-config-printer.py:1890
+#: ../system-config-printer.py:1912
msgid "Installable Options"
msgstr "Opzioni installabili"
-#: ../system-config-printer.py:1891
+#: ../system-config-printer.py:1913
#: ../glade/PrinterPropertiesDialog.glade.h:109
msgid "Printer Options"
msgstr "Opzioni stampante"
-#: ../system-config-printer.py:1927
+#: ../system-config-printer.py:1949
#, python-format
msgid "modifying class %s"
msgstr "modifica classe %s"
-#: ../system-config-printer.py:1929 ../system-config-printer.py:3038
-#: ../system-config-printer.py:3063 ../system-config-printer.py:6421
-#: ../system-config-printer.py:6433 ../system-config-printer.py:6455
+#: ../system-config-printer.py:1951
+#: ../system-config-printer.py:3060
+#: ../system-config-printer.py:3085
+#: ../system-config-printer.py:6575
+#: ../system-config-printer.py:6587
+#: ../system-config-printer.py:6609
#, python-format
msgid "modifying printer %s"
msgstr "modifica stampante %s"
-#: ../system-config-printer.py:1944
+#: ../system-config-printer.py:1966
msgid "This will delete this class!"
msgstr "Questa classe verrà cancellata!"
-#: ../system-config-printer.py:1945
+#: ../system-config-printer.py:1967
msgid "Proceed anyway?"
msgstr "Procedere comunque?"
@@ -941,65 +974,65 @@ msgstr "Procedere comunque?"
#. but we have never fetched the server settings to see whether
#. the server is publishing shared printers. Fetch the settings
#. now so that we can update the "not published" label if necessary.
-#: ../system-config-printer.py:2033 ../system-config-printer.py:3222
+#: ../system-config-printer.py:2055
+#: ../system-config-printer.py:3244
msgid "fetching server settings"
msgstr "recupero impostazioni del server"
-#: ../system-config-printer.py:2103
+#: ../system-config-printer.py:2125
msgid "Set Default Printer"
msgstr "Imposta stampante predefinita"
-#: ../system-config-printer.py:2105
+#: ../system-config-printer.py:2127
msgid "Do you want to set this as the system-wide default printer?"
-msgstr ""
-"Si desidera impostare la stampante come predefinita per l'intero sistema?"
+msgstr "Si desidera impostare la stampante come predefinita per l'intero sistema?"
-#: ../system-config-printer.py:2107
+#: ../system-config-printer.py:2129
msgid "Set as the _system-wide default printer"
msgstr "Imposta come stampante predefinita per l'intero _sistema"
-#: ../system-config-printer.py:2109
+#: ../system-config-printer.py:2131
msgid "_Clear my personal default setting"
msgstr "_Resetta le impostazioni predefinite personali"
-#: ../system-config-printer.py:2110
+#: ../system-config-printer.py:2132
msgid "Set as my _personal default printer"
msgstr "Imposta come stampante predefinita _personale"
-#: ../system-config-printer.py:2115
+#: ../system-config-printer.py:2137
msgid "setting default printer"
msgstr "impostazione stampante predefinita"
-#: ../system-config-printer.py:2172
+#: ../system-config-printer.py:2194
msgid "printing test page"
msgstr "stampa pagina di prova"
-#: ../system-config-printer.py:2185 ../system-config-printer.py:2220
+#: ../system-config-printer.py:2207
+#: ../system-config-printer.py:2242
+#: ../system-config-printer.py:5481
msgid "Not possible"
msgstr "Impossibile"
-#: ../system-config-printer.py:2186 ../system-config-printer.py:2221
-msgid ""
-"The remote server did not accept the print job, most likely because the "
-"printer is not shared."
-msgstr ""
-"Il server remoto non accetta il lavoro di stampa, molto probabilmente perché "
-"la stampante non è condivisa."
+#: ../system-config-printer.py:2208
+#: ../system-config-printer.py:2243
+msgid "The remote server did not accept the print job, most likely because the printer is not shared."
+msgstr "Il server remoto non accetta il lavoro di stampa, molto probabilmente perché la stampante non è condivisa."
-#: ../system-config-printer.py:2198 ../system-config-printer.py:2213
+#: ../system-config-printer.py:2220
+#: ../system-config-printer.py:2235
msgid "Submitted"
msgstr "Inviato"
-#: ../system-config-printer.py:2199
+#: ../system-config-printer.py:2221
#, python-format
msgid "Test page submitted as job %d"
msgstr "Pagina di prova inviata come lavoro %d"
-#: ../system-config-printer.py:2206
+#: ../system-config-printer.py:2228
msgid "sending maintenance command"
msgstr "invio comando di manutenzione"
-#: ../system-config-printer.py:2214
+#: ../system-config-printer.py:2236
#, python-format
msgid "Maintenance command submitted as job %d"
msgstr "Comando di manutenzione inviato come lavoro %d"
@@ -1007,74 +1040,70 @@ msgstr "Comando di manutenzione inviato
#. The underlying cupsGetPPD2() function returned NULL without
#. setting an IPP error, so it'll be something like a failed
#. connection.
-#: ../system-config-printer.py:2288 ../system-config-printer.py:2384
+#: ../system-config-printer.py:2310
+#: ../system-config-printer.py:2406
msgid "Error"
msgstr "Errore"
-#: ../system-config-printer.py:2289
+#: ../system-config-printer.py:2311
msgid "There was a problem connecting to the CUPS server."
msgstr "Si è verificato un problema durante la connessione al server CUPS."
-#: ../system-config-printer.py:2385
+#: ../system-config-printer.py:2407
#, python-format
msgid "Option '%s' has value '%s' and cannot be edited."
msgstr "L'opzione '%s' con valore '%s' non può essere modificata."
-#: ../system-config-printer.py:2475
+#: ../system-config-printer.py:2497
msgid "Marker levels are not reported for this printer."
msgstr "Gli indicatori di livello non sono disponibili per questa stampante."
-#: ../system-config-printer.py:2774
+#: ../system-config-printer.py:2796
msgid "Cannot Rename"
msgstr "Impossibile rinominare"
-#: ../system-config-printer.py:2775
+#: ../system-config-printer.py:2797
msgid "There are queued jobs."
msgstr "Ci sono dei lavori nelle code di stampa."
-#: ../system-config-printer.py:2841
+#: ../system-config-printer.py:2863
msgid "renaming printer"
msgstr "rinomina stampante"
#. for classes make sure all members
#. will get added
-#: ../system-config-printer.py:2926
+#: ../system-config-printer.py:2948
msgid "copying printer"
msgstr "copia stampante"
-#: ../system-config-printer.py:2990
+#: ../system-config-printer.py:3012
#, python-format
msgid "Really delete class '%s'?"
msgstr "Si vuole realmente eliminare la classe '%s'?"
-#: ../system-config-printer.py:2992
+#: ../system-config-printer.py:3014
#, python-format
msgid "Really delete printer '%s'?"
msgstr "Si vuole realmente eliminare la stampante '%s'?"
-#: ../system-config-printer.py:2994
+#: ../system-config-printer.py:3016
msgid "Really delete selected destinations?"
msgstr "Si desidera realmente eliminare le destinazioni selezionate?"
-#: ../system-config-printer.py:3015
+#: ../system-config-printer.py:3037
#, python-format
msgid "deleting printer %s"
msgstr "cancellazione stampante %s"
-#: ../system-config-printer.py:3089
+#: ../system-config-printer.py:3111
msgid "Publish Shared Printers"
msgstr "Pubblica stampanti condivise"
-#: ../system-config-printer.py:3090
-msgid ""
-"Shared printers are not available to other people unless the 'Publish shared "
-"printers' option is enabled in the server settings."
-msgstr ""
-"Le stampanti condivise non sono disponibili ad altri utenti, a meno che non "
-"sia stata abilitata l'opzione 'Pubblica stampanti condivise' nelle "
-"impostazioni del server."
+#: ../system-config-printer.py:3112
+msgid "Shared printers are not available to other people unless the 'Publish shared printers' option is enabled in the server settings."
+msgstr "Le stampanti condivise non sono disponibili ad altri utenti, a meno che non sia stata abilitata l'opzione 'Pubblica stampanti condivise' nelle impostazioni del server."
-#: ../system-config-printer.py:3283
+#: ../system-config-printer.py:3305
msgid "modifying server settings"
msgstr "modifica impostazioni del server"
@@ -1084,346 +1113,362 @@ msgstr "modifica impostazioni del server
#. be unblocked. Unfortunately, this is not yet possible
#. (bug #440469). However, we can display a dialog to suggest
#. that now might be a good time to review the firewall settings.
-#: ../system-config-printer.py:3308
+#: ../system-config-printer.py:3330
msgid "Review Firewall"
msgstr "Ricontrolla il firewall"
-#: ../system-config-printer.py:3309
-msgid ""
-"You may need to adjust the firewall to allow network printing to this "
-"computer."
-msgstr ""
-"Potrebbe essere necessario modificare il firewall per abilitare la stampa di "
-"rete su questo computer."
+#: ../system-config-printer.py:3331
+msgid "You may need to adjust the firewall to allow network printing to this computer."
+msgstr "Potrebbe essere necessario modificare il firewall per abilitare la stampa di rete su questo computer."
-#: ../system-config-printer.py:3639
+#: ../system-config-printer.py:3667
msgid "Browsing not available (pysmbc not installed)"
msgstr "Esplorazione non disponibile (pysmbc non installato)"
#. SMB list columns
-#: ../system-config-printer.py:3645
+#: ../system-config-printer.py:3673
msgid "Share"
msgstr "Condivisione"
-#: ../system-config-printer.py:3651
+#: ../system-config-printer.py:3679
msgid "Comment"
msgstr "Commento"
-#: ../system-config-printer.py:3665
-msgid ""
-"PostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *."
-"PPD.GZ)"
-msgstr ""
-"Descrizione stampante PostScript (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *.PPD.GZ)"
+#. IPP list columns
+#: ../system-config-printer.py:3698
+msgid "Queue"
+msgstr "Coda"
+
+#: ../system-config-printer.py:3712
+msgid "PostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *.PPD.GZ)"
+msgstr "Descrizione stampante PostScript (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *.PPD.GZ)"
-#: ../system-config-printer.py:3674
+#: ../system-config-printer.py:3721
msgid "All files (*)"
msgstr "Tutti i file (*)"
-#: ../system-config-printer.py:3710 ../system-config-printer.py:5839
-#: ../system-config-printer.py:5877 ../applet.py:127
+#: ../system-config-printer.py:3757
+#: ../system-config-printer.py:5993
+#: ../system-config-printer.py:6031
+#: ../applet.py:127
msgid "Search"
msgstr "Cerca"
-#: ../system-config-printer.py:3734 ../system-config-printer.py:3758
-#: ../glade/NewPrinterWindow.glade.h:72
+#: ../system-config-printer.py:3781
+#: ../system-config-printer.py:3805
+#: ../glade/NewPrinterWindow.glade.h:73
msgid "New Printer"
msgstr "Nuova stampante"
-#: ../system-config-printer.py:3745
+#: ../system-config-printer.py:3792
msgid "New Class"
msgstr "Nuova classe"
-#: ../system-config-printer.py:3750
+#: ../system-config-printer.py:3797
msgid "Change Device URI"
msgstr "Cambia URI del dispositivo"
-#: ../system-config-printer.py:3756
+#: ../system-config-printer.py:3803
msgid "Change Driver"
msgstr "Cambia driver"
-#: ../system-config-printer.py:3928 ../system-config-printer.py:4007
-#: ../system-config-printer.py:4321 ../system-config-printer.py:4519
-#: ../system-config-printer.py:5683 ../system-config-printer.py:5864
+#: ../system-config-printer.py:3972
+#: ../system-config-printer.py:4049
+#: ../system-config-printer.py:4359
+#: ../system-config-printer.py:4557
+#: ../system-config-printer.py:5837
+#: ../system-config-printer.py:6018
msgid "Searching"
msgstr "Ricerca in corso"
-#: ../system-config-printer.py:3929
+#: ../system-config-printer.py:3973
msgid "Searching for downloadable drivers"
msgstr "Ricerca driver scaricabili in corso"
-#: ../system-config-printer.py:4008 ../system-config-printer.py:4322
+#: ../system-config-printer.py:4050
+#: ../system-config-printer.py:4360
msgid "Searching for drivers"
msgstr "Ricerca driver in corso"
-#: ../system-config-printer.py:4520 ../system-config-printer.py:5684
+#: ../system-config-printer.py:4558
+#: ../system-config-printer.py:5838
msgid "Searching for printers"
msgstr "Ricerca stampanti in corso"
-#: ../system-config-printer.py:4529
+#: ../system-config-printer.py:4567
msgid "fetching device list"
msgstr "recupero elenco dispositivi"
#. Tell the user why he needs the plugin
-#: ../system-config-printer.py:4616
+#: ../system-config-printer.py:4652
msgid "For this printer a proprietary driver plugin from HP is available.\n"
-msgstr ""
-"Per questa stampante è disponibile un driver plugin proprietario da HP.\n"
+msgstr "Per questa stampante è disponibile un driver plugin proprietario da HP.\n"
-#: ../system-config-printer.py:4619
+#: ../system-config-printer.py:4655
msgid ""
"The installation of the plugin is required for your printer to work.\n"
"\n"
msgstr ""
-"L'installazione del plugin è necessaria per il funzionamento della "
-"stampante.\n"
+"L'installazione del plugin è necessaria per il funzionamento della stampante.\n"
"\n"
-#: ../system-config-printer.py:4622
+#: ../system-config-printer.py:4658
msgid ""
-"Installing the plugin is optional, it completes or enhances the "
-"functionality\n"
+"Installing the plugin is optional, it completes or enhances the functionality\n"
"of your printer. Without plugin at least basic operations work.\n"
"\n"
msgstr ""
-"L'installazione del plugin è opzionale, esso completa o evolve le "
-"funzionalità\n"
+"L'installazione del plugin è opzionale, esso completa o evolve le funzionalità\n"
"della stampante. Senza il plugin funzioneranno solo le operazioni basilari.\n"
"\n"
-#: ../system-config-printer.py:4626
+#: ../system-config-printer.py:4662
msgid "The plugin provides the following features:\n"
msgstr "Il plugin fornisce le seguenti caratteristiche:\n"
-#: ../system-config-printer.py:4629
+#: ../system-config-printer.py:4665
msgid " - Printing support\n"
msgstr " - Supporto per la stampa\n"
-#: ../system-config-printer.py:4632
+#: ../system-config-printer.py:4668
msgid " - Faster printing\n"
msgstr " - Stampa più rapida\n"
-#: ../system-config-printer.py:4635
+#: ../system-config-printer.py:4671
msgid " - Better printout quality\n"
msgstr " - Miglior qualità della stampa\n"
-#: ../system-config-printer.py:4638
+#: ../system-config-printer.py:4674
msgid " - Extra printing features\n"
msgstr " - Caratteristiche di stampa avanzate\n"
-#: ../system-config-printer.py:4641
+#: ../system-config-printer.py:4677
msgid " - Scanning support\n"
msgstr " - Supporto per la scansione\n"
-#: ../system-config-printer.py:4644
+#: ../system-config-printer.py:4680
msgid " - Faster scanning\n"
msgstr " - Scansione più veloce\n"
-#: ../system-config-printer.py:4647
+#: ../system-config-printer.py:4683
msgid " - Better scanning image quality\n"
msgstr " - Migliore qualità dell'immagine scansita\n"
-#: ../system-config-printer.py:4650
+#: ../system-config-printer.py:4686
msgid " - Faxing support\n"
msgstr " - Supporto per i fax\n"
-#: ../system-config-printer.py:4653
+#: ../system-config-printer.py:4689
msgid " - Extra fax features\n"
msgstr " - Caratteristiche fax avanzate\n"
-#: ../system-config-printer.py:4656
+#: ../system-config-printer.py:4692
msgid " - Better Input/Output support\n"
msgstr " - Miglior supporto Input/Output\n"
-#: ../system-config-printer.py:4659
+#: ../system-config-printer.py:4695
msgid " - Extra user interface features\n"
msgstr " - Caratteristiche avanzate nell'interfaccia utente\n"
-#: ../system-config-printer.py:4662
+#: ../system-config-printer.py:4698
msgid " - Other extra features\n"
msgstr " - Altre caratteristiche avanzate\n"
-#: ../system-config-printer.py:4667
+#: ../system-config-printer.py:4703
msgid "Install plugin"
msgstr "Installa plugin"
-#: ../system-config-printer.py:4668
+#: ../system-config-printer.py:4704
msgid "Do not set up printer"
msgstr "Non impostare la stampante"
-#: ../system-config-printer.py:4669
+#: ../system-config-printer.py:4705
msgid "Set up without plugin"
msgstr "Imposta senza plugin"
-#: ../system-config-printer.py:4671 ../troubleshoot/PrintTestPage.py:118
+#: ../system-config-printer.py:4707
+#: ../troubleshoot/PrintTestPage.py:118
msgid "Yes"
msgstr "Si"
-#: ../system-config-printer.py:4672 ../troubleshoot/PrintTestPage.py:119
+#: ../system-config-printer.py:4708
+#: ../troubleshoot/PrintTestPage.py:119
msgid "No"
msgstr "No"
-#: ../system-config-printer.py:4841 ../system-config-printer.py:4845
+#: ../system-config-printer.py:4878
+#: ../system-config-printer.py:4882
msgid " (Current)"
msgstr " (Attuale)"
-#: ../system-config-printer.py:4898
+#: ../system-config-printer.py:4935
msgid "Other"
msgstr "Altro"
#. device-info
#. PhysicalDevice obj
#. Separator?
-#: ../system-config-printer.py:4914
+#: ../system-config-printer.py:4951
msgid "Network Printer"
msgstr "Stampante di rete"
-#: ../system-config-printer.py:4918
+#: ../system-config-printer.py:4955
msgid "Find Network Printer"
msgstr "Trova una stampante di rete"
-#: ../system-config-printer.py:4991
+#: ../system-config-printer.py:5028
+#: ../system-config-printer.py:5433
msgid "Scanning..."
msgstr "Scansione in corso..."
-#: ../system-config-printer.py:5046
+#: ../system-config-printer.py:5083
msgid "No Print Shares"
msgstr "Nessuna condivisione di stampa"
-#: ../system-config-printer.py:5047
-msgid ""
-"There were no print shares found. Please check that the Samba service is "
-"marked as trusted in your firewall configuration."
-msgstr ""
-"Nessuna condivisione di stampa trovata. Controllare che il servizio Samba "
-"sia stato contrassegnato come fidato nella configurazione del firewall."
+#: ../system-config-printer.py:5084
+msgid "There were no print shares found. Please check that the Samba service is marked as trusted in your firewall configuration."
+msgstr "Nessuna condivisione di stampa trovata. Controllare che il servizio Samba sia stato contrassegnato come fidato nella configurazione del firewall."
-#: ../system-config-printer.py:5308 ../system-config-printer.py:5371
+#: ../system-config-printer.py:5345
+#: ../system-config-printer.py:5414
msgid "Print Share Verified"
msgstr "Condivisione di stampa verificata"
-#: ../system-config-printer.py:5309 ../system-config-printer.py:5372
+#: ../system-config-printer.py:5346
+#: ../system-config-printer.py:5415
msgid "This print share is accessible."
msgstr "Questa stampante condivisa è accessibile."
-#: ../system-config-printer.py:5314 ../system-config-printer.py:5376
+#: ../system-config-printer.py:5351
+#: ../system-config-printer.py:5419
msgid "This print share is not accessible."
msgstr "Questa stampante condivisa è inaccessibile."
-#: ../system-config-printer.py:5317
+#: ../system-config-printer.py:5354
msgid "Print Share Inaccessible"
msgstr "Condivisione di stampa non accessibile"
-#: ../system-config-printer.py:5375
+#: ../system-config-printer.py:5418
msgid "Inaccessible"
msgstr "Inaccessibile"
-#: ../system-config-printer.py:5429
+#: ../system-config-printer.py:5482
+#, python-format
+msgid "It is not possible to obtain a list of queues from '%s'."
+msgstr "Non è possibile ottenere l'elenco delle code di stampa da '%s'."
+
+#: ../system-config-printer.py:5484
+msgid "Obtaining a list of queues is a CUPS extension to IPP. Network printers do not support it."
+msgstr "L'ottenimento di un elenco di code di stampa è una estensione CUPS per IPP. Le stampanti di rete non lo supportano."
+
+#: ../system-config-printer.py:5487
+msgid "No queues"
+msgstr "Nessuna coda di stampa"
+
+#: ../system-config-printer.py:5488
+msgid "There are no queues available."
+msgstr "Non ci sono code di stampa disponibili."
+
+#: ../system-config-printer.py:5583
msgid "Parallel Port"
msgstr "Porta parallela"
-#: ../system-config-printer.py:5431
+#: ../system-config-printer.py:5585
msgid "Serial Port"
msgstr "Porta seriale"
-#: ../system-config-printer.py:5433
+#: ../system-config-printer.py:5587
msgid "USB"
msgstr "USB"
-#: ../system-config-printer.py:5435 ../system-config-printer.py:5438
+#: ../system-config-printer.py:5589
+#: ../system-config-printer.py:5592
msgid "HP Linux Imaging and Printing (HPLIP)"
msgstr "HP Linux Imaging and Printing (HPLIP)"
-#: ../system-config-printer.py:5440
+#: ../system-config-printer.py:5594
msgid "Hardware Abstraction Layer (HAL)"
msgstr "Hardware Abstraction Layer (HAL)"
-#: ../system-config-printer.py:5442
+#: ../system-config-printer.py:5596
msgid "AppSocket/HP JetDirect"
msgstr "AppSocket/HP JetDirect"
-#: ../system-config-printer.py:5451
+#: ../system-config-printer.py:5605
#, python-format
msgid "LPD/LPR queue '%s'"
msgstr "Coda LPD/LPR '%s'"
-#: ../system-config-printer.py:5453
+#: ../system-config-printer.py:5607
msgid "LPD/LPR queue"
msgstr "Coda LPD/LPR"
-#: ../system-config-printer.py:5456
+#: ../system-config-printer.py:5610
msgid "Windows Printer via SAMBA"
msgstr "Stampante Windows via SAMBA"
-#: ../system-config-printer.py:5458 ../glade/NewPrinterWindow.glade.h:64
+#: ../system-config-printer.py:5612
+#: ../glade/NewPrinterWindow.glade.h:65
msgid "IPP"
msgstr "IPP"
-#: ../system-config-printer.py:5460
+#: ../system-config-printer.py:5614
msgid "HTTP"
msgstr "HTTP"
-#: ../system-config-printer.py:5542
+#: ../system-config-printer.py:5696
msgid "A printer connected to the parallel port."
msgstr "Una stampante connessa alla porta parallela."
-#: ../system-config-printer.py:5544
+#: ../system-config-printer.py:5698
msgid "A printer connected to a USB port."
msgstr "Una stampante connessa ad una porta USB."
-#: ../system-config-printer.py:5546
-msgid ""
-"HPLIP software driving a printer, or the printer function of a multi-"
-"function device."
-msgstr ""
-"Il software HPLIP gestisce una stampante, o le funzioni di stampa di una "
-"periferica multi-funzionale."
-
-#: ../system-config-printer.py:5549
-msgid ""
-"HPLIP software driving a fax machine, or the fax function of a multi-"
-"function device."
-msgstr ""
-"Il software HPLIP gestisce una macchina fax, o le funzionalità fax di una "
-"periferica multi-funzionale."
+#: ../system-config-printer.py:5700
+msgid "HPLIP software driving a printer, or the printer function of a multi-function device."
+msgstr "Il software HPLIP gestisce una stampante, o le funzioni di stampa di una periferica multi-funzionale."
+
+#: ../system-config-printer.py:5703
+msgid "HPLIP software driving a fax machine, or the fax function of a multi-function device."
+msgstr "Il software HPLIP gestisce una macchina fax, o le funzionalità fax di una periferica multi-funzionale."
-#: ../system-config-printer.py:5552
+#: ../system-config-printer.py:5706
msgid "Local printer detected by the Hardware Abstraction Layer (HAL)."
msgstr "Stampante locale individuata dall'Hardware Abstraction Layer (HAL)."
-#: ../system-config-printer.py:5752
+#: ../system-config-printer.py:5906
msgid "No printer was found at that address."
msgstr "A quell'indirizzo non è stata trovata nessuna stampante."
-#: ../system-config-printer.py:5889
+#: ../system-config-printer.py:6043
msgid "-- Select from search results --"
msgstr "-- Scegliere dai risultati della ricerca --"
-#: ../system-config-printer.py:5891
+#: ../system-config-printer.py:6045
msgid "-- No matches found --"
msgstr "-- Nessun risultato --"
-#: ../system-config-printer.py:6077
+#: ../system-config-printer.py:6231
msgid " (recommended)"
msgstr " (raccomandato)"
-#: ../system-config-printer.py:6091
+#: ../system-config-printer.py:6245
msgid "This PPD is generated by foomatic."
msgstr "Questo PPD è generato da foomatic."
-#: ../system-config-printer.py:6115
+#: ../system-config-printer.py:6269
msgid "OpenPrinting"
msgstr "OpenPrinting"
-#: ../system-config-printer.py:6126
+#: ../system-config-printer.py:6280
msgid "Distributable"
msgstr "Distribuibile"
-#: ../system-config-printer.py:6167
+#: ../system-config-printer.py:6321
msgid ", "
msgstr ", "
-#: ../system-config-printer.py:6172
+#: ../system-config-printer.py:6326
#, python-format
msgid ""
"\n"
@@ -1432,20 +1477,21 @@ msgstr ""
"\n"
"(%s)"
-#: ../system-config-printer.py:6177
+#: ../system-config-printer.py:6331
msgid "No support contacts known"
msgstr "Nessun contatto di supporto conosciuto"
-#: ../system-config-printer.py:6181 ../system-config-printer.py:6194
+#: ../system-config-printer.py:6335
+#: ../system-config-printer.py:6348
msgid "Not specified."
msgstr "Non specificata."
#. Foomatic database problem of some sort.
-#: ../system-config-printer.py:6234
+#: ../system-config-printer.py:6388
msgid "Database error"
msgstr "Errore del database"
-#: ../system-config-printer.py:6235
+#: ../system-config-printer.py:6389
#, python-format
msgid "The '%s' driver cannot be used with printer '%s %s'."
msgstr "Il driver '%s' non può essere utilizzato con la stampante '%s %s'."
@@ -1453,68 +1499,65 @@ msgstr "Il driver '%s' non può essere u
#. This printer references some XML that is not
#. installed by default. Point the user at the
#. package they need to install.
-#: ../system-config-printer.py:6245
+#: ../system-config-printer.py:6399
#, python-format
msgid "You will need to install the '%s' package in order to use this driver."
-msgstr ""
-"Per poter utilizzare questo driver occorre installare il pacchetto '%s'."
+msgstr "Per poter utilizzare questo driver occorre installare il pacchetto '%s'."
#. This error came from trying to open the PPD file.
-#: ../system-config-printer.py:6252
+#: ../system-config-printer.py:6406
msgid "PPD error"
msgstr "Errore del file PPD"
-#: ../system-config-printer.py:6254
+#: ../system-config-printer.py:6408
msgid "Failed to read PPD file. Possible reason follows:"
msgstr "Lettura file PPD fallita. Seguono possibili ragioni:"
#. Failed to get PPD downloaded from OpenPrinting XXX
-#: ../system-config-printer.py:6271
+#: ../system-config-printer.py:6425
msgid "Downloadable drivers"
msgstr "Driver disponibili per il download"
-#: ../system-config-printer.py:6272
+#: ../system-config-printer.py:6426
msgid "Failed to download PPD."
msgstr "Errore nel download di PPD."
-#: ../system-config-printer.py:6279
+#: ../system-config-printer.py:6433
msgid "fetching PPD"
msgstr "recupero PPD"
-#: ../system-config-printer.py:6308 ../system-config-printer.py:6346
+#: ../system-config-printer.py:6462
+#: ../system-config-printer.py:6500
msgid "No Installable Options"
msgstr "Nessuna opzione installabile"
-#: ../system-config-printer.py:6394
+#: ../system-config-printer.py:6548
#, python-format
msgid "adding printer %s"
msgstr "aggiunta stampante %s"
-#: ../system-config-printer.py:6567
+#: ../system-config-printer.py:6721
msgid "Would you like to print a test page?"
msgstr "Si desidera stampare una pagina di prova?"
-#: ../system-config-printer.py:6620
+#: ../system-config-printer.py:6774
msgid "Install driver"
msgstr "Installazione driver"
-#: ../system-config-printer.py:6621 ../troubleshoot/CheckPPDSanity.py:131
+#: ../system-config-printer.py:6775
+#: ../troubleshoot/CheckPPDSanity.py:131
#, python-format
msgid "Printer '%s' requires the %s package but it is not currently installed."
msgstr "La stampante '%s' necessita dell'installazione del pacchetto %s."
-#: ../system-config-printer.py:6637
+#: ../system-config-printer.py:6791
msgid "Missing driver"
msgstr "Driver mancante"
-#: ../system-config-printer.py:6638
+#: ../system-config-printer.py:6792
#, python-format
-msgid ""
-"Printer '%s' requires the '%s' program but it is not currently installed. "
-"Please install it before using this printer."
-msgstr ""
-"La stampante '%s' ha bisogno del pacchetto '%s' non ancora installato. Vi "
-"preghiamo di installarlo prima di utilizzare la stampante."
+msgid "Printer '%s' requires the '%s' program but it is not currently installed. Please install it before using this printer."
+msgstr "La stampante '%s' ha bisogno del pacchetto '%s' non ancora installato. Vi preghiamo di installarlo prima di utilizzare la stampante."
#: ../glade/AboutDialog.glade.h:1
msgid "A CUPS configuration tool."
@@ -1526,33 +1569,17 @@ msgstr "Copyright © 2006-2008 Red Hat,
#: ../glade/AboutDialog.glade.h:3
msgid ""
-"This program is free software; you can redistribute it and/or modify it "
-"under the terms of the GNU General Public License as published by the Free "
-"Software Foundation; either version 2 of the License, or (at your option) "
-"any later version.\n"
+"This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\n"
"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
-"more details.\n"
+"This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n"
"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program; if not, write to the Free Software Foundation, Inc., 675 Mass "
-"Ave, Cambridge, MA 02139, USA."
+"You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA."
msgstr ""
-"This program is free software; you can redistribute it and/or modify it "
-"under the terms of the GNU General Public License as published by the Free "
-"Software Foundation; either version 2 of the License, or (at your option) "
-"any later version.\n"
+"This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\n"
"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
-"more details.\n"
+"This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n"
"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program; if not, write to the Free Software Foundation, Inc., 675 Mass "
-"Ave, Cambridge, MA 02139, USA."
+"You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA."
#: ../glade/AboutDialog.glade.h:8
msgid "system-config-printer"
@@ -1584,8 +1611,7 @@ msgstr "Cifratura richi_esta"
#: ../glade/ConnectingDialog.glade.h:3
msgid "<span weight=\"bold\" size=\"larger\">Connecting to CUPS server</span>"
-msgstr ""
-"<span weight=\"bold\" size=\"larger\">Connessione al server CUPS</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Connessione al server CUPS</span>"
#: ../glade/ConnectingDialog.glade.h:4
msgid "Connecting to CUPS server"
@@ -1595,6 +1621,10 @@ msgstr "Connessione al server CUPS"
msgid "_Install"
msgstr "_Installa"
+#: ../glade/IPPBrowseDialog.glade.h:1
+msgid "IPP Browser"
+msgstr "Browser IPP"
+
#: ../glade/JobsWindow.glade.h:1
msgid "Show _completed jobs"
msgstr "Mostra lavori _completati"
@@ -1611,7 +1641,8 @@ msgstr "_Lavoro"
msgid "_Refresh"
msgstr "Aggio_rna"
-#: ../glade/JobsWindow.glade.h:5 ../glade/PrintersWindow.glade.h:17
+#: ../glade/JobsWindow.glade.h:5
+#: ../glade/PrintersWindow.glade.h:17
msgid "_View"
msgstr "_Mostra"
@@ -1693,8 +1724,7 @@ msgstr "<i>smb://[workgroup/]server[:por
#: ../glade/NewPrinterWindow.glade.h:18
msgid "<span weight=\"bold\" size=\"larger\">Choose Class Members</span>"
-msgstr ""
-"<span weight=\"bold\" size=\"larger\">Scegliere i membri della classe</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Scegliere i membri della classe</span>"
#: ../glade/NewPrinterWindow.glade.h:19
msgid "<span weight=\"bold\" size=\"larger\">Choose Driver</span>"
@@ -1799,7 +1829,8 @@ msgstr ""
msgid "Description:"
msgstr "Descrizione:"
-#: ../glade/NewPrinterWindow.glade.h:51 ../troubleshoot/DeviceListed.py:40
+#: ../glade/NewPrinterWindow.glade.h:51
+#: ../troubleshoot/DeviceListed.py:40
msgid "Device URI"
msgstr "URI dispositivo"
@@ -1820,248 +1851,211 @@ msgid "Empty"
msgstr "Vuota"
#: ../glade/NewPrinterWindow.glade.h:57
+msgid "Find _Queue..."
+msgstr "Cerca _Coda di stampa..."
+
+#: ../glade/NewPrinterWindow.glade.h:58
msgid "Flow Control"
msgstr "Controllo di flusso"
-#: ../glade/NewPrinterWindow.glade.h:58
-msgid ""
-"For the printer you have selected there are drivers available for download."
+#: ../glade/NewPrinterWindow.glade.h:59
+msgid "For the printer you have selected there are drivers available for download."
msgstr "Driver per la stampante scelta disponibili per il download."
-#: ../glade/NewPrinterWindow.glade.h:59
+#: ../glade/NewPrinterWindow.glade.h:60
msgid "Free software"
msgstr "Software libero"
-#: ../glade/NewPrinterWindow.glade.h:60
+#: ../glade/NewPrinterWindow.glade.h:61
msgid "Graphics:"
msgstr "Grafica:"
-#: ../glade/NewPrinterWindow.glade.h:61
+#: ../glade/NewPrinterWindow.glade.h:62
msgid "Host:"
msgstr "Host:"
-#: ../glade/NewPrinterWindow.glade.h:62
+#: ../glade/NewPrinterWindow.glade.h:63
msgid "Human-readable description such as \"HP LaserJet with Duplexer\""
msgstr "Descrizione umanamente leggibile, tipo \"HP LaserJet con Duplexer\""
-#: ../glade/NewPrinterWindow.glade.h:63
+#: ../glade/NewPrinterWindow.glade.h:64
msgid "Human-readable location such as \"Lab 1\""
msgstr "Locazione umanamente leggibile, tipo \"Laboratorio 1\""
-#: ../glade/NewPrinterWindow.glade.h:65
+#: ../glade/NewPrinterWindow.glade.h:66
msgid "LPD"
msgstr "LPD"
-#: ../glade/NewPrinterWindow.glade.h:66
+#: ../glade/NewPrinterWindow.glade.h:67
msgid "License:"
msgstr "Licenza:"
-#: ../glade/NewPrinterWindow.glade.h:67
+#: ../glade/NewPrinterWindow.glade.h:68
msgid "Line art:"
msgstr "Line art:"
-#: ../glade/NewPrinterWindow.glade.h:68
+#: ../glade/NewPrinterWindow.glade.h:69
msgid "Local Driver"
msgstr "Driver locale"
-#: ../glade/NewPrinterWindow.glade.h:69
+#: ../glade/NewPrinterWindow.glade.h:70
msgid "Make and model:"
msgstr "Marca e modello:"
-#: ../glade/NewPrinterWindow.glade.h:70
+#: ../glade/NewPrinterWindow.glade.h:71
msgid "Manufacturer"
msgstr "Produttore"
-#: ../glade/NewPrinterWindow.glade.h:71
+#: ../glade/NewPrinterWindow.glade.h:72
msgid "Network"
msgstr "Rete"
-#: ../glade/NewPrinterWindow.glade.h:73
+#: ../glade/NewPrinterWindow.glade.h:74
msgid "No, I do not accept this license"
msgstr "No, non accetto questa licenza"
-#: ../glade/NewPrinterWindow.glade.h:74
+#: ../glade/NewPrinterWindow.glade.h:75
msgid "Parity"
msgstr "Parità"
-#: ../glade/NewPrinterWindow.glade.h:76
+#: ../glade/NewPrinterWindow.glade.h:77
msgid "Patented algorithms"
msgstr "Algoritmi proprietari"
-#: ../glade/NewPrinterWindow.glade.h:77
+#: ../glade/NewPrinterWindow.glade.h:78
msgid "Photo:"
msgstr "Foto:"
-#: ../glade/NewPrinterWindow.glade.h:78
+#: ../glade/NewPrinterWindow.glade.h:79
msgid "Port number:"
msgstr "Numero di porta:"
-#: ../glade/NewPrinterWindow.glade.h:79
-msgid ""
-"PostScript Printer Description (PPD) files can often be found on the driver "
-"disk that comes with the printer. For PostScript printers they are often "
-"part of the Windows<sup>®</sup> driver."
-msgstr ""
-"I file PostScript Printer Description (PPD) possono essere spesso trovati "
-"sul disco driver venduto assieme alla stampante. Per le stampanti PostScript "
-"essi sono spesso parte del driver Windows<sup>®</sup>."
-
#: ../glade/NewPrinterWindow.glade.h:80
+msgid "PostScript Printer Description (PPD) files can often be found on the driver disk that comes with the printer. For PostScript printers they are often part of the Windows<sup>®</sup> driver."
+msgstr "I file PostScript Printer Description (PPD) possono essere spesso trovati sul disco driver venduto assieme alla stampante. Per le stampanti PostScript essi sono spesso parte del driver Windows<sup>®</sup>."
+
+#: ../glade/NewPrinterWindow.glade.h:81
msgid "Printer model:"
msgstr "Modello stampante:"
-#: ../glade/NewPrinterWindow.glade.h:81
+#: ../glade/NewPrinterWindow.glade.h:82
msgid "Probe"
msgstr "Esamina"
-#: ../glade/NewPrinterWindow.glade.h:82
+#: ../glade/NewPrinterWindow.glade.h:83
msgid "Prompt user if authentication is required"
msgstr "Indica all'utente se è necessaria l'autenticazione"
-#: ../glade/NewPrinterWindow.glade.h:83
+#: ../glade/NewPrinterWindow.glade.h:84
msgid "Provide PPD file"
msgstr "Specifica un file PPD"
-#: ../glade/NewPrinterWindow.glade.h:84
+#: ../glade/NewPrinterWindow.glade.h:85
msgid "Queue:"
msgstr "Coda:"
-#: ../glade/NewPrinterWindow.glade.h:85
+#: ../glade/NewPrinterWindow.glade.h:86
msgid "SCSI"
msgstr "SCSI"
-#: ../glade/NewPrinterWindow.glade.h:86
+#: ../glade/NewPrinterWindow.glade.h:87
msgid "SMB"
msgstr "SMB"
-#: ../glade/NewPrinterWindow.glade.h:87
+#: ../glade/NewPrinterWindow.glade.h:88
msgid "Search for a printer driver to download"
msgstr "Cerca un driver di stampa da scaricare"
-#: ../glade/NewPrinterWindow.glade.h:88
+#: ../glade/NewPrinterWindow.glade.h:89
msgid "Searching..."
msgstr "Ricerca in corso..."
-#: ../glade/NewPrinterWindow.glade.h:89
+#: ../glade/NewPrinterWindow.glade.h:90
msgid "Select A File"
msgstr "Selezionare un file"
-#: ../glade/NewPrinterWindow.glade.h:90
+#: ../glade/NewPrinterWindow.glade.h:91
msgid "Select printer from database"
msgstr "Selezionare stampante dal database"
-#: ../glade/NewPrinterWindow.glade.h:91
+#: ../glade/NewPrinterWindow.glade.h:92
msgid "Serial"
msgstr "Seriale"
-#: ../glade/NewPrinterWindow.glade.h:92
+#: ../glade/NewPrinterWindow.glade.h:93
msgid "Set authentication details now"
msgstr "Imposta ora le informazioni sull'autenticazione"
-#: ../glade/NewPrinterWindow.glade.h:93
+#: ../glade/NewPrinterWindow.glade.h:94
msgid "Short name for this printer such as \"laserjet\""
msgstr "Nome abbreviato per questa stampante, ad esempio \"laserjet\""
-#: ../glade/NewPrinterWindow.glade.h:94
+#: ../glade/NewPrinterWindow.glade.h:95
msgid "Supplier:"
msgstr "Fornito da:"
-#: ../glade/NewPrinterWindow.glade.h:95
+#: ../glade/NewPrinterWindow.glade.h:96
msgid "Support:"
msgstr "Supporto:"
-#: ../glade/NewPrinterWindow.glade.h:96
+#: ../glade/NewPrinterWindow.glade.h:97
msgid "Text:"
msgstr "Testo:"
-#: ../glade/NewPrinterWindow.glade.h:97
-msgid ""
-"The foomatic printer database contains various manufacturer provided "
-"PostScript Printer Description (PPD) files and also can generate PPD files "
-"for a large number of (non PostScript) printers. But in general manufacturer "
-"provided PPD files provide better access to the specific features of the "
-"printer."
-msgstr ""
-"Il database di stampanti foomatic contiene vari file PostScript Printer "
-"Description (PPD) forniti dai produttori di stampanti e può generare file "
-"PPD per un gran numero di stampanti non PostScript. In generale i file PPD "
-"forniti dai produttori forniscono un miglior accesso alle caratteristiche "
-"specifiche della stampante."
-
#: ../glade/NewPrinterWindow.glade.h:98
-msgid ""
-"These drivers do not come from your operating system supplier and will not "
-"be covered by their commercial support. See the support and license terms "
-"of the driver's supplier."
-msgstr ""
-"Questi driver non vengono forniti dal produttore del sistema operativo e non "
-"sono coperti da alcuna garanzia. Per maggiori informazioni consultare i "
-"termini d'uso e la licenza utente del produttore."
+msgid "The foomatic printer database contains various manufacturer provided PostScript Printer Description (PPD) files and also can generate PPD files for a large number of (non PostScript) printers. But in general manufacturer provided PPD files provide better access to the specific features of the printer."
+msgstr "Il database di stampanti foomatic contiene vari file PostScript Printer Description (PPD) forniti dai produttori di stampanti e può generare file PPD per un gran numero di stampanti non PostScript. In generale i file PPD forniti dai produttori forniscono un miglior accesso alle caratteristiche specifiche della stampante."
#: ../glade/NewPrinterWindow.glade.h:99
-msgid ""
-"This driver supports additional hardware that may be installed in the "
-"printer."
-msgstr ""
-"Questo driver supporta hardware aggiuntivo eventualmente installato nella "
-"stampante."
+msgid "These drivers do not come from your operating system supplier and will not be covered by their commercial support. See the support and license terms of the driver's supplier."
+msgstr "Questi driver non vengono forniti dal produttore del sistema operativo e non sono coperti da alcuna garanzia. Per maggiori informazioni consultare i termini d'uso e la licenza utente del produttore."
#: ../glade/NewPrinterWindow.glade.h:100
-msgid ""
-"This is done by assuming that options with the same name do have the same "
-"meaning. Settings of options that are not present in the new PPD will be "
-"lost and options only present in the new PPD will be set to default."
-msgstr ""
-"Si assume che le opzioni con lo stesso nome abbiano lo stesso significato. "
-"Le impostazioni non presenti nel nuovo PPD saranno perse mentre le opzioni "
-"presenti solamente nel nuovo PPD saranno impostate come predefinite."
+msgid "This driver supports additional hardware that may be installed in the printer."
+msgstr "Questo driver supporta hardware aggiuntivo eventualmente installato nella stampante."
#: ../glade/NewPrinterWindow.glade.h:101
-msgid ""
-"This way all current option settings will be lost. The default settings of "
-"the new PPD will be used. "
-msgstr ""
-"In questo modo tutte le vecchie impostazioni saranno perse. Verranno usate "
-"le impostazioni predefinite del nuovo PPD. "
+msgid "This is done by assuming that options with the same name do have the same meaning. Settings of options that are not present in the new PPD will be lost and options only present in the new PPD will be set to default."
+msgstr "Si assume che le opzioni con lo stesso nome abbiano lo stesso significato. Le impostazioni non presenti nel nuovo PPD saranno perse mentre le opzioni presenti solamente nel nuovo PPD saranno impostate come predefinite."
#: ../glade/NewPrinterWindow.glade.h:102
+msgid "This way all current option settings will be lost. The default settings of the new PPD will be used. "
+msgstr "In questo modo tutte le vecchie impostazioni saranno perse. Verranno usate le impostazioni predefinite del nuovo PPD. "
+
+#: ../glade/NewPrinterWindow.glade.h:103
msgid "Try to copy the option settings over from the old PPD. "
msgstr "Tentativo di copia delle impostazioni dal vecchio PPD. "
-#: ../glade/NewPrinterWindow.glade.h:103
+#: ../glade/NewPrinterWindow.glade.h:104
msgid "URI:"
msgstr "URI:"
-#: ../glade/NewPrinterWindow.glade.h:105
+#: ../glade/NewPrinterWindow.glade.h:106
msgid "Use the new PPD (Postscript Printer Description) as is."
msgstr "Usa il nuovo PPD (Postscript Printer Description) così com'è."
-#: ../glade/NewPrinterWindow.glade.h:107
-msgid ""
-"With this choice no driver download will be performed. In the next steps a "
-"locally installed driver will be selected."
-msgstr ""
-"Scegliendo questa opzione non verranno scaricati driver. Nel passo "
-"successivo verrà richiesta la selezione di un driver installato in locale."
-
#: ../glade/NewPrinterWindow.glade.h:108
+msgid "With this choice no driver download will be performed. In the next steps a locally installed driver will be selected."
+msgstr "Scegliendo questa opzione non verranno scaricati driver. Nel passo successivo verrà richiesta la selezione di un driver installato in locale."
+
+#: ../glade/NewPrinterWindow.glade.h:109
msgid "Yes, I accept this license"
msgstr "Si, accetto questa licenza"
-#: ../glade/NewPrinterWindow.glade.h:109
+#: ../glade/NewPrinterWindow.glade.h:110
msgid "_Search"
msgstr "_Cerca"
-#: ../glade/NewPrinterWindow.glade.h:110
+#: ../glade/NewPrinterWindow.glade.h:111
msgid "_Verify..."
msgstr "_Verifica..."
-#: ../glade/NewPrinterWindow.glade.h:111
+#: ../glade/NewPrinterWindow.glade.h:112
#: ../glade/PrinterPropertiesDialog.glade.h:128
msgid "move left"
msgstr "sposta a sinistra"
-#: ../glade/NewPrinterWindow.glade.h:112
+#: ../glade/NewPrinterWindow.glade.h:113
#: ../glade/PrinterPropertiesDialog.glade.h:129
msgid "move right"
msgstr "sposta a destra"
@@ -2453,14 +2447,8 @@ msgid "Sides:"
msgstr "Fronte-retro:"
#: ../glade/PrinterPropertiesDialog.glade.h:121
-msgid ""
-"Specify the default job options for this printer. Jobs arriving at this "
-"print server will have these options added if they are not already set by "
-"the application."
-msgstr ""
-"Specificare le opzioni predefinite dei lavori per questa stampante. Ai "
-"lavori accettati da questo server di stampa saranno aggiunte queste opzioni "
-"se non sono già state impostate dall'applicazione."
+msgid "Specify the default job options for this printer. Jobs arriving at this print server will have these options added if they are not already set by the application."
+msgstr "Specificare le opzioni predefinite dei lavori per questa stampante. Ai lavori accettati da questo server di stampa saranno aggiunte queste opzioni se non sono già state impostate dall'applicazione."
#: ../glade/PrinterPropertiesDialog.glade.h:122
msgid "Starting Banner:"
@@ -2472,9 +2460,7 @@ msgstr "Non ci sono messaggi di stato pe
#: ../glade/PrinterPropertiesDialog.glade.h:124
msgid "To add a new option, enter its name in the box below and click to add."
-msgstr ""
-"Per aggiungere nuove opzioni, immettere il loro nome nella casella "
-"sottostante e cliccare per aggiungerle."
+msgstr "Per aggiungere nuove opzioni, immettere il loro nome nella casella sottostante e cliccare per aggiungerle."
#: ../glade/PrinterPropertiesDialog.glade.h:125
msgid "Top margin:"
@@ -2590,7 +2576,7 @@ msgstr "Salva le informazioni di debug p
#: ../glade/ServerSettingsDialog.glade.h:7
msgid "_Advanced..."
-msgstr ""
+msgstr "_Avanzate..."
#: ../glade/ServerSettingsDialog.glade.h:8
msgid "_Publish shared printers connected to this system"
@@ -2714,7 +2700,8 @@ msgstr "Non connesso?"
msgid "Printer '%s' may not be connected."
msgstr "La stampante '%s' potrebbe non essere connessa."
-#: ../statereason.py:105 ../statereason.py:121
+#: ../statereason.py:105
+#: ../statereason.py:121
msgid "Printer error"
msgstr "Errore della stampante"
@@ -2736,15 +2723,17 @@ msgstr "Avviso stampante"
msgid "Printer '%s': '%s'."
msgstr "Stampante '%s': '%s'."
-#: ../timedops.py:101 ../timedops.py:169
+#: ../timedops.py:101
+#: ../timedops.py:169
msgid "Please wait"
msgstr "Operazione in corso"
-#: ../timedops.py:107 ../timedops.py:176
+#: ../timedops.py:107
+#: ../timedops.py:176
msgid "Gathering information"
msgstr "Recupero informazioni"
-#: ../ToolbarSearchEntry.py:69
+#: ../ToolbarSearchEntry.py:73
msgid "_Filter:"
msgstr "_Filtro:"
@@ -2753,35 +2742,23 @@ msgid "Printing troubleshooter"
msgstr "Risoluzione problemi di stampa"
#: ../troubleshoot/base.py:33
-msgid ""
-"To start this tool, select System->Administration->Printing from the main "
-"menu."
-msgstr ""
-"Per eseguire questo programma, lanciare Sistema->Amministrazione->Stampa dal "
-"menu principale."
+msgid "To start this tool, select System->Administration->Printing from the main menu."
+msgstr "Per eseguire questo programma, lanciare Sistema->Amministrazione->Stampa dal menu principale."
#: ../troubleshoot/CheckLocalServerPublishing.py:28
msgid "Server Not Exporting Printers"
msgstr "Il server non esporta stampanti condivise"
#: ../troubleshoot/CheckLocalServerPublishing.py:29
-msgid ""
-"Although one or more printers are marked as being shared, this print server "
-"is not exporting shared printers to the network."
-msgstr ""
-"Anche se alcune stampanti sono contrassegnate come condivise, questo server "
-"di stampa non esporta queste stampanti sulla rete."
+msgid "Although one or more printers are marked as being shared, this print server is not exporting shared printers to the network."
+msgstr "Anche se alcune stampanti sono contrassegnate come condivise, questo server di stampa non esporta queste stampanti sulla rete."
#: ../troubleshoot/CheckLocalServerPublishing.py:33
-msgid ""
-"Enable the 'Publish shared printers connected to this system' option in the "
-"server settings using the printing administration tool."
-msgstr ""
-"Abilitare l'opzione 'Pubblicare le stampanti condivise collegate a questo "
-"sistema' nelle impostazioni del server usando lo strumento di "
-"amministrazione della stampa."
+msgid "Enable the 'Publish shared printers connected to this system' option in the server settings using the printing administration tool."
+msgstr "Abilitare l'opzione 'Pubblicare le stampanti condivise collegate a questo sistema' nelle impostazioni del server usando lo strumento di amministrazione della stampa."
-#: ../troubleshoot/CheckPPDSanity.py:44 ../applet.py:184
+#: ../troubleshoot/CheckPPDSanity.py:44
+#: ../applet.py:184
msgid "Install"
msgstr "Installazione"
@@ -2791,12 +2768,8 @@ msgstr "File PPD non valido"
#: ../troubleshoot/CheckPPDSanity.py:106
#, python-format
-msgid ""
-"The PPD file for printer '%s' does not conform to the specification. "
-"Possible reason follows:"
-msgstr ""
-"Il file PPD per la stampante '%s' non è conforme alle specifiche. Seguono "
-"le possibili ragioni:"
+msgid "The PPD file for printer '%s' does not conform to the specification. Possible reason follows:"
+msgstr "Il file PPD per la stampante '%s' non è conforme alle specifiche. Seguono le possibili ragioni:"
#. Perhaps cupstestppd is not in the path.
#: ../troubleshoot/CheckPPDSanity.py:112
@@ -2810,30 +2783,26 @@ msgstr "Driver di stampa mancante"
#: ../troubleshoot/CheckPPDSanity.py:136
#, python-format
-msgid ""
-"Printer '%s' requires the '%s' program but it is not currently installed."
-msgstr ""
-"La stampante '%s' necessita del programma '%s' che non risulta installato."
+msgid "Printer '%s' requires the '%s' program but it is not currently installed."
+msgstr "La stampante '%s' necessita del programma '%s' che non risulta installato."
#: ../troubleshoot/ChooseNetworkPrinter.py:29
msgid "Choose Network Printer"
msgstr "Selezionare stampante di rete"
#: ../troubleshoot/ChooseNetworkPrinter.py:30
-msgid ""
-"Please select the network printer you are trying to use from the list below. "
-"If it does not appear in the list, select 'Not listed'."
-msgstr ""
-"Selezionare la stampante di rete che si intende usare dalla seguente lista."
-"Se non è compresa nella lista, selezionare 'Non in elenco'."
+msgid "Please select the network printer you are trying to use from the list below. If it does not appear in the list, select 'Not listed'."
+msgstr "Selezionare la stampante di rete che si intende usare dalla seguente lista.Se non è compresa nella lista, selezionare 'Non in elenco'."
#: ../troubleshoot/ChooseNetworkPrinter.py:39
-#: ../troubleshoot/ChoosePrinter.py:40 ../troubleshoot/DeviceListed.py:38
+#: ../troubleshoot/ChoosePrinter.py:40
+#: ../troubleshoot/DeviceListed.py:38
msgid "Information"
msgstr "Informazioni"
#: ../troubleshoot/ChooseNetworkPrinter.py:75
-#: ../troubleshoot/ChoosePrinter.py:64 ../troubleshoot/DeviceListed.py:70
+#: ../troubleshoot/ChoosePrinter.py:64
+#: ../troubleshoot/DeviceListed.py:70
msgid "Not listed"
msgstr "Non in elenco"
@@ -2842,37 +2811,24 @@ msgid "Choose Printer"
msgstr "Selezionare stampante"
#: ../troubleshoot/ChoosePrinter.py:31
-msgid ""
-"Please select the printer you are trying to use from the list below. If it "
-"does not appear in the list, select 'Not listed'."
-msgstr ""
-"Selezionare la stampante che si intende usare dalla seguente lista.Se non è "
-"compresa nella lista, selezionare 'Non in elenco'."
+msgid "Please select the printer you are trying to use from the list below. If it does not appear in the list, select 'Not listed'."
+msgstr "Selezionare la stampante che si intende usare dalla seguente lista.Se non è compresa nella lista, selezionare 'Non in elenco'."
#: ../troubleshoot/DeviceListed.py:30
msgid "Choose Device"
msgstr "Selezionare Dispositivo"
#: ../troubleshoot/DeviceListed.py:31
-msgid ""
-"Please select the device you want to use from the list below. If it does not "
-"appear in the list, select 'Not listed'."
-msgstr ""
-"Selezionare il dispositivo che si intende usare dalla seguente lista. Se non "
-"è compreso nella lista, selezionare 'Non in elenco'."
+msgid "Please select the device you want to use from the list below. If it does not appear in the list, select 'Not listed'."
+msgstr "Selezionare il dispositivo che si intende usare dalla seguente lista. Se non è compreso nella lista, selezionare 'Non in elenco'."
#: ../troubleshoot/ErrorLogCheckpoint.py:31
msgid "Debugging"
msgstr "Debug"
#: ../troubleshoot/ErrorLogCheckpoint.py:32
-msgid ""
-"I would like to enable debugging output from the CUPS scheduler. This may "
-"cause the scheduler to restart. Click the button below to enable debugging."
-msgstr ""
-"Sarebbe opportuno abilitare il debug del servizio CUPS. Ciò "
-"potrebbecomportare il riavvio del servizio. Se si desidera abilitare il "
-"debug cliccare il pulsante seguente."
+msgid "I would like to enable debugging output from the CUPS scheduler. This may cause the scheduler to restart. Click the button below to enable debugging."
+msgstr "Sarebbe opportuno abilitare il debug del servizio CUPS. Ciò potrebbecomportare il riavvio del servizio. Se si desidera abilitare il debug cliccare il pulsante seguente."
#: ../troubleshoot/ErrorLogCheckpoint.py:36
msgid "Enable Debugging"
@@ -2899,13 +2855,8 @@ msgid "Incorrect Page Size"
msgstr "Dimensione pagina non corretta"
#: ../troubleshoot/Locale.py:30
-msgid ""
-"The page size for the print job was not the printer's default page size. If "
-"this is not intentional it may cause alignment problems."
-msgstr ""
-"La dimensione della pagina per il lavoro in stampa non corrisponde alla "
-"dimensione predefinita per la stampante. Se ciò non è intenzionale potrebbe "
-"causare dei problemi di allineamento."
+msgid "The page size for the print job was not the printer's default page size. If this is not intentional it may cause alignment problems."
+msgstr "La dimensione della pagina per il lavoro in stampa non corrisponde alla dimensione predefinita per la stampante. Se ciò non è intenzionale potrebbe causare dei problemi di allineamento."
#: ../troubleshoot/Locale.py:43
msgid "Print job page size:"
@@ -2961,13 +2912,8 @@ msgid "Test Page"
msgstr "Pagina di prova"
#: ../troubleshoot/PrintTestPage.py:63
-msgid ""
-"Now print a test page. If you are having problems printing a specific "
-"document, print that document now and mark the print job below."
-msgstr ""
-"Eseguire la stampa di una pagina di prova. Se si sono verificati problemi "
-"nella stampa di uno specifico documento, stamparlo ora e selezionarlo "
-"nell'elenco seguente."
+msgid "Now print a test page. If you are having problems printing a specific document, print that document now and mark the print job below."
+msgstr "Eseguire la stampa di una pagina di prova. Se si sono verificati problemi nella stampa di uno specifico documento, stamparlo ora e selezionarlo nell'elenco seguente."
#: ../troubleshoot/PrintTestPage.py:75
msgid "Cancel All Jobs"
@@ -3010,12 +2956,8 @@ msgid "The queue '%s' is not enabled."
msgstr "La coda di stampa '%s' non è abilitata."
#: ../troubleshoot/QueueNotEnabled.py:71
-msgid ""
-"To enable it, select the 'Enabled' checkbox in the 'Policies' tab for the "
-"printer in the printer administration tool."
-msgstr ""
-"Per abilitare la coda di stampa, selezionare 'Abilitata' nella scheda "
-"'Politica' dello strumento di amministrazione della stampa."
+msgid "To enable it, select the 'Enabled' checkbox in the 'Policies' tab for the printer in the printer administration tool."
+msgstr "Per abilitare la coda di stampa, selezionare 'Abilitata' nella scheda 'Politica' dello strumento di amministrazione della stampa."
#: ../troubleshoot/QueueRejectingJobs.py:31
msgid "Queue Rejecting Jobs"
@@ -3027,25 +2969,16 @@ msgid "The queue '%s' is rejecting jobs.
msgstr "La coda di stampa '%s' non accetta lavori."
#: ../troubleshoot/QueueRejectingJobs.py:70
-msgid ""
-"To make the queue accept jobs, select the 'Accepting Jobs' checkbox in the "
-"'Policies' tab for the printer in the printer administration tool."
-msgstr ""
-"Per abilitare l'accettazione dei lavori di stampa, selezionare 'Accetta "
-"lavori' nella scheda 'Politica' dello strumento di amministrazione della "
-"stampa."
+msgid "To make the queue accept jobs, select the 'Accepting Jobs' checkbox in the 'Policies' tab for the printer in the printer administration tool."
+msgstr "Per abilitare l'accettazione dei lavori di stampa, selezionare 'Accetta lavori' nella scheda 'Politica' dello strumento di amministrazione della stampa."
#: ../troubleshoot/RemoteAddress.py:26
msgid "Remote Address"
msgstr "Indirizzo remoto"
#: ../troubleshoot/RemoteAddress.py:27
-msgid ""
-"Please enter as many details as you can about the network address of this "
-"printer."
-msgstr ""
-"Inserire tutte le informazioni che si conoscono sull'indirizzo di rete di "
-"questa stampante."
+msgid "Please enter as many details as you can about the network address of this printer."
+msgstr "Inserire tutte le informazioni che si conoscono sull'indirizzo di rete di questa stampante."
#: ../troubleshoot/RemoteAddress.py:35
msgid "Server name:"
@@ -3060,14 +2993,8 @@ msgid "CUPS Service Stopped"
msgstr "Servizio CUPS arrestato"
#: ../troubleshoot/SchedulerNotRunning.py:29
-msgid ""
-"The CUPS print spooler does not appear to be running. To correct this, "
-"choose System->Administration->Services from the main menu and look for the "
-"'cups' service."
-msgstr ""
-"Il servizio di stampa CUPS non sembra in esecuzione. Per correggere questa "
-"situazione, lanciare Sistema->Amministrazione->Servizi dal menu principale e "
-"controllare il servizio 'cups'."
+msgid "The CUPS print spooler does not appear to be running. To correct this, choose System->Administration->Services from the main menu and look for the 'cups' service."
+msgstr "Il servizio di stampa CUPS non sembra in esecuzione. Per correggere questa situazione, lanciare Sistema->Amministrazione->Servizi dal menu principale e controllare il servizio 'cups'."
#: ../troubleshoot/ServerFirewalled.py:26
msgid "Check Server Firewall"
@@ -3079,24 +3006,16 @@ msgstr "Si è verificato un problema nel
#: ../troubleshoot/ServerFirewalled.py:42
#, python-format
-msgid ""
-"Please check to see if a firewall or router configuration is blocking TCP "
-"port %d on server '%s'."
-msgstr ""
-"Controllare che la configurazione del firewall o del router non impedisca la "
-"connessione alla porta %d sul server '%s'."
+msgid "Please check to see if a firewall or router configuration is blocking TCP port %d on server '%s'."
+msgstr "Controllare che la configurazione del firewall o del router non impedisca la connessione alla porta %d sul server '%s'."
#: ../troubleshoot/Shrug.py:26
msgid "Sorry!"
msgstr "Spiacente!"
#: ../troubleshoot/Shrug.py:27
-msgid ""
-"I have not been able to work out what the problem is, but I have collected "
-"some useful information to put in a bug report."
-msgstr ""
-"Non è stato possibile identificare il problema di stampa; tuttavia sono "
-"stati rilevati sufficienti dati per compilare un bug report."
+msgid "I have not been able to work out what the problem is, but I have collected some useful information to put in a bug report."
+msgstr "Non è stato possibile identificare il problema di stampa; tuttavia sono stati rilevati sufficienti dati per compilare un bug report."
#: ../troubleshoot/Shrug.py:32
msgid "Diagnostic Output (Advanced)"
@@ -3107,13 +3026,8 @@ msgid "Trouble-shooting Printing"
msgstr "Risoluzione dei problemi di stampa"
#: ../troubleshoot/Welcome.py:45
-msgid ""
-"In the next few screens I will ask you some questions about your problem "
-"with printing. Based on your answers I will try to suggest a solution."
-msgstr ""
-"Nelle schermate seguenti verranno poste alcune domande riguardo i problemi "
-"di stampa che si sono verificati. Basandosi sulle risposte verranno "
-"consigliate possibili soluzioni al problema."
+msgid "In the next few screens I will ask you some questions about your problem with printing. Based on your answers I will try to suggest a solution."
+msgstr "Nelle schermate seguenti verranno poste alcune domande riguardo i problemi di stampa che si sono verificati. Basandosi sulle risposte verranno consigliate possibili soluzioni al problema."
#: ../troubleshoot/Welcome.py:49
msgid "Click 'Forward' to begin."
@@ -3121,7 +3035,8 @@ msgstr "Cliccare 'Avanti' per iniziare."
#. name is a URI, no queue was generated, because no suitable
#. driver was found
-#: ../applet.py:113 ../applet.py:173
+#: ../applet.py:113
+#: ../applet.py:173
msgid "Missing printer driver"
msgstr "Driver di stampa mancante"
@@ -3152,7 +3067,8 @@ msgstr "`%s' richiede l'installazione de
msgid "`%s' is ready for printing."
msgstr "`%s' è pronta per la stampa."
-#: ../applet.py:203 ../applet.py:216
+#: ../applet.py:203
+#: ../applet.py:216
msgid "Print test page"
msgstr "Stampa pagina di prova"
@@ -3189,31 +3105,6 @@ msgstr "Gestione lavori di stampa"
msgid "Select default printer"
msgstr "Seleziona stampante predefinita"
-#~ msgid "Queue"
-#~ msgstr "Coda"
-
-#~ msgid "It is not possible to obtain a list of queues from '%s'."
-#~ msgstr "Non è possibile ottenere l'elenco delle code di stampa da '%s'."
-
-#~ msgid ""
-#~ "Obtaining a list of queues is a CUPS extension to IPP. Network printers "
-#~ "do not support it."
-#~ msgstr ""
-#~ "L'ottenimento di un elenco di code di stampa è una estensione CUPS per "
-#~ "IPP. Le stampanti di rete non lo supportano."
-
-#~ msgid "No queues"
-#~ msgstr "Nessuna coda di stampa"
-
-#~ msgid "There are no queues available."
-#~ msgstr "Non ci sono code di stampa disponibili."
-
-#~ msgid "IPP Browser"
-#~ msgstr "Browser IPP"
-
-#~ msgid "Find _Queue..."
-#~ msgstr "Cerca _Coda di stampa..."
-
#~ msgid "Job %d completed"
#~ msgstr "Lavoro %d completato"
@@ -3224,51 +3115,37 @@ msgstr "Seleziona stampante predefinita"
#, fuzzy
#~ msgid "Not Found"
#~ msgstr "Non trovato"
-
#~ msgid ""
#~ "This printer supports both printing and sending faxes. Which "
#~ "functionality should be used for this queue?"
#~ msgstr ""
#~ "Questa stampante supporta la stampa e l'invio di fax. Quale funzionalità "
#~ "deve essere utilizzata per questa coda di stampa?"
-
#~ msgid ""
#~ "Printer `%s' requires the %s package but it is not currently installed."
#~ msgstr "La stampante `%s' il pacchetto %s ma attualmente non è installato."
-
#~ msgid "Authentication Required"
#~ msgstr "Autenticazione necessaria"
-
#~ msgid "Job requires authentication to proceed."
#~ msgstr "Il lavoro necessita di una autenticazione per procedere."
-
#~ msgid "Authenticate"
#~ msgstr "Autenticare"
-
#~ msgid "Adding"
#~ msgstr "Creazione in corso"
-
#~ msgid "Adding printer"
#~ msgstr "Aggiunta stampante in corso"
-
#~ msgid "Show _printer status"
#~ msgstr "Mostra lo status della stam_pante"
-
#~ msgid "Printer status"
#~ msgstr "Stato stampante"
-
#~ msgid "1 hour and 1 minute ago"
#~ msgstr "1 ora ed 1 minuto fa"
-
#~ msgid "1 hour and %d minutes ago"
#~ msgstr "1 ora e %d minuti fa"
-
#~ msgid "%d hours and 1 minute ago"
#~ msgstr "%d ore ed 1 minuto fa"
-
#~ msgid "%d hours and %d minutes ago"
#~ msgstr "%d ore e %d minuti fa"
-
#~ msgid ""
#~ "I would like to disable debugging output from the CUPS scheduler. This "
#~ "may cause the scheduler to restart. Click the button below to disable "
@@ -3277,44 +3154,35 @@ msgstr "Seleziona stampante predefinita"
#~ "Sarebbe opportuno disabilitare il debug del servizio CUPS. Ciò potrebbe "
#~ "comportare il riavvio del servizio. Se si desidera disabilitare il debug "
#~ "cliccare il pulsante seguente."
-
#~ msgid "Disable Debugging"
#~ msgstr "Disattivare Debug"
-
#~ msgid "Debug logging disabled."
#~ msgstr "Debug disabilitato."
-
#~ msgid " ("
#~ msgstr " ("
-
#~ msgid "<b>Recommended Driver</b>"
#~ msgstr "<b>Driver raccomandati</b>"
-
#~ msgid ""
#~ "Connecting to server:\n"
#~ "%s"
#~ msgstr ""
#~ "Connessione al server: \n"
#~ "%s"
-
#~ msgid "Connecting"
#~ msgstr "Connessione in corso"
-
#~ msgid ""
#~ "Connecting to Server:\n"
#~ "%s\n"
#~ msgstr ""
#~ "Connessione al server:\n"
#~ "%s\n"
-
#~ msgid ""
#~ "Create a class from the selected printers (for failover or load-balancing)"
#~ msgstr ""
#~ "Crea una classe dalle stampanti selezionate (per failover o per il "
#~ "bilanciamento del carico)"
-
#~ msgid "Set As Default"
#~ msgstr "Imposta come Predefinita"
-
#~ msgid "_Enabled"
#~ msgstr "_Abilitata"
+
diff -up system-config-printer-1.1.10/system-config-printer.py.a6cf4d3 system-config-printer-1.1.10/system-config-printer.py
--- system-config-printer-1.1.10/system-config-printer.py.a6cf4d3 2009-07-21 15:16:35.000000000 +0100
+++ system-config-printer-1.1.10/system-config-printer.py 2009-07-31 15:09:03.249087941 +0100
@@ -152,8 +152,6 @@ def validDeviceURI (uri):
(scheme, rest) = urllib.splittype (uri)
if scheme == None or scheme == '':
return False
- if rest == None or rest.strip ('/') == '':
- return False
return True
def CUPS_server_hostname ():
@@ -3377,7 +3375,7 @@ class GUI(GtkGUI, monitor.Watcher):
name = name.replace ("#", "-")
if not self.checkNPName (name):
suffix=2
- while not self.checkNPName (name + str (suffix)):
+ while not self.checkNPName (name + "-" + str (suffix)):
suffix += 1
if suffix == 100:
break
@@ -4569,6 +4567,7 @@ class NewPrinterGUI(GtkGUI):
plugin_needed = -1
plugin_reason = -1
fw_download = -1
+ hpmodel = None
hplip_version = None
for line in stdout.split ("\n"):
if line.find ("plugin ") >= 0:
@@ -4586,31 +4585,54 @@ class NewPrinterGUI(GtkGUI):
fw_download = 1
elif line.find ("False") >= 0:
fw_download = 0
+ elif line.find ("model") >= 0:
+ res = re.search ("^\s*model\s*(\S+)\s*$", line)
+ if res:
+ resg = res.groups()
+ hpmodel = resg[0]
elif line.find ("HP Linux Imaging and Printing") >= 0:
res = re.search ("(\d+\.\d+\.\d+\w*)", line)
if res:
resg = res.groups()
hplip_version = resg[0]
- if plugin_needed >= 0 and plugin_reason >= 0 and fw_download >= 0:
+ if plugin_needed >= 0 and plugin_reason >= 0 and \
+ fw_download >= 0 and hpmodel != None:
break
- if plugin_needed <= 0 or not hplip_version:
+ if plugin_needed <= 0 or not hplip_version or not hpmodel:
return True # assume plugin not required
# Check whether the plugin is already installed
- if glob.glob("/usr/share/hplip/data/plugin/*%s*plugin*" %
- hplip_version):
- if hplip_version.startswith("2"):
- try:
- f = open('/etc/hp/hplip.conf', 'r')
- for line in f:
- if line.strip ().startswith("plugin") and \
- line.strip ().endswith("1"):
+ if hplip_version.startswith("3"):
+ os.environ["hp_model"] = hpmodel;
+ cmd = 'LC_ALL=C hp-mkuri -c'
+ debugprint (uri + ": " + hpmodel)
+ try:
+ p = subprocess.Popen (cmd, shell=True,
+ stdin=file("/dev/null"),
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ (stdout, stderr) = p.communicate ()
+ if p.returncode < 2:
+ return True # plugin installed or not required
+ except:
+ # Problem executing command.
+ return True # assume plugin not required
+ else:
+ if glob.glob("/usr/share/hplip/data/plugin/*%s*plugin*" %
+ hplip_version):
+ if hplip_version.startswith("2"):
+ try:
+ f = open('/etc/hp/hplip.conf', 'r')
+ for line in f:
+ if line.strip ().startswith("plugin") and \
+ line.strip ().endswith("1"):
+ f.close()
+ return True
f.close()
- return True
- f.close()
- except:
- pass
- else:
- return True
+ except:
+ pass
+ else:
+ return True
+
# Tell the user why he needs the plugin
text = \
_("For this printer a proprietary driver plugin from HP is available.\n")
@@ -4710,7 +4732,7 @@ class NewPrinterGUI(GtkGUI):
def get_hpfax_device_id(self, faxuri):
os.environ["URI"] = faxuri
- cmd = 'LC_ALL=C DISPLAY= hp-info -d"${URI}"'
+ cmd = 'LC_ALL=C DISPLAY= hp-info -x -i -d"${URI}"'
debugprint (faxuri + ": " + cmd)
try:
p = subprocess.Popen (cmd, shell=True,
@@ -5757,27 +5779,28 @@ class NewPrinterGUI(GtkGUI):
def getDeviceURI(self):
type = self.device.type
- if type == "socket": # DirectJet
+ page = self.new_printer_device_tabs.get (type, 1)
+ device = type
+ if page == 0:
+ # The "no options page". We already have the URI.
+ device = self.device.uri
+ elif type == "socket": # DirectJet
host = self.entNPTDirectJetHostname.get_text()
port = self.entNPTDirectJetPort.get_text()
- device = "socket://" + host
- if host and port:
- device = device + ':' + port
+ if host:
+ device += "://" + host
+ if port:
+ device += ":" + port
elif type in ("ipp", "http", "https"): # IPP
if self.lblIPPURI.get_property('visible'):
device = self.lblIPPURI.get_text()
- else:
- device = "ipp"
elif type == "lpd": # LPD
host = self.cmbentNPTLpdHost.get_active_text()
printer = self.cmbentNPTLpdQueue.get_active_text()
- device = "lpd://" + host
- if printer:
- device = device + "/" + printer
- elif type == "parallel": # Parallel
- device = self.device.uri
- elif type == "scsi": # SCSII
- device = ""
+ if host:
+ device += "://" + host
+ if printer:
+ device += "/" + printer
elif type == "serial": # Serial
options = []
for widget, name, optionvalues in (
@@ -5808,9 +5831,8 @@ class NewPrinterGUI(GtkGUI):
password = self.entSMBPassword.get_text ()
uri = SMBURI (group=group, host=host, share=share,
user=user, password=password).get_uri ()
- device = "smb://" + uri
- elif not self.device.is_class:
- device = self.device.uri
+ if uri:
+ device += "://" + uri
else:
device = self.entNPTDevice.get_text()
return device
diff -up system-config-printer-1.1.10/udev/70-printers.rules.a6cf4d3 system-config-printer-1.1.10/udev/70-printers.rules
--- system-config-printer-1.1.10/udev/70-printers.rules.a6cf4d3 2009-07-22 13:22:49.000000000 +0100
+++ system-config-printer-1.1.10/udev/70-printers.rules 2009-07-31 15:09:03.255962050 +0100
@@ -1,7 +1,7 @@
# Low-level USB device add trigger
-ACTION=="add", SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="07", ATTR{bInterfaceSubClass}=="01", RUN+="udev-configure-printer add %p"
+ACTION=="add", SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="07", ATTR{bInterfaceSubClass}=="01", RUN+="udev-usb-printer add %p"
# usblp device add trigger (needed when usblp is already loaded)
-ACTION=="add", KERNEL=="lp*", RUN+="udev-configure-printer add %p"
+ACTION=="add", KERNEL=="lp*", RUN+="udev-usb-printer add %p"
# Low-level USB device remove trigger
-ACTION=="remove", SUBSYSTEM=="usb", ENV{ID_USB_INTERFACES}=="*:0701*:*", RUN+="udev-configure-printer remove %p"
+ACTION=="remove", SUBSYSTEM=="usb", ENV{ID_USB_INTERFACES}=="*:0701*:*", RUN+="udev-usb-printer remove %p"
diff -up /dev/null system-config-printer-1.1.10/udev/com.redhat.PrinterConfig.conf
--- /dev/null 2009-07-31 14:10:14.275001833 +0100
+++ system-config-printer-1.1.10/udev/com.redhat.PrinterConfig.conf 2009-07-31 15:09:03.258961590 +0100
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
+
+<!DOCTYPE busconfig PUBLIC
+ "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+ <!-- Only root can own the service -->
+ <policy user="root">
+ <allow own="com.redhat.PrinterConfig"/>
+ <allow send_destination="com.redhat.PrinterConfig"/>
+ </policy>
+
+ <policy context="default">
+ <deny send_destination="com.redhat.PrinterConfig"/>
+ </policy>
+</busconfig>
diff -up /dev/null system-config-printer-1.1.10/udev/com.redhat.PrinterConfig.service.in
--- /dev/null 2009-07-31 14:10:14.275001833 +0100
+++ system-config-printer-1.1.10/udev/com.redhat.PrinterConfig.service.in 2009-07-31 15:09:03.261961727 +0100
@@ -0,0 +1,4 @@
+[D-BUS Service]
+Name=com.redhat.PrinterConfig
+Exec=@libexecdir@/printer-config-daemon
+User=root
diff -up /dev/null system-config-printer-1.1.10/udev/com.redhat.PrinterConfig.xml
--- /dev/null 2009-07-31 14:10:14.275001833 +0100
+++ system-config-printer-1.1.10/udev/com.redhat.PrinterConfig.xml 2009-07-31 15:09:03.265086823 +0100
@@ -0,0 +1,71 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node name="/com/redhat/PrinterConfig" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+
+ <interface name="com.redhat.PrinterConfig">
+ <doc:doc>
+ <doc:description>
+ <doc:para>The PrinterConfig service is available via the
+ system message bus. To access the service, use the
+ <doc:tt>com.redhat.PrinterConfig</doc:tt> interface
+ on the <doc:tt>/com/redhat/PrinterConfig</doc:tt>
+ object on the D-Bus system bus service with the well-known
+ name
+ <doc:tt>com.redhat.PrinterConfig</doc:tt>.</doc:para>
+
+ <doc:para>It is intended to be used by udev when USB printers
+ are connected and disconnected.</doc:para>
+ </doc:description>
+ </doc:doc>
+
+ <method name="UsbPrinterAdd">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg name="devpath" direction="in" type="s">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>The udev devpath of the device with subsystem
+ usb and devtype usb_device referring to the USB printer
+ device.</doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+
+ <arg name="deviceid" direction="in" type="s">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>The IEEE 1284 Device ID (not including length
+ field) of the device.</doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+
+ <doc:doc>
+ <doc:description>
+ <doc:para>This method informs the PrinterConfig service that
+ a USB printer is now connected.</doc:para>
+ </doc:description>
+ </doc:doc>
+ </method>
+
+ <method name="UsbPrinterRemove">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg name="devpath" direction="in" type="s">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>The udev devpath of the device with subsystem
+ usb and devtype usb_device referring to the USB printer
+ device.</doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+
+ <doc:doc>
+ <doc:description>
+ <doc:para>This method informs the PrinterConfig service that
+ a USB printer has been disconnected.</doc:para>
+ </doc:description>
+ </doc:doc>
+ </method>
+ </interface>
+</node>
diff -up /dev/null system-config-printer-1.1.10/udev/printer-config-daemon.c
--- /dev/null 2009-07-31 14:10:14.275001833 +0100
+++ system-config-printer-1.1.10/udev/printer-config-daemon.c 2009-07-31 15:09:03.268961586 +0100
@@ -0,0 +1,1248 @@
+/* -*- Mode: C; c-file-style: "gnu" -*-
+ * printer-config-daemon - a D-Bus service for configuring printers
+ * Copyright (C) 2009 Red Hat, Inc.
+ * Author: Tim Waugh <twaugh@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#define LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE 1
+#include "printer-config.h"
+#include "printer-config-server-bindings.h"
+#include <cups/cups.h>
+#include <cups/http.h>
+#include <dbus/dbus-glib-bindings.h>
+#include <fcntl.h>
+#include <libudev.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <usb.h>
+
+#define DISABLED_REASON "Unplugged or turned off"
+#define MATCH_ONLY_DISABLED 1
+#define USB_URI_MAP "/var/run/udev-configure-printer/usb-uris"
+
+struct children
+{
+ struct children *next;
+ GPid pid;
+};
+
+struct device_uris
+{
+ size_t n_uris;
+ char **uri;
+};
+
+struct usb_uri_map_entry
+{
+ struct usb_uri_map_entry *next;
+
+ /* The devpath of the ("usb","usb_device") device. */
+ char *devpath;
+
+ /* List of matching device URIs. */
+ struct device_uris uris;
+};
+
+struct usb_uri_map
+{
+ struct usb_uri_map_entry *entries;
+
+ /* Open file descriptor for the map, or -1 if it has already been
+ * written. */
+ int fd;
+};
+
+struct device_id
+{
+ char *full_device_id;
+ char *mfg;
+ char *mdl;
+ char *sern;
+};
+
+/* Device URI schemes in decreasing order of preference. */
+static const char *device_uri_types[] =
+ {
+ "hp",
+ "usb",
+ };
+
+static int
+device_uri_type (const char *uri)
+{
+ int slen = strcspn (uri, ":");
+ int i;
+ int n = sizeof (device_uri_types) / sizeof (device_uri_types[0]);
+ for (i = 0; i < n; i++)
+ if (!strncmp (uri, device_uri_types[i], slen) &&
+ device_uri_types[i][slen] == '\0')
+ break;
+
+ return i;
+}
+
+static void
+add_device_uri (struct device_uris *uris,
+ const char *uri)
+{
+ char *uri_copy = strdup (uri);
+ if (!uri_copy)
+ {
+ syslog (LOG_ERR, "out of memory");
+ return;
+ }
+
+ if (uris->n_uris == 0)
+ {
+ uris->uri = malloc (sizeof (char *));
+ if (uris->uri)
+ {
+ uris->n_uris = 1;
+ uris->uri[0] = uri_copy;
+ }
+ }
+ else
+ {
+ char **old = uris->uri;
+ if (++uris->n_uris < UINT_MAX / sizeof (char *))
+ {
+ uris->uri = realloc (uris->uri,
+ sizeof (char *) * uris->n_uris);
+ if (uris->uri)
+ uris->uri[uris->n_uris - 1] = uri_copy;
+ else
+ {
+ uris->uri = old;
+ uris->n_uris--;
+ free (uri_copy);
+ }
+ }
+ else
+ {
+ uris->n_uris--;
+ free (uri_copy);
+ }
+ }
+}
+
+static void
+free_device_uris (struct device_uris *uris)
+{
+ size_t i;
+ for (i = 0; i < uris->n_uris; i++)
+ free (uris->uri[i]);
+ free (uris->uri);
+}
+
+static void
+add_usb_uri_mapping (struct usb_uri_map **map,
+ const char *devpath,
+ const struct device_uris *uris)
+{
+ struct usb_uri_map_entry *entry, **prev;
+ size_t i;
+ prev = &(*map)->entries;
+ while (*prev)
+ prev = &((*prev)->next);
+
+ entry = malloc (sizeof (struct usb_uri_map_entry));
+ if (!entry)
+ {
+ syslog (LOG_ERR, "out of memory");
+ return;
+ }
+
+ entry->devpath = strdup (devpath);
+ entry->uris.n_uris = uris->n_uris;
+ entry->uris.uri = malloc (sizeof (char *) * uris->n_uris);
+ for (i = 0; i < uris->n_uris; i++)
+ entry->uris.uri[i] = strdup (uris->uri[i]);
+ entry->next = NULL;
+ *prev = entry;
+}
+
+static struct usb_uri_map *
+read_usb_uri_map (void)
+{
+ int fd = open (USB_URI_MAP, O_RDWR);
+ struct usb_uri_map *map = NULL;
+ struct flock lock;
+ struct stat st;
+ char *buf, *line;
+
+ if (fd == -1)
+ {
+ char dir[] = USB_URI_MAP;
+ char *p = strrchr (dir, '/');
+ if (p)
+ {
+ *p = '\0';
+ mkdir (dir, 0755);
+ fd = open (USB_URI_MAP, O_RDWR | O_TRUNC | O_CREAT, 0644);
+ if (fd == -1)
+ {
+ syslog (LOG_ERR, "failed to create " USB_URI_MAP);
+ return NULL;
+ }
+ }
+ }
+
+ map = malloc (sizeof (struct usb_uri_map));
+ if (!map)
+ {
+ close (fd);
+ syslog (LOG_ERR, "out of memory");
+ return NULL;
+ }
+
+ lock.l_type = F_WRLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+ if (fcntl (fd, F_SETLKW, &lock) == -1)
+ {
+ close (fd);
+ free (map);
+ syslog (LOG_ERR, "failed to lock " USB_URI_MAP);
+ return NULL;
+ }
+
+ map->entries = NULL;
+ map->fd = fd;
+ if (fstat (fd, &st) == -1)
+ {
+ close (fd);
+ free (map);
+ syslog (LOG_ERR, "failed to fstat " USB_URI_MAP " (fd %d)", fd);
+ return NULL;
+ }
+
+ /* Read the entire file into memory. */
+ buf = malloc (1 + (sizeof (char) * st.st_size));
+ if (!buf)
+ {
+ close (fd);
+ free (map);
+ syslog (LOG_ERR, "out of memory");
+ return NULL;
+ }
+
+ if (read (fd, buf, st.st_size) < 0)
+ {
+ close (fd);
+ free (map);
+ free (buf);
+ syslog (LOG_ERR, "failed to read " USB_URI_MAP);
+ return NULL;
+ }
+
+ buf[st.st_size] = '\0';
+ line = buf;
+ while (line)
+ {
+ char *saveptr = NULL;
+ const char *devpath, *uri;
+ struct device_uris uris;
+ char *nextline = strchr (line, '\n');
+ if (!nextline)
+ break;
+
+ *nextline++ = '\0';
+ if (nextline >= buf + st.st_size)
+ nextline = NULL;
+
+ devpath = strtok_r (line, "\t", &saveptr);
+ uri = strtok_r (NULL, "\t", &saveptr);
+ if (!devpath || !uri)
+ {
+ syslog (LOG_DEBUG, "Incorrect line in " USB_URI_MAP ": %s",
+ line);
+ continue;
+ }
+
+ uris.n_uris = 1;
+ uris.uri = malloc (sizeof (char *));
+ if (uris.uri == NULL)
+ break;
+
+ uris.uri[0] = strdup (uri);
+ while ((uri = strtok_r (NULL, "\t", &saveptr)) != NULL)
+ add_device_uri (&uris, uri);
+
+ add_usb_uri_mapping (&map, devpath, &uris);
+
+ line = nextline;
+ }
+
+ free (buf);
+ return map;
+}
+
+static void
+write_usb_uri_map (struct usb_uri_map *map)
+{
+ struct usb_uri_map_entry *entry;
+ int fd = map->fd;
+ FILE *f;
+
+ lseek (fd, SEEK_SET, 0);
+ ftruncate (fd, 0);
+ f = fdopen (fd, "w");
+ if (!f)
+ {
+ syslog (LOG_ERR, "failed to fdopen " USB_URI_MAP " (fd %d)", fd);
+ close (fd);
+ map->fd = -1;
+ return;
+ }
+
+ for (entry = map->entries; entry; entry = entry->next)
+ {
+ size_t i;
+ fprintf (f, "%s\t%s", entry->devpath, entry->uris.uri[0]);
+ for (i = 1; i < entry->uris.n_uris; i++)
+ fprintf (f, "\t%s", entry->uris.uri[i]);
+ fwrite ("\n", 1, 1, f);
+ }
+
+ fclose (f);
+ map->fd = -1;
+}
+
+static void
+free_usb_uri_map (struct usb_uri_map *map)
+{
+ struct usb_uri_map_entry *entry, *next;
+ for (entry = map->entries; entry; entry = next)
+ {
+ next = entry->next;
+ free (entry->devpath);
+ free_device_uris (&entry->uris);
+ free (entry);
+ }
+
+ if (map->fd != -1)
+ close (map->fd);
+
+ free (map);
+}
+
+static void
+free_device_id (struct device_id *id)
+{
+ free (id->full_device_id);
+ free (id->mfg);
+ free (id->mdl);
+ free (id->sern);
+}
+
+static void
+parse_device_id (const char *device_id,
+ struct device_id *id)
+{
+ char *fieldname;
+ char *start, *end;
+ size_t len;
+
+ len = strlen (device_id);
+ if (len == 0)
+ return;
+
+ if (device_id[len - 1] == '\n')
+ len--;
+
+ id->full_device_id = malloc (len + 1);
+ fieldname = malloc (len + 1);
+ if (!id->full_device_id || !fieldname)
+ {
+ syslog (LOG_ERR, "out of memory");
+ return;
+ }
+
+ memcpy (id->full_device_id, device_id, len);
+ id->full_device_id[len] = '\0';
+ fieldname[0] = '\0';
+ start = id->full_device_id;
+ while (*start != '\0')
+ {
+ /* New field. */
+
+ end = start;
+ while (*end != '\0' && *end != ':')
+ end++;
+
+ if (*end == '\0')
+ break;
+
+ len = end - start;
+ memcpy (fieldname, start, len);
+ fieldname[len] = '\0';
+
+ start = end + 1;
+ while (*end != '\0' && *end != ';')
+ end++;
+
+ len = end - start;
+
+ if (!id->mfg &&
+ (!strncasecmp (fieldname, "MANUFACTURER", 12) ||
+ !strncasecmp (fieldname, "MFG", 3)))
+ id->mfg = strndup (start, len);
+ else if (!id->mdl &&
+ (!strncasecmp (fieldname, "MODEL", 5) ||
+ !strncasecmp (fieldname, "MDL", 3)))
+ id->mdl = strndup (start, len);
+ else if (!id->sern &&
+ (!strncasecmp (fieldname, "SERIALNUMBER", 12) ||
+ !strncasecmp (fieldname, "SERN", 4) ||
+ !strncasecmp (fieldname, "SN", 2)))
+ id->sern = strndup (start, len);
+
+ if (*end != '\0')
+ start = end + 1;
+ }
+
+ free (fieldname);
+}
+
+static const char *
+no_password (const char *prompt)
+{
+ return "";
+}
+
+static http_t *
+cups_connection (void)
+{
+ http_t *cups = NULL;
+ static int first_time = 1;
+
+ if (first_time)
+ {
+ cupsSetPasswordCB (no_password);
+ first_time = 0;
+ }
+
+ cups = httpConnectEncrypt ("localhost", 631,
+ HTTP_ENCRYPT_IF_REQUESTED);
+ if (cups == NULL)
+ {
+ /* Don't bother retrying here. Instead, the CUPS initscript
+ should run these commands after cupsd is started:
+
+ rmmod usblp
+ udevadm trigger --subsystem-match=usb \
+ --attr-match=bInterfaceClass=07 \
+ --attr-match=bInterfaceSubClass=01
+ */
+
+ syslog (LOG_DEBUG, "failed to connect to CUPS server; giving up");
+ return NULL;
+ }
+
+ return cups;
+}
+
+static int
+find_matching_device_uris (struct device_id *id,
+ const char *usbserial,
+ struct device_uris *uris,
+ const char *devpath,
+ struct usb_uri_map *map)
+{
+ http_t *cups;
+ ipp_t *request, *answer;
+ ipp_attribute_t *attr;
+ struct device_uris uris_noserial;
+ struct device_uris all_uris;
+ size_t i, n;
+ const char *exclude_schemes[] = {
+ "beh",
+ "bluetooth",
+ "http",
+ "https",
+ "ipp",
+ "lpd",
+ "ncp",
+ "parallel",
+ "scsi",
+ "smb",
+ "snmp",
+ "socket",
+ };
+
+ uris->n_uris = uris_noserial.n_uris = all_uris.n_uris = 0;
+ uris->uri = uris_noserial.uri = all_uris.uri = NULL;
+
+ /* Leave the bus to settle. */
+ sleep (1);
+
+ cups = cups_connection ();
+ request = ippNewRequest (CUPS_GET_DEVICES);
+ ippAddStrings (request, IPP_TAG_OPERATION, IPP_TAG_NAME, "exclude-schemes",
+ sizeof (exclude_schemes) / sizeof(exclude_schemes[0]),
+ NULL, exclude_schemes);
+
+ answer = cupsDoRequest (cups, request, "/");
+ httpClose (cups);
+
+ if (answer == NULL)
+ {
+ syslog (LOG_ERR, "failed to send IPP request %d",
+ request->request.op.operation_id);
+ return 0;
+ }
+
+ if (answer->request.status.status_code > IPP_OK_CONFLICT)
+ {
+ syslog (LOG_ERR, "IPP request %d failed (%d)",
+ request->request.op.operation_id,
+ answer->request.status.status_code);
+ return 0;
+ }
+
+ for (attr = answer->attrs; attr; attr = attr->next)
+ {
+ const char *device_uri = NULL;
+ struct device_id this_id;
+ this_id.full_device_id = this_id.mfg = this_id.mdl = this_id.sern = NULL;
+
+ while (attr && attr->group_tag != IPP_TAG_PRINTER)
+ attr = attr->next;
+
+ if (!attr)
+ break;
+
+ for (; attr && attr->group_tag == IPP_TAG_PRINTER; attr = attr->next)
+ {
+ if (attr->value_tag == IPP_TAG_URI &&
+ !strcmp (attr->name, "device-uri"))
+ device_uri = attr->values[0].string.text;
+ else if (attr->value_tag == IPP_TAG_TEXT &&
+ !strcmp (attr->name, "device-id"))
+ parse_device_id (attr->values[0].string.text, &this_id);
+ }
+
+ /* Only use device schemes in our preference order for matching
+ * against the IEEE 1284 Device ID. */
+
+ for (i = 0;
+ device_uri &&
+ i < sizeof (device_uri_types) / sizeof (device_uri_types[0]);
+ i++)
+ {
+ size_t len = strlen (device_uri_types[i]);
+ if (!strncmp (device_uri_types[i], device_uri, len) &&
+ device_uri[len] == ':')
+ break;
+ }
+
+ if (device_uri)
+ add_device_uri (&all_uris, device_uri);
+
+ if (i == sizeof (device_uri_types) / sizeof (device_uri_types[0]))
+ /* Not what we want to match against. Ignore this one. */
+ device_uri = NULL;
+
+ /* Now check the manufacturer and model names. */
+ if (device_uri && this_id.mfg && this_id.mdl &&
+ !strcmp (this_id.mfg, id->mfg) &&
+ !strcmp (this_id.mdl, id->mdl))
+ {
+ /* We've checked everything except the serial numbers. This
+ * is more complicated. Some devices include a serial
+ * number (SERN) field in their IEEE 1284 Device ID. Others
+ * don't -- this was not a mandatory field in the
+ * specification.
+ *
+ * If the device includes SERN field in its, it must match
+ * what the device-id attribute has.
+ *
+ * Otherwise, the only means we have of knowing which device
+ * is meant is the USB serial number.
+ *
+ * CUPS backends may choose to insert the USB serial number
+ * into the SERN field when reporting a device-id attribute.
+ * HPLIP does this, and it seems not to stray too far from
+ * the intent of that field. We accommodate this.
+ *
+ * Alternatively, CUPS backends may include the USB serial
+ * number somewhere in their reported device-uri attributes.
+ * For instance, the CUPS 1.4 usb backend, when compiled
+ * with libusb support, gives device URIs containing the USB
+ * serial number for devices without a SERN field, like
+ * this: usb://HP/DESKJET%20990C?serial=US05M1D20CIJ
+ *
+ * To accommodate this we examine tokens between '?', '='
+ * and '&' delimiters to check for USB serial number
+ * matches.
+ *
+ * CUPS 1.3, and CUPS 1.4 without libusb support, doesn't do this.
+ * As a result we also need to deal with devices that don't report a
+ * SERN field where the backends that don't add a SERN field from
+ * the USB serial number and also don't include the USB serial
+ * number in the URI.
+ */
+
+ int match = 0;
+ if ((id->sern && this_id.sern && !strcmp (id->sern, this_id.sern)))
+ {
+ syslog (LOG_DEBUG, "SERN fields match");
+ match = 1;
+ }
+
+ if (!match && usbserial[0] != '\0')
+ {
+ if (!id->sern)
+ {
+ if (this_id.sern && !strcmp (usbserial, this_id.sern))
+ {
+ syslog (LOG_DEBUG,
+ "SERN field matches USB serial number");
+ match = 1;
+ }
+ }
+
+ if (!match)
+ {
+ char *saveptr, *uri = strdup (device_uri);
+ const char *token;
+ const char *sep = "?=&/";
+ for (token = strtok_r (uri, sep, &saveptr);
+ token;
+ token = strtok_r (NULL, sep, &saveptr))
+ if (!strcmp (token, usbserial))
+ {
+ syslog (LOG_DEBUG, "URI contains USB serial number");
+ match = 1;
+ break;
+ }
+
+ free (uri);
+ }
+ }
+
+ if (match)
+ {
+ syslog (LOG_DEBUG, "URI match: %s", device_uri);
+ add_device_uri (uris, device_uri);
+ }
+ else if (!id->sern)
+ {
+ syslog (LOG_DEBUG, "URI matches without serial number: %s",
+ device_uri);
+ add_device_uri (&uris_noserial, device_uri);
+ }
+ else
+ syslog (LOG_DEBUG, "No match: %s", device_uri);
+ }
+
+ if (!attr)
+ break;
+ }
+
+ ippDelete (answer);
+
+ /* Decide what to do about device URIs that did not match a serial
+ * number. The device had no SERN field, and the USB serial number
+ * was nowhere to be found from the device URI or device-id field.
+ *
+ * Device URIs with no reference to serial number can only each ever
+ * work when only one printer of that model is connected.
+ * Accordingly, it is safe to disable queues using such URIs, as we
+ * know the removed/added device is that lone printer.
+ *
+ * When adding queues it is best to avoid URIs that don't
+ * distinguish serial numbers.
+ *
+ * What we'll do, then, is concatenate the list of "non-serial" URIs
+ * onto the end of the list of "serial" URIs.
+ */
+
+ if (uris->n_uris == 0 && uris_noserial.n_uris > 0)
+ {
+ syslog (LOG_DEBUG, "No serial number URI matches so using those without");
+ uris->n_uris = uris_noserial.n_uris;
+ uris->uri = uris_noserial.uri;
+ uris_noserial.n_uris = 0;
+ uris_noserial.uri = NULL;
+ }
+ else if (uris_noserial.n_uris > 0)
+ {
+ char **old = uris->uri;
+ uris->uri = realloc (uris->uri,
+ sizeof (char *) * (uris->n_uris +
+ uris_noserial.n_uris));
+ if (!uris->uri)
+ uris->uri = old;
+ else
+ {
+ for (i = 0; i < uris_noserial.n_uris; i++)
+ uris->uri[uris->n_uris + i] = uris_noserial.uri[i];
+ uris->n_uris += uris_noserial.n_uris;
+ }
+
+ uris_noserial.n_uris = 0;
+ uris_noserial.uri = NULL;
+ }
+
+ free_device_uris (&uris_noserial);
+
+ /* Having decided which device URIs match based on IEEE 1284 Device
+ * ID, we now need to look for "paired" URIs for other functions of
+ * a multi-function device. This are the same except for the
+ * scheme. */
+
+ n = uris->n_uris;
+ for (i = 0; i < n; i++)
+ {
+ size_t j;
+ char *me = uris->uri[i];
+ char *my_rest = strchr (me, ':');
+ size_t my_schemelen;
+ if (!my_rest)
+ continue;
+
+ my_schemelen = my_rest - me;
+ for (j = 0; j < all_uris.n_uris; j++)
+ {
+ char *twin = all_uris.uri[j];
+ char *twin_rest = strchr (twin, ':');
+ size_t twin_schemelen;
+ if (!twin_rest)
+ continue;
+
+ twin_schemelen = twin_rest - twin;
+ if (my_schemelen == twin_schemelen &&
+ !strncmp (me, twin, my_schemelen))
+ /* This is the one we are looking for the twin of. */
+ continue;
+
+ if (!strcmp (my_rest, twin_rest))
+ {
+ syslog (LOG_DEBUG, "%s twinned with %s", me, twin);
+ add_device_uri (uris, twin);
+ }
+ }
+ }
+
+ free_device_uris (&all_uris);
+ if (uris->n_uris > 0)
+ {
+ add_usb_uri_mapping (&map, devpath, uris);
+ write_usb_uri_map (map);
+ free_usb_uri_map (map);
+ }
+
+ return uris->n_uris;
+}
+
+/* Call a function for each queue with the given device-uri and printer-state.
+ * Returns the number of queues with a matching device-uri. */
+static size_t
+for_each_matching_queue (struct device_uris *device_uris,
+ int flags,
+ void (*fn) (const char *, void *),
+ void *context)
+{
+ size_t matched = 0;
+ http_t *cups = cups_connection ();
+ ipp_t *request, *answer;
+ ipp_attribute_t *attr;
+ const char *attributes[] = {
+ "printer-uri-supported",
+ "device-uri",
+ "printer-state",
+ "printer-state-message",
+ };
+
+ request = ippNewRequest (CUPS_GET_PRINTERS);
+ ippAddStrings (request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
+ "requested-attributes",
+ sizeof (attributes) / sizeof (attributes[0]),
+ NULL, attributes);
+ answer = cupsDoRequest (cups, request, "/");
+ httpClose (cups);
+ if (answer == NULL)
+ {
+ syslog (LOG_ERR, "failed to send CUPS-Get-Printers request");
+ return 0;
+ }
+
+ if (answer->request.status.status_code > IPP_OK_CONFLICT)
+ {
+ if (answer->request.status.status_code == IPP_NOT_FOUND)
+ {
+ /* No printer queues configured. */
+ ippDelete (answer);
+ return 0;
+ }
+
+ syslog (LOG_ERR, "CUPS-Get-Printers request failed (%d)",
+ answer->request.status.status_code);
+ return 0;
+ }
+
+ for (attr = answer->attrs; attr; attr = attr->next)
+ {
+ const char *this_printer_uri = NULL;
+ const char *this_device_uri = NULL;
+ const char *printer_state_message = NULL;
+ int state = 0;
+ size_t i;
+
+ while (attr && attr->group_tag != IPP_TAG_PRINTER)
+ attr = attr->next;
+
+ if (!attr)
+ break;
+
+ for (; attr && attr->group_tag == IPP_TAG_PRINTER; attr = attr->next)
+ {
+ if (attr->value_tag == IPP_TAG_URI)
+ {
+ if (!strcmp (attr->name, "device-uri"))
+ this_device_uri = attr->values[0].string.text;
+ else if (!strcmp (attr->name, "printer-uri-supported"))
+ this_printer_uri = attr->values[0].string.text;
+ }
+ else if (attr->value_tag == IPP_TAG_TEXT &&
+ !strcmp (attr->name, "printer-state-message"))
+ printer_state_message = attr->values[0].string.text;
+ else if (attr->value_tag == IPP_TAG_ENUM &&
+ !strcmp (attr->name, "printer-state"))
+ state = attr->values[0].integer;
+ }
+
+ for (i = 0; i < device_uris->n_uris; i++)
+ if (!strcmp (device_uris->uri[i], this_device_uri))
+ {
+ matched++;
+ if (((flags & MATCH_ONLY_DISABLED) &&
+ state == IPP_PRINTER_STOPPED &&
+ !strcmp (printer_state_message, DISABLED_REASON)) ||
+ (flags & MATCH_ONLY_DISABLED) == 0)
+ {
+ syslog (LOG_DEBUG ,"Queue %s has matching device URI",
+ this_printer_uri);
+ (*fn) (this_printer_uri, context);
+ }
+ }
+
+ if (!attr)
+ break;
+ }
+
+ ippDelete (answer);
+ return matched;
+}
+
+static void
+enable_queue (const char *printer_uri, void *context)
+{
+ /* Disable it. */
+ http_t *cups = cups_connection ();
+ ipp_t *request, *answer;
+ request = ippNewRequest (IPP_RESUME_PRINTER);
+ ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_URI,
+ "printer-uri", NULL, printer_uri);
+ answer = cupsDoRequest (cups, request, "/admin/");
+ if (!answer)
+ {
+ syslog (LOG_ERR, "Failed to send IPP-Resume-Printer request");
+ httpClose (cups);
+ return;
+ }
+
+ if (answer->request.status.status_code > IPP_OK_CONFLICT)
+ syslog (LOG_ERR, "IPP-Resume-Printer request failed");
+ else
+ syslog (LOG_INFO, "Re-enabled printer %s", printer_uri);
+
+ ippDelete (answer);
+ httpClose (cups);
+}
+
+static void
+disable_queue (const char *printer_uri, void *context)
+{
+ /* Disable it. */
+ http_t *cups = cups_connection ();
+ ipp_t *request, *answer;
+ request = ippNewRequest (IPP_PAUSE_PRINTER);
+ ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_URI,
+ "printer-uri", NULL, printer_uri);
+ ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_TEXT,
+ "printer-state-message", NULL, DISABLED_REASON);
+ answer = cupsDoRequest (cups, request, "/admin/");
+ if (!answer)
+ {
+ syslog (LOG_ERR, "Failed to send IPP-Pause-Printer request");
+ httpClose (cups);
+ return;
+ }
+
+ if (answer->request.status.status_code > IPP_OK_CONFLICT)
+ syslog (LOG_ERR, "IPP-Pause-Printer request failed");
+ else
+ syslog (LOG_INFO, "Disabled printer %s as the corresponding device "
+ "was unplugged or turned off", printer_uri);
+
+ ippDelete (answer);
+ httpClose (cups);
+}
+
+static char *
+syspath_from_devpath (struct udev *udev, const char *devpath)
+{
+ const char *sys;
+ char *syspath;
+ size_t syslen, devpathlen = strlen (devpath);
+ sys = udev_get_sys_path (udev);
+ syslen = strlen (sys);
+ syspath = malloc (syslen + devpathlen + 1);
+ if (syspath == NULL)
+ return NULL;
+
+ memcpy (syspath, sys, syslen);
+ memcpy (syspath + syslen, devpath, devpathlen);
+ syspath[syslen + devpathlen] = '\0';
+ return syspath;
+}
+
+static void
+reap_child (GPid pid, gint status, gpointer context)
+{
+ PrinterConfigDaemon *self = context;
+ struct children *child, **prev = &self->children;
+ g_debug ("PID %d has exited", pid);
+ for (child = self->children; child; prev = &child->next, child = child->next)
+ if (child->pid == pid)
+ {
+ *prev = child->next;
+ free (child);
+ g_debug ("self->children is now %p", self->children);
+ break;
+ }
+}
+
+G_DEFINE_TYPE (PrinterConfigDaemon, printer_config_daemon, G_TYPE_OBJECT)
+
+static gboolean
+kill_timeout (gpointer context)
+{
+ PrinterConfigDaemon *self = context;
+ if (self->children == NULL)
+ {
+ g_debug ("Time to go");
+ main_quit ();
+ return FALSE;
+ }
+
+ g_debug ("children is %p", self->children);
+ return TRUE;
+}
+
+static gboolean
+reset_killtimer (PrinterConfigDaemon *self)
+{
+ if (self->killtimer != 0)
+ {
+ g_debug ("Remove killtimer %d", self->killtimer);
+ g_source_remove (self->killtimer);
+ }
+
+ self->killtimer = g_timeout_add (1000, kill_timeout, self);
+ g_debug ("Set killtimer %d", self->killtimer);
+ return TRUE;
+}
+
+static void
+printer_config_daemon_dispose (GObject *gobject)
+{
+ PrinterConfigDaemon *self = PRINTER_CONFIG_DAEMON (gobject);
+ g_debug ("dispose %p", self);
+ G_OBJECT_CLASS (printer_config_daemon_parent_class)->dispose (gobject);
+}
+
+static void
+printer_config_daemon_finalize (GObject *gobject)
+{
+ PrinterConfigDaemon *self = PRINTER_CONFIG_DAEMON (gobject);
+ g_debug ("finalize %p", self);
+ if (self->killtimer != 0)
+ {
+ g_debug ("Remove killtimer %d", self->killtimer);
+ g_source_remove (self->killtimer);
+ }
+
+ G_OBJECT_CLASS (printer_config_daemon_parent_class)->finalize (gobject);
+}
+
+static void
+printer_config_daemon_class_init (PrinterConfigDaemonClass *klass)
+{
+ GError *error = NULL;
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->dispose = printer_config_daemon_dispose;
+ gobject_class->finalize = printer_config_daemon_finalize;
+ g_debug ("class init");
+ klass->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+ if (klass->connection == NULL)
+ {
+ g_warning ("Unable to connect to D-Bus: %s", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ dbus_g_object_type_install_info(PRINTER_CONFIG_TYPE_DAEMON,
+ &dbus_glib_printer_config_daemon_object_info);
+}
+
+static void
+printer_config_daemon_init (PrinterConfigDaemon *self)
+{
+ DBusGProxy *driver_proxy;
+ GError *error = NULL;
+ PrinterConfigDaemonClass *klass = PRINTER_CONFIG_DAEMON_GET_CLASS (self);
+ guint request_ret;
+
+ dbus_g_connection_register_g_object (klass->connection,
+ "/com/redhat/PrinterConfig",
+ G_OBJECT (self));
+ driver_proxy = dbus_g_proxy_new_for_name (klass->connection,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS);
+
+ g_debug ("daemon init %p", self);
+ if (!org_freedesktop_DBus_request_name (driver_proxy,
+ "com.redhat.PrinterConfig",
+ 0, &request_ret,
+ &error))
+ {
+ g_warning ("Unable to register service: %s", error->message);
+ g_error_free (error);
+ }
+
+ self->children = NULL;
+ g_object_unref (driver_proxy);
+}
+
+gboolean
+printer_config_daemon_usb_printer_add (PrinterConfigDaemon *self,
+ const char *usb_device_devpath,
+ const char *deviceid,
+ DBusGMethodInvocation *context)
+{
+ struct device_id id;
+ struct device_uris device_uris;
+ struct usb_uri_map *map;
+ struct usb_uri_map_entry *entry;
+ struct udev *udev;
+ struct udev_device *dev;
+ const char *usbserial;
+ char *syspath;
+
+ syslog (LOG_DEBUG, "add %s", usb_device_devpath);
+ dbus_g_method_return (context);
+
+ reset_killtimer (self);
+ udev = udev_new ();
+ if (!udev)
+ {
+ syslog (LOG_ERR, "failed to init libudev");
+ return FALSE;
+ }
+
+ map = read_usb_uri_map ();
+ if (!map)
+ return TRUE;
+
+ for (entry = map->entries; entry; entry = entry->next)
+ if (!strcmp (entry->devpath, usb_device_devpath))
+ break;
+
+ if (entry != NULL)
+ /* The map already had an entry so has already been dealt
+ * with. This can happen because there are two "add"
+ * triggers: one for the usb_device device and the other for
+ * the usblp device. We have most likely been triggered by
+ * the usblp device, so the usb_device rule got there before
+ * us and succeeded.
+ *
+ * Pretend we didn't find any device URIs that matched, and
+ * exit.
+ */
+ return TRUE;
+
+ id.full_device_id = id.mfg = id.mdl = id.sern = NULL;
+ parse_device_id (deviceid, &id);
+ if (!id.mfg || !id.mdl)
+ {
+ syslog (LOG_ERR, "invalid IEEE 1284 Device ID %s",
+ id.full_device_id);
+ return FALSE;
+ }
+
+ syspath = syspath_from_devpath (udev, usb_device_devpath);
+ if (!syspath)
+ {
+ syslog (LOG_ERR, "unable to get syspath from devpath");
+ return FALSE;
+ }
+
+ dev = udev_device_new_from_syspath (udev, syspath);
+ if (!dev)
+ {
+ udev_device_unref (dev);
+ udev_unref (udev);
+ syslog (LOG_ERR, "unable to access %s", syspath);
+ free (syspath);
+ return TRUE;
+ }
+
+ free (syspath);
+ usbserial = udev_device_get_sysattr_value (dev, "serial");
+ syslog (LOG_DEBUG, "MFG:%s MDL:%s SERN:%s serial:%s", id.mfg, id.mdl,
+ id.sern ? id.sern : "-", usbserial ? usbserial : "-");
+
+ find_matching_device_uris (&id, usbserial, &device_uris, usb_device_devpath,
+ map);
+ udev_device_unref (dev);
+ udev_unref (udev);
+ if (device_uris.n_uris == 0)
+ {
+ free_device_id (&id);
+ return TRUE;
+ }
+
+ /* Re-enable any queues we'd previously disabled. */
+ if (for_each_matching_queue (&device_uris, MATCH_ONLY_DISABLED,
+ enable_queue, NULL) == 0)
+ {
+ size_t i;
+ int type;
+ GPid child_pid;
+ GError *error = NULL;
+ char **argv = malloc (sizeof (char *) * (3 + device_uris.n_uris));
+
+ /* No queue is configured for this device yet.
+ Decide on a URI to use. */
+ type = device_uri_type (device_uris.uri[0]);
+ for (i = 1; i < device_uris.n_uris; i++)
+ {
+ int new_type = device_uri_type (device_uris.uri[i]);
+ if (new_type < type)
+ {
+ char *swap = device_uris.uri[0];
+ device_uris.uri[0] = device_uris.uri[i];
+ device_uris.uri[i] = swap;
+ type = new_type;
+ }
+ }
+
+ argv[0] = "/usr/libexec/udev-add-printer";
+ argv[1] = id.full_device_id;
+ for (i = 0; i < device_uris.n_uris; i++)
+ argv[i + 2] = device_uris.uri[i];
+ argv[i + 2] = NULL;
+
+ syslog (LOG_DEBUG, "About to add queue for %s", argv[2]);
+ if (g_spawn_async ("/", argv, NULL,
+ G_SPAWN_STDOUT_TO_DEV_NULL |
+ G_SPAWN_STDERR_TO_DEV_NULL |
+ G_SPAWN_DO_NOT_REAP_CHILD,
+ NULL, NULL,
+ &child_pid,
+ &error) == FALSE)
+ syslog (LOG_ERR, "Failed to execute %s", argv[0]);
+ else
+ {
+ struct children *child = malloc (sizeof (struct children));
+ child->next = self->children;
+ child->pid = child_pid;
+ self->children = child;
+ g_child_watch_add (child_pid, reap_child, self);
+ }
+ }
+
+ free_device_id (&id);
+ free_device_uris (&device_uris);
+ return TRUE;
+}
+
+gboolean
+printer_config_daemon_usb_printer_remove (PrinterConfigDaemon *self,
+ const char *devpath,
+ DBusGMethodInvocation *context)
+{
+ struct usb_uri_map *map;
+ struct usb_uri_map_entry *entry, **prev;
+ struct device_uris *uris = NULL;
+
+ syslog (LOG_DEBUG, "remove %s", devpath);
+ dbus_g_method_return (context);
+
+ reset_killtimer (self);
+ map = read_usb_uri_map ();
+ if (!map)
+ return TRUE;
+
+ prev = &map->entries;
+ for (entry = map->entries; entry; entry = entry->next)
+ {
+ if (!strcmp (entry->devpath, devpath))
+ {
+ uris = &entry->uris;
+ break;
+ }
+
+ prev = &(entry->next);
+ }
+
+ if (uris)
+ {
+ /* Find the relevant queues and disable them if they are enabled. */
+ for_each_matching_queue (uris, 0, disable_queue, NULL);
+ *prev = entry->next;
+ write_usb_uri_map (map);
+ }
+
+ free_usb_uri_map (map);
+ return TRUE;
+}
+
+PrinterConfigDaemon *
+printer_config_daemon_new (void)
+{
+ PrinterConfigDaemon *self;
+ self = PRINTER_CONFIG_DAEMON (g_object_new (PRINTER_CONFIG_TYPE_DAEMON,
+ NULL));
+ self->children = NULL;
+ self->killtimer = 0;
+ g_debug ("New daemon %p", self);
+ return self;
+}
diff -up /dev/null system-config-printer-1.1.10/udev/printer-config.h
--- /dev/null 2009-07-31 14:10:14.275001833 +0100
+++ system-config-printer-1.1.10/udev/printer-config.h 2009-07-31 15:09:03.276086247 +0100
@@ -0,0 +1,76 @@
+/* -*- Mode: C; c-file-style: "gnu" -*-
+ * printer-config - a D-Bus service for configuring printers
+ * Copyright (C) 2009 Red Hat, Inc.
+ * Author: Tim Waugh <twaugh@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#ifndef PRINTER_CONFIG_H
+#define PRINTER_CONFIG_H
+
+#include <glib-object.h>
+#include <dbus/dbus-glib.h>
+
+#define PRINTER_CONFIG_TYPE_DAEMON (printer_config_daemon_get_type ())
+#define PRINTER_CONFIG_DAEMON(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ PRINTER_CONFIG_TYPE_DAEMON, \
+ PrinterConfigDaemon))
+#define PRINTER_CONFIG_IS_DAEMON_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), PRINTER_CONFIG_TYPE_DAEMON, \
+ PrinterConfigDaemonClass))
+#define PRINTER_CONFIG_DAEMON_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), PRINTER_CONFIG_TYPE_DAEMON, \
+ PrinterConfigDaemonClass))
+
+typedef struct _PrinterConfigDaemon PrinterConfigDaemon;
+typedef struct _PrinterConfigDaemonClass PrinterConfigDaemonClass;
+
+struct children;
+struct _PrinterConfigDaemon
+{
+ GObject parent_instance;
+
+ /* instance members */
+ struct children *children;
+ guint killtimer;
+};
+
+struct _PrinterConfigDaemonClass
+{
+ GObjectClass parent_class;
+
+ /* class members */
+ DBusGConnection *connection;
+};
+
+/* used by PRINTER_CONFIG_TYPE_DAEMON */
+GType printer_config_daemon_get_type (void);
+
+PrinterConfigDaemon *printer_config_daemon_new (void);
+gboolean printer_config_daemon_usb_printer_add (PrinterConfigDaemon *d,
+ const char *devpath,
+ const char *deviceid,
+ DBusGMethodInvocation *ctx);
+
+gboolean printer_config_daemon_usb_printer_remove (PrinterConfigDaemon *d,
+ const char *devpath,
+ DBusGMethodInvocation *ctx);
+
+void main_quit (void);
+
+#endif /* PRINTER_CONFIG_H */
diff -up /dev/null system-config-printer-1.1.10/udev/printer-config-main.c
--- /dev/null 2009-07-31 14:10:14.275001833 +0100
+++ system-config-printer-1.1.10/udev/printer-config-main.c 2009-07-31 15:09:03.272086821 +0100
@@ -0,0 +1,159 @@
+/* -*- Mode: C; c-file-style: "gnu" -*-
+ *
+ * Copyright (C) 2007 David Zeuthen <davidz@redhat.com>
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <pwd.h>
+#include <grp.h>
+
+#include <glib.h>
+#include <glib-object.h>
+
+#define DBUS_API_SUBJECT_TO_CHANGE
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+
+#include "printer-config.h"
+
+#define NAME_TO_CLAIM "com.redhat.PrinterConfig"
+
+static gboolean
+acquire_name_on_proxy (DBusGProxy *bus_proxy)
+{
+ GError *error;
+ guint result;
+ gboolean res;
+ gboolean ret;
+
+ ret = FALSE;
+
+ if (bus_proxy == NULL) {
+ goto out;
+ }
+
+ error = NULL;
+ res = dbus_g_proxy_call (bus_proxy,
+ "RequestName",
+ &error,
+ G_TYPE_STRING, NAME_TO_CLAIM,
+ G_TYPE_UINT, 0,
+ G_TYPE_INVALID,
+ G_TYPE_UINT, &result,
+ G_TYPE_INVALID);
+ if (! res) {
+ if (error != NULL) {
+ g_warning ("Failed to acquire %s: %s", NAME_TO_CLAIM, error->message);
+ g_error_free (error);
+ } else {
+ g_warning ("Failed to acquire %s", NAME_TO_CLAIM);
+ }
+ goto out;
+ }
+
+ if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
+ if (error != NULL) {
+ g_warning ("Failed to acquire %s: %s", NAME_TO_CLAIM, error->message);
+ g_error_free (error);
+ } else {
+ g_warning ("Failed to acquire %s", NAME_TO_CLAIM);
+ }
+ goto out;
+ }
+
+ ret = TRUE;
+
+ out:
+ return ret;
+}
+
+static GMainLoop *loop;
+
+void main_quit (void);
+
+void
+main_quit (void)
+{
+ g_main_loop_quit (loop);
+}
+
+int
+main (int argc, char **argv)
+{
+ PrinterConfigDaemon *daemon;
+ GError *error;
+ DBusGProxy *bus_proxy;
+ DBusGConnection *bus;
+ int ret = 1;
+
+ g_type_init ();
+
+ error = NULL;
+ bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+ if (bus == NULL) {
+ g_warning ("Couldn't connect to system bus: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ bus_proxy = dbus_g_proxy_new_for_name (bus,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS);
+ if (bus_proxy == NULL) {
+ g_warning ("Could not construct bus_proxy object; bailing out");
+ goto out;
+ }
+
+ if (!acquire_name_on_proxy (bus_proxy) ) {
+ g_warning ("Could not acquire name; bailing out");
+ goto out;
+ }
+
+ g_debug ("Starting printer-config-daemon version %s", VERSION);
+
+ daemon = printer_config_daemon_new ();
+
+ if (daemon == NULL) {
+ goto out;
+ }
+
+ loop = g_main_loop_new (NULL, FALSE);
+
+ g_main_loop_run (loop);
+
+ g_object_unref (daemon);
+ g_main_loop_unref (loop);
+ ret = 0;
+
+ out:
+ return ret;
+}
diff -up system-config-printer-1.1.10/udev/udev-add-printer.a6cf4d3 system-config-printer-1.1.10/udev/udev-add-printer
--- system-config-printer-1.1.10/udev/udev-add-printer.a6cf4d3 2009-07-22 13:22:49.000000000 +0100
+++ system-config-printer-1.1.10/udev/udev-add-printer 2009-07-31 15:09:03.279086560 +0100
@@ -27,17 +27,28 @@ import sys
import traceback
from syslog import *
-def create_queue (c, name, device_uri, ppdname, info):
+def create_queue (c, printers, name, device_uri, ppdname, info):
# Make sure the name is unique.
- printers = cupshelpers.getPrinters (c)
- names = printers.keys ()
- if name in names:
- suffix = 2
- while (name + "-" + str (suffix)) in names:
+ namel = unicode (name.lower ())
+ unique = False
+ suffix = 1
+ while not unique:
+ unique = True
+ for printer in printers.values ():
+ if (not printer.discovered and
+ ((suffix == 1 and printer.name.lower () == namel) or
+ (suffix > 1 and
+ printer.name.lower () == namel + "-" + str (suffix)))):
+ unique = False
+ break
+
+ if not unique:
suffix += 1
if suffix == 100:
break
- name += str (suffix)
+
+ if suffix > 1:
+ name += "-" + str (suffix)
c.addPrinter (name,
device=device_uri,
@@ -45,14 +56,19 @@ def create_queue (c, name, device_uri, p
info=info,
location=os.uname ()[1])
cupshelpers.activateNewPrinter (c, name)
+ return name
-def add_queue (device_id, device_uris, is_fax=False):
+def add_queue (device_id, device_uris, fax_basename=False):
"""
Create a CUPS queue.
+
+ device_id: the IEEE 1284 Device ID of the device to add a queue for.
+ device_uris: device URIs, best first, for this device
+ fax_basename: False if this is not a fax queue, else name prefix
"""
syslog (LOG_DEBUG, "add_queue: URIs=%s" % device_uris)
- if is_fax:
+ if fax_basename != False:
notification = None
else:
try:
@@ -83,34 +99,22 @@ def add_queue (device_id, device_uris, i
name = name.replace ("/", "-")
name = name.replace ("#", "-")
- create_queue (c, name, device_uris[0], ppdname,
- "%s %s" % (id_dict["MFG"], id_dict["MDL"]))
+ if fax_basename != False:
+ name = fax_basename + "-" + name
- if not is_fax:
+ printers = cupshelpers.getPrinters (c)
+ uniquename = create_queue (c, printers, name, device_uris[0], ppdname,
+ "%s %s" % (id_dict["MFG"], id_dict["MDL"]))
+
+ if fax_basename == False:
# Look for a corresponding fax queue. We can only
# identify these by looking for device URIs that are the
# same as this one but with a different scheme. If we
# find one whose scheme ends in "fax", use that as a fax
# queue. Note that the HPLIP backends do follow this
# pattern (hp and hpfax).
- not_fax_schemes=["beh",
- "bluetooth",
- "http",
- "https",
- "ipp",
- "lpd",
- "parallel",
- "serial",
- "smb",
- "snmp",
- "socket",
- "scsi",
- "usb"]
- devices = c.getDevices (exclude_schemes=not_fax_schemes)
- for uri, device_dict in devices.iteritems ():
- if uri in device_uris:
- continue
-
+ used_uris = map (lambda x: x.device_uri, printers.values ())
+ for uri in device_uris[1:]:
if uri.find (":") == -1:
continue
@@ -119,17 +123,34 @@ def add_queue (device_id, device_uris, i
# Now see if the non-scheme parts of the URI match
# any of the URIs we were given.
for each_uri in device_uris:
+ if each_uri == uri:
+ continue
(s, device_uri_rest) = each_uri.split (":", 1)
if rest == device_uri_rest:
+ # This one matches. Check there is not
+ # already a queue using this URI.
+ if uri in used_uris:
+ break
+
+ try:
+ devices = c.getDevices(include_schemes=[scheme])
+ except TypeError:
+ # include_schemes requires pycups 1.9.46
+ devices = c.getDevices ()
+
+ device_dict = devices.get (uri)
+ if device_dict == None:
+ break
+
add_queue (device_dict.get ("device-id", ""),
- [uri], is_fax=True)
+ [uri], fax_basename=uniquename)
else:
# Not an exact match.
- name = device_uris[0]
+ uniquename = device_uris[0]
if notification:
try:
- notification.NewPrinter (status, name, id_dict["MFG"],
+ notification.NewPrinter (status, uniquename, id_dict["MFG"],
id_dict["MDL"], id_dict["DES"],
reduce(lambda x, y: x + ',' + y,
id_dict["CMD"]))
diff -up system-config-printer-1.1.10/udev/udev-configure-printer.c.a6cf4d3 system-config-printer-1.1.10/udev/udev-configure-printer.c
diff -up /dev/null system-config-printer-1.1.10/udev/udev-usb-printer.c
--- /dev/null 2009-07-31 14:10:14.275001833 +0100
+++ system-config-printer-1.1.10/udev/udev-usb-printer.c 2009-07-31 15:09:03.283086733 +0100
@@ -0,0 +1,454 @@
+/* -*- Mode: C; c-file-style: "gnu" -*-
+ * udev-usb-printer - a udev callout to configure print queues
+ * Copyright (C) 2009 Red Hat, Inc.
+ * Author: Tim Waugh <twaugh@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/*
+ * The protocol for this program is:
+ *
+ * udev-usb-printer add {DEVPATH}
+ * udev-usb-printer remove {DEVPATH}
+ *
+ * where DEVPATH is the path (%p) of the device
+ */
+
+#define LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE 1
+
+#include <dbus/dbus-glib-bindings.h>
+#include <fcntl.h>
+#include <libudev.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <usb.h>
+
+#include "printer-config-client-bindings.h"
+
+struct device_id
+{
+ char *full_device_id;
+ char *mfg;
+ char *mdl;
+ char *sern;
+};
+
+static void
+free_device_id (struct device_id *id)
+{
+ free (id->full_device_id);
+ free (id->mfg);
+ free (id->mdl);
+ free (id->sern);
+}
+
+static void
+parse_device_id (const char *device_id,
+ struct device_id *id)
+{
+ char *fieldname;
+ char *start, *end;
+ size_t len;
+
+ len = strlen (device_id);
+ if (len == 0)
+ return;
+
+ if (device_id[len - 1] == '\n')
+ len--;
+
+ id->full_device_id = malloc (len + 1);
+ fieldname = malloc (len + 1);
+ if (!id->full_device_id || !fieldname)
+ {
+ syslog (LOG_ERR, "out of memory");
+ exit (1);
+ }
+
+ memcpy (id->full_device_id, device_id, len);
+ id->full_device_id[len] = '\0';
+ fieldname[0] = '\0';
+ start = id->full_device_id;
+ while (*start != '\0')
+ {
+ /* New field. */
+
+ end = start;
+ while (*end != '\0' && *end != ':')
+ end++;
+
+ if (*end == '\0')
+ break;
+
+ len = end - start;
+ memcpy (fieldname, start, len);
+ fieldname[len] = '\0';
+
+ start = end + 1;
+ while (*end != '\0' && *end != ';')
+ end++;
+
+ len = end - start;
+
+ if (!id->mfg &&
+ (!strncasecmp (fieldname, "MANUFACTURER", 12) ||
+ !strncasecmp (fieldname, "MFG", 3)))
+ id->mfg = strndup (start, len);
+ else if (!id->mdl &&
+ (!strncasecmp (fieldname, "MODEL", 5) ||
+ !strncasecmp (fieldname, "MDL", 3)))
+ id->mdl = strndup (start, len);
+ else if (!id->sern &&
+ (!strncasecmp (fieldname, "SERIALNUMBER", 12) ||
+ !strncasecmp (fieldname, "SERN", 4) ||
+ !strncasecmp (fieldname, "SN", 2)))
+ id->sern = strndup (start, len);
+
+ if (*end != '\0')
+ start = end + 1;
+ }
+
+ free (fieldname);
+}
+
+static char *
+syspath_from_devpath (struct udev *udev, const char *devpath)
+{
+ const char *sys;
+ char *syspath;
+ size_t syslen, devpathlen = strlen (devpath);
+ sys = udev_get_sys_path (udev);
+ syslen = strlen (sys);
+ syspath = malloc (syslen + devpathlen + 1);
+ if (syspath == NULL)
+ return NULL;
+
+ memcpy (syspath, sys, syslen);
+ memcpy (syspath + syslen, devpath, devpathlen);
+ syspath[syslen + devpathlen] = '\0';
+ return syspath;
+}
+
+static char *
+device_id_from_devpath (const char *devpath,
+ struct device_id *id,
+ char *usbserial, size_t usbseriallen)
+{
+ struct udev *udev;
+ struct udev_device *dev, *parent_dev = NULL;
+ const char *idVendorStr, *idProductStr, *serial;
+ char *end;
+ unsigned long idVendor, idProduct;
+ struct usb_bus *bus;
+ struct usb_dev_handle *handle = NULL;
+ char ieee1284_id[1024];
+ const char *device_id = NULL;
+ char *syspath;
+ int conf = 0, iface = 0;
+ int got = 0;
+ char *usb_device_devpath;
+
+ id->full_device_id = id->mfg = id->mdl = id->sern = NULL;
+
+ udev = udev_new ();
+ if (udev == NULL)
+ {
+ syslog (LOG_ERR, "udev_new failed");
+ exit (1);
+ }
+
+ syspath = syspath_from_devpath (udev, devpath);
+ if (syspath == NULL)
+ {
+ udev_unref (udev);
+ exit (1);
+ }
+
+ dev = udev_device_new_from_syspath (udev, syspath);
+ if (dev == NULL)
+ {
+ udev_device_unref (dev);
+ udev_unref (udev);
+ syslog (LOG_ERR, "unable to access %s", syspath);
+ free (syspath);
+ exit (1);
+ }
+
+ free (syspath);
+ parent_dev = udev_device_get_parent_with_subsystem_devtype (dev,
+ "usb",
+ "usb_device");
+ if (!parent_dev)
+ {
+ udev_unref (udev);
+ syslog (LOG_ERR, "Failed to get parent");
+ exit (1);
+ }
+
+ usb_device_devpath = strdup (udev_device_get_devpath (parent_dev));
+ syslog (LOG_DEBUG, "parent devpath is %s", usb_device_devpath);
+
+ serial = udev_device_get_sysattr_value (parent_dev, "serial");
+ if (serial)
+ {
+ strncpy (usbserial, serial, usbseriallen);
+ usbserial[usbseriallen - 1] = '\0';
+ }
+ else
+ usbserial[0] = '\0';
+
+ /* See if we were triggered by a usblp add event. */
+ device_id = udev_device_get_sysattr_value (dev, "device/ieee1284_id");
+ if (device_id)
+ {
+ got = 1;
+ goto got_deviceid;
+ }
+
+ /* This is a low-level USB device. Use libusb to fetch the Device ID. */
+ idVendorStr = udev_device_get_sysattr_value (parent_dev, "idVendor");
+ idProductStr = udev_device_get_sysattr_value (parent_dev, "idProduct");
+
+ if (!idVendorStr || !idProductStr)
+ {
+ udev_device_unref (dev);
+ udev_unref (udev);
+ syslog (LOG_ERR, "Missing sysattr %s",
+ idVendorStr ?
+ (idProductStr ? "serial" : "idProduct") : "idVendor");
+ exit (1);
+ }
+
+ idVendor = strtoul (idVendorStr, &end, 16);
+ if (end == idVendorStr)
+ {
+ syslog (LOG_ERR, "Invalid idVendor: %s", idVendorStr);
+ exit (1);
+ }
+
+ idProduct = strtoul (idProductStr, &end, 16);
+ if (end == idProductStr)
+ {
+ syslog (LOG_ERR, "Invalid idProduct: %s", idProductStr);
+ exit (1);
+ }
+
+ syslog (LOG_DEBUG, "Device vendor/product is %04zX:%04zX",
+ idVendor, idProduct);
+
+ usb_init ();
+ usb_find_busses ();
+ usb_find_devices ();
+ for (bus = usb_get_busses (); bus && !got; bus = bus->next)
+ {
+ struct usb_device *device;
+ for (device = bus->devices; device && !got; device = device->next)
+ {
+ struct usb_config_descriptor *confptr;
+ if (device->descriptor.idVendor != idVendor ||
+ device->descriptor.idProduct != idProduct ||
+ !device->config)
+ continue;
+
+ conf = 0;
+ for (confptr = device->config;
+ conf < device->descriptor.bNumConfigurations && !got;
+ conf++, confptr++)
+ {
+ struct usb_interface *ifaceptr;
+ iface = 0;
+ for (ifaceptr = confptr->interface;
+ iface < confptr->bNumInterfaces && !got;
+ iface++, ifaceptr++)
+ {
+ struct usb_interface_descriptor *altptr;
+ int altset = 0;
+ for (altptr = ifaceptr->altsetting;
+ altset < ifaceptr->num_altsetting && !got;
+ altset++, altptr++)
+ {
+ if (altptr->bInterfaceClass == USB_CLASS_PRINTER &&
+ altptr->bInterfaceSubClass == 1)
+ {
+ int n;
+ handle = usb_open (device);
+ if (!handle)
+ {
+ syslog (LOG_DEBUG, "failed to open device");
+ continue;
+ }
+
+ n = altptr->bInterfaceNumber;
+ if (usb_claim_interface (handle, n) < 0)
+ {
+ usb_close (handle);
+ handle = NULL;
+ syslog (LOG_DEBUG, "failed to claim interface");
+ continue;
+ }
+
+ if (n != 0 && usb_claim_interface (handle, 0) < 0)
+ {
+ usb_close (handle);
+ handle = NULL;
+ syslog (LOG_DEBUG, "failed to claim interface 0");
+ continue;
+ }
+
+ n = altptr->bAlternateSetting;
+ if (usb_set_altinterface (handle, n) < 0)
+ {
+ usb_close (handle);
+ handle = NULL;
+ syslog (LOG_DEBUG, "failed set altinterface");
+ continue;
+ }
+
+ memset (ieee1284_id, '\0', sizeof (ieee1284_id));
+ if (usb_control_msg (handle,
+ USB_TYPE_CLASS |
+ USB_ENDPOINT_IN |
+ USB_RECIP_INTERFACE,
+ 0, conf, iface,
+ ieee1284_id,
+ sizeof (ieee1284_id),
+ 5000) < 0)
+ {
+ usb_close (handle);
+ handle = NULL;
+ syslog (LOG_ERR, "Failed to fetch Device ID");
+ continue;
+ }
+
+ got = 1;
+ usb_close (handle);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ got_deviceid:
+ if (got)
+ {
+ if (!device_id)
+ device_id = ieee1284_id + 2;
+ parse_device_id (device_id, id);
+ }
+
+ udev_device_unref (dev);
+ udev_unref (udev);
+ return usb_device_devpath;
+}
+
+static int
+do_add (DBusGProxy *proxy, const char *devpath)
+{
+ GError *error = NULL;
+ struct device_id id;
+ char *usb_device_devpath;
+ char usbserial[256];
+
+ syslog (LOG_DEBUG, "add %s", devpath);
+
+ usb_device_devpath = device_id_from_devpath (devpath, &id,
+ usbserial, sizeof (usbserial));
+
+ if (!id.mfg || !id.mdl)
+ {
+ syslog (LOG_ERR, "invalid or missing IEEE 1284 Device ID%s%s",
+ id.full_device_id ? " " : "",
+ id.full_device_id ? id.full_device_id : "");
+ exit (1);
+ }
+
+ syslog (LOG_DEBUG, "MFG:%s MDL:%s SERN:%s serial:%s", id.mfg, id.mdl,
+ id.sern ? id.sern : "-", usbserial);
+
+ com_redhat_PrinterConfig_usb_printer_add (proxy,
+ usb_device_devpath,
+ id.full_device_id,
+ &error);
+ free (usb_device_devpath);
+ free_device_id (&id);
+ return 0;
+}
+
+static int
+do_remove (DBusGProxy *proxy, const char *devpath)
+{
+ GError *error = NULL;
+ syslog (LOG_DEBUG, "remove %s", devpath);
+
+ com_redhat_PrinterConfig_usb_printer_remove (proxy,
+ devpath,
+ &error);
+ return 0;
+}
+
+int
+main (int argc, char **argv)
+{
+ DBusGConnection *connection;
+ DBusGProxy *proxy;
+ GError *error = NULL;
+ int add;
+
+ g_type_init ();
+
+ if (argc != 3 ||
+ !((add = !strcmp (argv[1], "add")) ||
+ !strcmp (argv[1], "remove")))
+ {
+ fprintf (stderr,
+ "Syntax: %s add {USB device path}\n"
+ " %s remove {USB device path}\n",
+ argv[0], argv[0]);
+ return 1;
+ }
+
+ openlog ("udev-usb-printer", 0, LOG_LPR);
+
+ connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+ if (connection == NULL)
+ {
+ syslog (LOG_ERR, "unable to connect to D-Bus: %s", error->message);
+ g_error_free (error);
+ exit (1);
+ }
+
+ proxy = dbus_g_proxy_new_for_name (connection,
+ "com.redhat.PrinterConfig",
+ "/com/redhat/PrinterConfig",
+ "com.redhat.PrinterConfig");
+
+ if (add)
+ do_add (proxy, argv[2]);
+ else
+ do_remove (proxy, argv[2]);
+
+ g_object_unref (proxy);
+ return 0;
+}