staging.inyokaproject.org

Baustelle/Epson_NX-_und_SX-Series

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |
Dieses Thema ist die Diskussion des Artikels Archiv/Epson_NX-_und_SX-Series.

bunti88

Anmeldungsdatum:
27. Januar 2009

Beiträge: Zähle...

Ich hab da mal ne wichtige Frage

Ich habe vor kurzer Zeit einen Epson Stylus SX210 (so ein All-in-One-Gerät) gekauft. Ich kann zwar scannen (dies konnte ich mit dem iscan-Treiber von avasys.jp einrichten), aber nicht drucken. Ich bekomme immer und immer wieder den gleichen fehler, egal was ich mache:

/usr/lib/cups/filter/pipslite-wrapper failed

Ich habe mir gedacht, dass es sich um den gleichen Fehler handeln könnte. Nun habe ich den Pipslite-Treiber von der avasys-jp-Website heruntergeladen, und die Datei pipslite-1.4.0-4.tar.gz entpackt (Das ist der Treiber für die 64-Bit version). In dem neu entstanden Ordner unter dem Verzeichnis src gibt es ja die Datei wrapper.c, die so ausieht:

/*
 * Photo Image Print System Lite
 * Copyright (C) 2002-2005 AVASYS CORPORATION.
 * Copyright (C) Seiko Epson Corporation 2002-2005.
 *
 *  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., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#include <cups/cups.h>
#include <cups/ppd.h>
#include <cups/raster.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
/* added 22-04-2004 */
#include <signal.h>
#include "ekpcom.h"

#define PIPSLITE_NAME_MAX 41    /* shadows #define in filter.c! */

#define WIDTH_BYTES(bits) (((bits) + 31) / 32 * 4)

#define PIPSLITE_WRAPPER_VERSION "* pipslite-wrapper is a part of " PACKAGE_STRING


typedef struct rtp_filter_option {
	char model[PIPSLITE_NAME_MAX + 1];
	char model_low[PIPSLITE_NAME_MAX + 1];
	char ink[PIPSLITE_NAME_MAX + 1];
	char media[PIPSLITE_NAME_MAX + 1];
	char quality[PIPSLITE_NAME_MAX + 1];
} filter_option_t;

int cancel_flg;

/* Static functions */
static int get_option_for_ppd (const char *, filter_option_t *);
static int get_option_for_arg (const char *, filter_option_t *);
/* Get value for PPD. */
static char * get_default_choice (ppd_file_t *, const char *);

/* added 22-04-2004 */
static void sig_set (void);
static void sigterm_handler (int sig);

/*
 * $$$ CUPS Filter Options $$$
 *
 * printer  - The name of the printer queue
 *            (normally this is the name of the program being run)
 * job      - The numeric job ID for the job being printed
 * user     - The string from the originating-user-name attribute
 * title    - The string from the job-name attribute
 * copies   - The numeric value from the number-copies attribute
 * options  - String representations of the job template attributes, separated
 *            by spaces. Boolean attributes are provided as "name" for true
 *            values and "noname" for false values. All other attributes are
 *            provided as "name=value" for single-valued attributes and
 *            "name=value1,value2,...,valueN" for set attributes
 * filename - The request file
 */
