[X2go-User] Problems setting print system in x2go [Resolved]
Mario OROZ
mario.oroz at gmail.com
Mon Aug 15 20:56:53 CEST 2011
El 02/08/2011 11:47 p.m., John A. Sullivan III escribió:
> On Tue, 2011-08-02 at 17:10 -0300, Mario OROZ wrote:
>> El 02/08/2011 03:20 p.m., John A. Sullivan III escribió:
>>> On Tue, 2011-08-02 at 15:12 -0300, Mario OROZ wrote:
>>>> El 02/08/2011 02:37 p.m., John A. Sullivan III escribi:
>>>>> On Mon, 2011-08-01 at 16:49 -0300, Mario OROZ wrote:
>>>>>> Hello, I'm new to the list.
>>>>>> I use a server x2go on a Debian 6.0 with Windows XP clients.
>>>>>> I do not understand how to set the printing to print on printers on the client side.
>>>>>> I installed cups-x2go, and created a printer with cups cups-driver that provides
>>>>>> x2go.
>>>>>> I installed cups-x2go, and created a printer using the driver that provides
>>>>>> cups-x2go.
>>>>>> On the client windows, menu Option / Settings / Printing tab is checked the
>>>>>> "Show this dialog Before start printing"
>>>>>>
>>>>>> Can anyone tell me of some howto or explain how to configure the local client
>>>>>> printing from the server windows x2go
>>>>>>
>>>>>> Already, thanks
>>>>> <snip>
>>>>> Hi, Mario. Could you be a bit more detailed about where you are finding
>>>>> the problem. When you print from your X2Go desktop to the X2Go printer,
>>>>> what happens? Thanks - John
>>>>>
>>>> When I try to print from the client x2go desktop to the x2go printer nothings
>>>> happens!
>>>> The print job is queued in the spool of the x2go printer (cups
>>>> server), nothings happens from the client side!
>>>>
>>>> What I need is to understand how to configure the printing system, on both the
>>>> client
>>>> and the server side, to achieve redirect the print jobs on the server side to
>>>> client's local printer.
>>>> I saw no documentation on this configuration.
>>>>
>>>> This is achievable with the current version of x2goserver/x2goprint/cups-x2go?
>>>>
>>>> Since then, thanks for your answer
>>> <snip>
>>> Is the cups server running on the X2Go server?
>> Yes! x2go server and tne cups server are in the same PC.
>>
>>> If not, I believe it
>>> needs the ability to SSH to it to transfer the file.
>>>
>>> The printing is also dependent upon sshfs working properly. This should
>>> be relatively automagic assuming it is not being blocked by Windows.
>>>
>>> On the X2Go server side, if you issue a mount command, do you see a
>>> print spool directory, e.g.,
>>> sshuser at 127.0.0.1:/cygdrive/C/DOCUME~1/MYID~1/X2GO~1/S-9270~1/spool
>>> on /tmp/spool_myid/myid-63-1312305869_stDKDE_dp32 type fuse.sshfs
>>> (rw,nosuid,nodev,max_read=65536,user=myid)
>> I can see this type of mount!
>> being logged in with my username, from the server in a console; can change dir
>> to /tmp/spool_mario/mario-60-1312310981_stDGNOME_dp32
>> and I created 2 files in that directory:
>> $ Echo "some text"> x.txt
>> $ Echo "x.txt"> x.txt.ready
>>
>> On the client PC, the window for print for x2go emerged.
>>
>> Pressing the print button gave an error:
>>
>> Window Title: Printing error
>> Failed to execute command:
>> C:\Archivos de programa\GhostGum\gsview\gsprint.exe -query -color C:/Documents
>> and Settings/mario/.x2go/S-mario-60-1312310981_stDGNOME_dp32/spool/x.txt
>> [OK button]
>>
>> But that is not important; for now!
>>
>> The important thing is that apparently the print jobs are not placed / created
>> in the directory
>> /tmp/spool_mario/mario-60-1312310981_stDGNOME_dp32
>>
>> why?
> <snip>
> I really don't know. It has been quite a while since I setup X2Go
> printing and our environment is very specialized. If I recall
> correctly, the X2Go print driver is a script or somewhere there is a
> script involved which places the files in the appropriate tmp directory.
> Is there any chance that script is not executable?
>
> You may wish to find that script and edit it by adding some debug
> information. I usually add a logger command to send output or simply
> statements about where I am in the script to the syslog. This way, you
> can find out where the script is breaking. Hope that helps - John
>
Hello people!
I changed the cups-x2go script, so I could print on a client XP.
Also modify x2goprint, but not its functionality, just add a few lines to logging.
The problem, from what little I could understand, is that the user x2goprint it
is not created
in the installation package x2goserver.*.deb,
#·addgroup --system x2goprint
# adduser --system --no-create-home --shell /bin/bash --group --home
/var/spool/cups/x2goprint x2goprint
# passwd -d x2goprint
#### Surely there is a better way to create this user.
Besides having some leftover variables like $sess.
And x2goprint generates a problem when it checks if there is a mount point in
the session called
$spooldir when there is *additionaly* a shared directory configured for the
remote user on
the client PC for export.
Y commented the 2 script with #mario# tags for clarity
I copy here:
[BEGIN_cups-x2go]
#!/usr/bin/perl
# x2go CUPS backend
# Copyright 2009-2011 Obviously Nice
#
# 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
# Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
use Sys::Syslog qw( :DEFAULT setlogsock);
#mario# module to log to syslog
use Sys::Hostname;
use File::Basename;
use File::Copy;
use strict;
setlogsock('unix');
openlog($0,'','user');
#mario# for log to syslog
my $x2goserver = "local";
my $printdsa = "/root/.x2go/ssh/.x2goprint/id_dsa";
my $ps2pdf = "/usr/bin/gs -q -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH -dSAFER
-sDEVICE=pdfwrite -sOutputFile=\"%s.pdf\" -dAutoRotatePages=/PageByPage
-dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode
-dPDFSETTINGS=/prepress -c .setpdfwrite -f /usr/bin/margen-offset.ps \"%s\"";
my $cfgfile="/etc/cups/cups-x2go.conf";
my $userName;
my @sessions;
my $host=hostname();
sub readconfig
{
if( -e $cfgfile)
{
open(CFG,"<$cfgfile");
while(!eof(CFG))
{
my $ln=<CFG>;
my $nocomln=(split("#",$ln))[0];
$nocomln=~s/\n//g;
my @valarr=split("=",$nocomln);
my $option=@valarr[0];
shift(@valarr);
my $value=join("=", at valarr);
$option=~s/ //g;
if($option eq "x2goserver")
{
$x2goserver=$value;
$x2goserver=~s/ //g
}
if($option eq "printdsa")
{
$printdsa=$value;
}
if($option eq "ps2pdf")
{
$ps2pdf=$value;
}
}
close(CFG);
}
}
sub getsessions
{
my $sesslist;
if ( $x2goserver eq "local" )
{
open (SQLCONF, "</etc/x2go/x2gosql/sql");
my $cfgline=<SQLCONF>;
close (SQLCONF);
if(($cfgline=~m/local/)||($cfgline=~m/sqlite/))
{
$sesslist=`su $userName -c "x2golistsessions --all-servers"`;
}
}
else
{
$sesslist=`ssh -i $printdsa x2goprint\@$x2goserver "sudo x2goprint
$userName"`;
}
@sessions=split("\n",$sesslist);
}
sub printfile
{
my ($pfile,$tfile,$phost, $sess)=@_;
my $bname=basename($pfile);
if($phost eq $host)
{
my ($tm,$tm,$uid,$gid,$tm,$tm,$tm,$spooldir)=getpwnam("x2goprint");
#mario# I create the user x2goprint with home=/var/spool/cups/x2goprint
#mario# drwxrwxr-x 2 x2goprint x2goprint 4096 ago 12 20:20
/var/spool/cups/x2goprint
#mario# and put x2goprint to sudoers like the manual.
my $spfile="$spooldir/$bname";
#mario# eliminate $sess from $spooldir$sess$bname and put "/" here.
syslog('info', "spfile-> $spfile");
copy($pfile, $spfile);
syslog('info', "printfile copy pfile-> $pfile to spfile-> $spfile");
copy($tfile, "$spfile.title");
syslog('info', "printfile copy tfile-> $tfile to spfile.title->
$spfile.title");
chown $uid,$gid,$spfile;
chown $uid,$gid,"$spfile.title";
#mario# added the above line to $spfile.title
system( "su x2goprint -c \"sudo x2goprint $userName $sess $bname
$bname.title\"" );
#mario# eliminate 2nd and 3th mention off $sess; in $bname and $bname.title
syslog('info', "su x2goprint -c sudo x2goprint $userName $sess $bname
$bname.title");
}
else
{
system ("scp -i $printdsa $pfile $tfile
x2goprint\@$x2goserver:~x2goprint/");
system( "ssh -i $printdsa x2goprint\@$x2goserver \"sudo x2goprint
$userName $sess $bname $bname.title\"" );
}
}
my $uname=$ENV{USER};
if (!$ARGV[0])
{
print "file cups-x2go:/ \"Virtual X2GO Printer\" \"CUPS-X2GO\"
\"MFG:Generic;MDL:CUPS-X2GO Printer;DES:Generic CUPS-X2GO
Printer;CLS:PRINTER;CMD:POSTSCRIPT;\"\n";
exit 0;
}
if (scalar(@ARGV) < 5 || scalar(@ARGV) > 6)
{
print STDERR "ERROR: Usage: cups-x2go job-id user title copies options
[file]\n";
exit 1;
}
my $jobID;
my $jobTitle;
my $copies;
my $printOptions;
my $printFile;
($jobID, $userName, $jobTitle, $copies, $printOptions, $printFile) = @ARGV;
my $sepa = "->-";
#mario# to separate de printjob filename
syslog('info', "I received from cups-> $jobID $userName $jobTitle $copies
$printOptions $sepa $printFile");
#mario# to see what he received from cups
my $tempFile;
if (!$printFile)
{
my $jid = $jobID;
my $uid = $userName;
$jid =~ s/\W//g; #sanity check
$uid =~ s/\W//g; #sanity check
$tempFile = "$ENV{TMPDIR}/$jid-$uid-cupsjob$$";
syslog('info', "Come from STDIN -> it create tempFile = $tempFile\n");
#mario# Come from stdin?
open (OUT, ">$tempFile") or die "ERROR: Cannot write $tempFile: $!\n";
while(<STDIN>)
{
print OUT "$_";
}
close OUT;
$printFile = $tempFile;
}
readconfig();
$ps2pdf=~s/%s/$printFile/g;
system($ps2pdf);
$printFile="$printFile.pdf";
my $titleFile="$printFile.title";
open (TITLE,">$titleFile");
print TITLE $jobTitle;
close (TITLE);
getsessions();
for(my $i=0; $i<scalar(@sessions);$i++ )
{
my @sinfo=split("\\|", at sessions[$i]);
if(@sinfo[4] eq "R")
{
printfile( $printFile, $titleFile, @sinfo[3], @sinfo[1]);
syslog('info', "Call to printfile function with: $printFile $titleFile
@sinfo[3] @sinfo[1]\n");
#mario# to see how i call printfile function!
}
}
unlink ($printFile);
unlink ($titleFile);
closelog;
#mario# to close syslog logging.
[END_cups-x2go]
======================//======================//=====================
======================//======================//=====================
[BEGIN_x2goprint]
#!/usr/bin/perl
# Copyright (C) 2007-2011 X2go Project - http://wiki.x2go.org
#
# 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.
#
# Copyright (C) 2007-2011 Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
# Copyright (C) 2007-2011 Heinz-Markus Graesing
<heinz-m.graesing at obviously-nice.de>
use Sys::Syslog qw( :DEFAULT setlogsock);
#mario# module to log to syslog
use File::Basename;
use File::Copy;
use File::Path;
use strict;
use lib "/usr/lib/x2go";
use x2godbwrapper;
setlogsock('unix');
openlog($0,'','user');
#mario# for log to syslog
if (scalar(@ARGV) ==1)
{
system ("su @ARGV[0] -c \"x2golistsessions --all-servers\" ");
}
elsif (scalar(@ARGV) != 4)
{
print STDERR "ERROR: Usage:\nx2goprint user session file
titleFile\nx2goprint user\n";
exit 1;
}
my ($user, $session, $file, $titleFile)=@ARGV;
syslog('info', "X2GOPRINT receive ARGS: $user $session $file $titleFile");
#mario# wath args come from cups-x2go
my ($tm,$tm,$uid,$gid,$tm,$tm,$tm,$homedir)=getpwnam("x2goprint");
my $printdir=$homedir;
my $title;
if( -e "$printdir/$titleFile")
{
open (TITLE,"<$printdir/$titleFile");
$title=<TITLE>;
close (TITLE);
unlink("$printdir/$titleFile");
}
($tm,$tm,$uid,$gid,$tm,$tm,$tm,$homedir)=getpwnam($user);
my $spoolbase="/tmp/spool_$user";
my $spooldir="$spoolbase/$session";
my $spooltmp="$spoolbase/tmp";
mkpath($spooltmp);
chown $uid, $gid, "$spooltmp";
chmod 0700, "$spooltmp";
my ($mounts)=db_getmounts($session);
if( $mounts=~m/$spooldir/)
#mario# here, if I have an exported directory (shared folder) from the client
does not match the conditions outlined in the if
#mario# and jump the copy of the printjob to the client. PLEASE see this problem!
{
move("$printdir/$file", "$spooltmp") or die "$!: Can't move $file to
$spooltmp/";
chown $uid, $gid, "$spooltmp/$file";
system("su $user -c \"mv $spooltmp/$file $spooldir\"");
syslog('info', "X2GOPRINT: su $user -c mv $spooltmp/$file $spooldir");
#mario# $user move file from the server to client sshfs $spooldir direcoty
mounted
open (RFILE,">$spooltmp/$file.ready");
print RFILE "$file\n$title";
close (RFILE);
chown $uid, $gid, "$spooltmp/$file.ready";
system ("su $user -c \"mv $spooltmp/$file.ready $spooldir\"");
syslog('info', "X2GOPRINT: su $user -c mv $spooltmp/$file.ready $spooldir");
#mario# the same as above...
}
else
{
unlink("$printdir/$file");
}
closelog;
#mario# close the log to syslog
[END_x2goprint]
=====================================/////===============================
with Debian 6.0 server
repository apt-get:
deb http://packages.x2go.org/debian squeeze main
deb-src http://packages.x2go.org/debian squeeze main
And Win XP SP3
What are the repositories of *Production*?
I hope will be useful to someone
Mario.
More information about the x2go-user
mailing list