int
main (int argc, char *argv[])
{
	int fd;			/* file descriptor */
	FILE *pfp;
	int i;			/* loop */
	cups_raster_t *ras;	/* raster stream for printing */
	cups_page_header_t header; /* page device dictionary header */
	filter_option_t fopt;

/* attach point */
#ifdef USE_DEBUGGER
	int flag = 1;
	while (flag) sleep (3);
#endif /* USE_DEBUGGER */

	cancel_flg = 0;
	memset (&fopt, 0, sizeof (filter_option_t));
	/* added 22-04-2004 */
	sig_set();

	if (argc < 6 || argc > 7)
	{
		for ( i = 1; i < argc; i++ ) {
			if ( (0 == strncmp(argv[i], "-v", (strlen("-v")+1)) )
				|| (0 == strncmp(argv[i], "--version", (strlen("--version")+1)) )
				) {
				fprintf(stderr, "%s\n", PIPSLITE_WRAPPER_VERSION);
				return 0;
			} else if ( (0 == strncmp(argv[i], "-h", (strlen("-h")+1)) )
				|| (0 == strncmp(argv[i], "--help", (strlen("--help")+1)) )
				) {
				fprintf(stderr, "%s\n", PIPSLITE_WRAPPER_VERSION);
				return 0;
			}
		}
		fprintf (stderr, "Insufficient options.\n");
		return 1;
	}

	if (argc == 7)
	{
		fd = open (argv[6], O_RDONLY);
		if (fd < 0)
		{
			perror ("open");
			return 1;
		}
	}
	else
	{
		fd = 0;
	}
	
	if (get_option_for_arg (argv[5], &fopt))
	{
		fprintf (stderr, "Cannot read filter option. Cannot get option of PIPS.");
		return 1;
	}

	if (get_option_for_ppd (argv[0], &fopt))
	{
		fprintf (stderr, "PPD file is broken. Cannot get option of PIPS.");
		return 1;
	}

	/* Print start */
	ras = cupsRasterOpen (fd, CUPS_RASTER_READ);
	if (ras == NULL)
	{
		fprintf (stderr, "Can't open CUPS raster file.");
		return 1;
	}

	pfp = NULL;
	while (cupsRasterReadHeader (ras, &header) && !cancel_flg)
	{
		int image_bytes;
		char *image_raw;
		int write_size = 0;

		if (pfp == NULL)
		{
			char tmpbuf[256];

			sprintf (tmpbuf, "%s/pipslite-filter %s %d %d %s %s %s",
				 CUPS_FILTER_PATH,
				 fopt.model,
				 header.cupsWidth,
				 header.cupsHeight,
				 fopt.ink,
				 fopt.media,
				 fopt.quality);

			pfp = popen (tmpbuf, "w");

			if (pfp == NULL)
			{
				perror ("popen");
				return 1;
			}
		}

		image_bytes = WIDTH_BYTES(header.cupsBytesPerLine * 8);
		image_raw = (char *)calloc (sizeof (char), image_bytes);

		for (i = 0; i < header.cupsHeight && !cancel_flg; i ++)
		{
			if (!cupsRasterReadPixels (ras, (unsigned char*)image_raw, header.cupsBytesPerLine))
			{
				fprintf (stderr, "cupsRasterReadPixels");
				return 1;
			}
			
			write_size = fwrite (image_raw, image_bytes, 1, pfp);
			if (write_size != 1)
			{
				perror ("fwrite");
				return 8;
			}
		}
		
		free (image_raw);
	}
	
	pclose (pfp);
	cupsRasterClose (ras);
	return 0;
}


static int
get_option_for_ppd (const char *printer, filter_option_t *filter_opt_p)
{
	char *ppd_path;		/* Path of PPD */
	ppd_file_t *ppd_p;	/* Struct of PPD */
	char *opt;		/* Temporary buffer (PPD option) */
	int i;			/* loop */

	/* Get option from PPD. */
	ppd_path = (char *) cupsGetPPD (printer);
	ppd_p = ppdOpenFile (ppd_path);

	/* Make library file name */
	strcpy (filter_opt_p->model, ppd_p->modelname);
	for (i = 0; filter_opt_p->model[i] != '\0' && i < PIPSLITE_NAME_MAX; i ++)
		filter_opt_p->model_low[i] = tolower (filter_opt_p->model[i]);
	filter_opt_p->model_low[i] = '\0';

	/* media */
	if (filter_opt_p->media[0] == '\0')
	{
		opt = get_default_choice (ppd_p, "PageSize");
		if (!opt)
			return 1;

		strcpy (filter_opt_p->media, opt);
	}

	/* ink */
	if (filter_opt_p->ink[0] == '\0')
	{
		opt = get_default_choice (ppd_p, "Ink");
		if (!opt)
			return 1;

		strcpy (filter_opt_p->ink, opt);
	}

	/* quality */
	if (filter_opt_p->quality[0] == '\0')
	{
		opt = get_default_choice (ppd_p, "Quality");
		if (!opt)
			return 1;

		strcpy (filter_opt_p->quality, opt);
	}

#ifdef INK_CHANGE_SYSTEM
	/* inkset */
	if (filter_opt_p->inkset[0] == '\0')
	{
		opt = get_default_choice (ppd_p, "InkSet");
		if (!opt)
			return 1;

		strcpy (filter_opt_p->inkset, opt);
	}
#endif

	ppdClose (ppd_p);
	return 0;
}


static int
get_option_for_arg (const char *opt_str, filter_option_t *filter_opt_p)
{
	int opt_num;
	cups_option_t *option_p;
	const char *opt;

	const char *media_names[] = { "PageSize", "PageRegion",  "media", "" };
	int i;

	if (strlen (opt_str) == 0)
		return 0;

	opt_num = 0;
	option_p = NULL;
	opt_num = cupsParseOptions (opt_str, opt_num, &option_p);

	for (i = 0; *media_names[i] != '\0'; i ++)  /* chenged Wed Jan 28 2009 */
	{
		opt = cupsGetOption (media_names[i], opt_num, option_p);
		if (opt)
		{
			int num;

			num = strcspn (opt, ",");
			if (num >= PPD_MAX_NAME)
				return 1;

			strncpy (filter_opt_p->media, opt, num);
			filter_opt_p->media[num] = '\0';

			break;
		}
	}

	opt = cupsGetOption ("Ink", opt_num, option_p);
	if (opt)
		strcpy (filter_opt_p->ink, opt);

	opt = cupsGetOption ("Quality", opt_num, option_p);
	if (opt)
		strcpy (filter_opt_p->quality, opt);


	return 0;
}


/* Get value for PPD */
static char *
get_default_choice (ppd_file_t *ppd_p, const char *key)
{
	ppd_option_t *option;
	ppd_choice_t *choice;

	option = ppdFindOption (ppd_p, key);
	if (!option)
		return NULL;
	
	choice = ppdFindChoice (option, option->defchoice);
	if (!choice)
		return NULL;

	return choice->choice;
}

static void
sig_set (void)
{

#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
	sigset (SIGTERM, sigterm_handler);
#elif defined(HAVE_SIGACTION)
        {
          struct sigaction action;

          memset (&action, 0, sizeof(action));

          sigemptyset (&action.sa_mask);
          action.sa_handler = sigterm_handler;
          sigaction (SIGTERM, &action, NULL);
        }
#else
	signal (SIGTERM, sigterm_handler);
#endif /* HAVE_SIGSET */

  return;
}


static void
sigterm_handler (int sig)
{
  char syscommand[256];
  #ifdef NO_ACTION
    char cancel_command[] = "cancel_nd4";
  #else
    char cancel_command[] = "cancel";
  #endif
  int len;

  cancel_flg = 1;

  return;
}

nun weiss ich nicht so recht, was ich genau ändern sprich modifizieren muss, um meinen Drucker zum laufen zu bringen. Ich hoffe das mir jemand helfen kann. Ich hab auch schon dieses Thema in diesem Forum angesprochen, aber dort konnte mir bis jetzt niemand weiterhelfen http://forum.ubuntuusers.de/topic/epson-stylus-sx210/#post-2132886.

bunti88

p.s. ich habe Ubuntu 9.04 64bit

laserb

Anmeldungsdatum:
14. Oktober 2008

Beiträge: 31

Ich denke du musst die Änderungen daran vornehmen, die vorher schon angesprochen wurden. Die Zeilennummer bleibt in etwa gleich. Es ändert sich nur um wenige Zeilen. Am einfachsten durchsucht man die Datei nach dem Zeilenanfang (d.h. nach "const char *media_names[]" bzw. "for (i = 0; *media_names[i]" ).

Konkret heisst das in deinem Fall: 1) in Zeile 283: ändere

const char *media_names[] = { "PageSize", "PageRegion",  "media", "" };

zu

const char *media_names[] = { "PageSize", "PageRegion",  "media", NULL };

und in Zeile 293: ändere

for (i = 0; *media_names[i] != '\0'; i ++)

zu

for (i = 0; *media_names[i] != NULL; i ++)

danach sollte es mit einem

1
2
3
./configure --prefix=/usr
sudo make
sudo make install

eigentlich funktionieren. Das --prefix=/usr sorgt dafür, dass die ppd in /usr/share landet und nicht in /usr/local/share, wo er sie bei mir nicht findet.

Edit: Ich hab es gerade mit den aktuellen Versionen von der Homepage probiert. Das Kompilieren bricht bei mir ab mit der Meldung:

make  all-recursive
make[1]: Betrete Verzeichnis '/media/Dateien/Downloads/Utilities/pipslite-1.4.0-4'
Making all in lib
make[2]: Betrete Verzeichnis '/media/Dateien/Downloads/Utilities/pipslite-1.4.0-4/lib'
/bin/bash ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -I../src/filter-l2/magick     -g -O2 -Wall -MT escpr_api.lo -MD -MP -MF .deps/escpr_api.Tpo -c -o escpr_api.lo escpr_api.c
../libtool: line 793: X--tag=CC: command not found
../libtool: line 826: libtool: ignoring unknown tag : command not found
../libtool: line 793: X--mode=compile: command not found
../libtool: line 959: *** Warning: inferring the mode of operation is deprecated.: command not found
../libtool: line 960: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
../libtool: line 1103: Xgcc: command not found
../libtool: line 1103: X-DHAVE_CONFIG_H: command not found
../libtool: line 1103: X-I.: command not found
../libtool: line 1103: X-I..: command not found
../libtool: line 1103: X-I../src/filter-l2/magick: No such file or directory
../libtool: line 1103: X-g: command not found
../libtool: line 1103: X-O2: command not found
../libtool: line 1103: X-Wall: command not found
../libtool: line 1103: X-MT: command not found
../libtool: line 1103: Xescpr_api.lo: command not found
../libtool: line 1103: X-MD: command not found
../libtool: line 1103: X-MP: command not found
../libtool: line 1103: X-MF: command not found
../libtool: line 1103: X.deps/escpr_api.Tpo: No such file or directory
../libtool: line 1103: X-c: command not found
../libtool: line 1154: Xescpr_api.lo: command not found
../libtool: line 1159: libtool: compile: cannot determine name of library object from `': command not found
make[2]: *** [escpr_api.lo] Fehler 1
make[2]: Verlasse Verzeichnis '/media/Dateien/Downloads/Utilities/pipslite-1.4.0-4/lib'
make[1]: *** [all-recursive] Fehler 1
make[1]: Verlasse Verzeichnis '/media/Dateien/Downloads/Utilities/pipslite-1.4.0-4'
make: *** [all] Fehler 2

Da hat es wohl in den lib's noch irgendwo einen Fehler... Vielleicht hast du ja mehr Glück. Bei mir hat es jedenfalls mit dieser Version unter Jaunty 64-Bit funktioniert (wrapper.c ist bereits korrigiert).

pipslite-1.4.0 (1.8 MiB)
Download pipslite-1.4.0

StefanD986

Anmeldungsdatum:
18. Oktober 2009

Beiträge: Zähle...

Also ich habe gestern die Installation durchgemacht, und es lief relativ Problemlos (nachdem ich einen Nachmittag damit verbracht habe mir aus allen Ecken des Internets die Infos zusammenzuklauben)

Ich habe den Drucker Epson Stylus SX600FW unter Ubuntu Jaunty installiert. Dabei traten zwei Probleme auf (die auch ihr vor mir schon bemerkt habt):

1. Hängt die vorkompilierte pipslite deb von Avasys von libltdl3 ab, bei Jaunty gibt es aber nur die neuere libltdl7 2. Erzeugt pipslite-install eine Fehlerhafte ppd Datei auf deutschen Systemen (und in allen anderen Ländern wo Dezimal-Komma statt eines Dezimal-Punktes verwendet wird)

Die beiden Probleme wurden zwar auch schon in den Posts vorher gelöst, aber ich bilde mir ein das meine Lösung etwas sauberer ist 😉

Zu 1.: Statt der vorkompilierten pipslite deb machen wir einfach selber eine die von libltdl7 abhängt und nicht mehr von der 3er Version. Dank der von Avasys bereitgestellten .dsc Datei ist das fast so einfach wie die vorkompilierte zu installieren: Zuerste sollten einige Pakete installiert werden: sudo apt-get install fakeroot build-essential debhelper libcups2-dev libcupsimage2-dev libgtk2.0-dev libltdl7-dev

Dann lädt man sich die folgenden beiden Dateien von der Avasys Treiber Seite herunter (die stehen direkt unter dem .deb Paket): pipslite_1.4.0-5.tar.gz pipslite_1.4.0-5.dsc (Eventuell haben die Dateien eine andere Versionsnummer)

In dem Ordner wohin die Dateien heruntergeladen wurden gibt man jetzt auf der Konsole den Befehl dpkg-source -x pipslite_1.4.0-5.dsc ein (Versionsnummer beachten). Damit wird die tar.gz Datei automatisch entpackt. Nun wechselt man in den Ordner pipslite-1.4.0: cd pipslite-1.4.0

Dort gibt man den folgenden Befehl ein: dpkg-buildpackage -rfakeroot -b Damit wird einem ein schönes pipslite deb Paket gebaut, was von libltdl7 abhängt. Es wird im Ordner darüber abgelegt. Dorthin wechseln wir mit cd .. und installieren das Paket wie gewohnt mit dpkg -i pipslite-1.4.0-5_i386.deb oder über den grafischen Paketinstaller.

Zum 2. Problem: Das ist sehr einfach zu lösen. Da auf deutschen Systemen Standardmäßig ein Komma statt eines Punktes als Dezimaltrenner verwendet wird, werden die Seitenabmessungen und andere Einstellungen in der generierten ppd Datei mit Kommas erzeugt. Das versteht CUPS allerdings nicht und weigert sich deshalb zu drucken. Um das zu verhindern ruft man pipslite-installer einfach mit englischen Spracheinstellungen auf. Das geht so (auf der Konsole): LANG=C pipslite-installer

Und schon haben wir keine Probleme mehr mit Kommas.

Ich werde das mal in den Wiki Artikel schreiben, denn es hat mich doch schon einige Mühe gekostet das herauszufinden.

pipslite_1.4.0-5_libltdl7_jaunty_32bit_i386.deb (677.5 KiB)
pipslite mit libltdl7 für Jaunty 32bit kompiliert.
Download pipslite_1.4.0-5_libltdl7_jaunty_32bit_i386.deb

StefanD986

Anmeldungsdatum:
18. Oktober 2009

Beiträge: 2

So, ich habe mal den Wiki Artikel ergänzt.

Aus meiner Erfahrung kann ich sagen, dass der pipslite Daemon nicht laufen muss um drucken zu können. Zumindest wenn man das usb:// Protokoll nimmt und nicht pipslite://

Nur um den Tintenstand abzufragen muss der Daemon laufen.

Da ich das nur für Jaunty mit 100%iger Sicherheit sagen kann habe ich in den Abschnitten zu Hardy mal drin gelassen. Für Jaunty habe ich einen entsprechenden Hinweis geschrieben, dass der pisplite:// Drucker gelöscht werden kann.

michibeck

Anmeldungsdatum:
2. Dezember 2009

Beiträge: Zähle...

Zum scannen mit dem SX600FW im Netzwerk:

http://www.ubuntu-forum.de/artikel/52330/scanner-epson-stylus-sx600fw-im-netzwerk-mfd-linux.html

Der Druckertreiber von pipslite funktioniert bei mir besser als gutenprint. Der Drucker hat mit gutenprint längeren Vorlauf.

dauerbaustelle

(Themenstarter)
Avatar von dauerbaustelle

Anmeldungsdatum:
2. Juli 2007

Beiträge: 1936

Magst du das ins Wiki einpflegen?

michibeck

Anmeldungsdatum:
2. Dezember 2009

Beiträge: Zähle...

Hallo, falls ich gemeint bin, würde ich gerne tun. Habe aber keine Ahnung wie das funktioniert. Gibt es dazu eine Anleitung? Ansonsten kann das gerne jemand anderes übernehmen.

dauerbaustelle

(Themenstarter)
Avatar von dauerbaustelle

Anmeldungsdatum:
2. Juli 2007

Beiträge: 1936

Wiki/Benutzung dürfte ein guter Startpunkt sein. Und Wiki.

michibeck

Anmeldungsdatum:
2. Dezember 2009

Beiträge: Zähle...

Hallo, ich habe das Wiki um Scannen im Netzwerk ergänzt. (Mein erster Wiki-Eintrag ☺) Hoffe, dass das so in Ordnung ist. Kann ja vielleicht mal ein Erfahrenerer Forum-User drüberschauen, ob das so bleiben kann.

dauerbaustelle

(Themenstarter)
Avatar von dauerbaustelle

Anmeldungsdatum:
2. Juli 2007

Beiträge: 1936

Sieht doch schon ziemlich gut aus!

Ich würde den Text in die Sektionen "Drucken" und "Scannen" auslagern.

Die Information, wie man an iscan kommt, ist schon in der Scan-Sektion angegeben und muss nicht wiederholt werden. Das Eintragen der IP-Adresse in epkowa.conf ist imho nicht ganz verständlich. Wo muss ich was hinschreiben?

Für Unterüberschriften bitte das entsprechende Syntax-Element und keine Fett-Markierungen nutzen.

Ich würde die Anzahl der Hinweis-Boxen reduzieren, weil sie das Ganze etwas unübersichtlich machen.

michibeck

Anmeldungsdatum:
2. Dezember 2009

Beiträge: 12

Habe noch einige Änderungsvorschläge eingearbeitet. Für die Übersichtlichkeit habe ich den Teil, wie man an iscan kommt, dringelassen. Aber wenn das auf keinen Fall erwünscht ist, kann es auch herausgelöscht werden. Bzgl. der Überschriften, die ich einfach fett gemacht hatte, habe ich die Syntax einer Überschrift genutzt. Aber jetzt erscheinen diese Punkte in dem Inhaltsverzeichnis. Das finde ich nicht so toll. Soll ich das wirklich so lassen, oder sollen die Schritte 1-5 nicht doch einfach in fett formatiert werden? Oder keine der beiden Varianten und einfach nicht fett und nicht Überschrift?

dauerbaustelle

(Themenstarter)
Avatar von dauerbaustelle

Anmeldungsdatum:
2. Juli 2007

Beiträge: 1936

Ich hab das mal etwas gekürzt und umstrukturiert. Ich hoffe, das ist jetzt besser lesbar ☺

michibeck

Anmeldungsdatum:
2. Dezember 2009

Beiträge: 12

So gefällt es mir auch...☺

michibeck

Anmeldungsdatum:
2. Dezember 2009

Beiträge: 12

Hallo, mein Epson SX600FW druckt seit einiger Zeit extrem langsam. Würde mal schätzen ne 1/3 Seite pro Minute. Hat von euch jemand ähnliche Probleme oder gar eine Lösung?

Der Drucker hängt per CAT im Netzwerk und ich nutze die Treiber von Avasys.

michibeck

Anmeldungsdatum:
2. Dezember 2009

Beiträge: 12

Hallo, ist es vielleicht möglich, dass jemand die ppd-Datei zum Download zur Verfügung stellt oder mir sie irgendwie anderweitig zur Verfügung stellt? Ich würde sie ja selbst machen, aber ich habe leider kein USB-Kabel für den SX600FW und kann daher den Drucker nicht direkt mit meinem System verbinden. Das wäre echt super nett!