[X2Go-Commits] python-x2go.git - brokerclient (branch) updated: efa7e704ac2aea6b04d290015e074ea5d1b3e8a5

X2Go dev team git-admin at x2go.org
Tue Jan 7 16:19:25 CET 2014


The branch, brokerclient has been updated
       via  efa7e704ac2aea6b04d290015e074ea5d1b3e8a5 (commit)
      from  3ba383429d71413734999e9d24a7886a41c63385 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 build-for-reprepro.sh                              |   41 ++
 ...html => toc-x2go.gevent_subprocess-module.html} |   14 +-
 ...-module.html => toc-x2go.mimetypes-module.html} |   16 +-
 ...es-module.html => toc-x2go.xserver-module.html} |   13 +-
 ...ule.html => x2go.gevent_subprocess-module.html} |   38 +-
 doc/html/x2go.gevent_subprocess-pysrc.html         |  317 +++++++++++
 ...tml => x2go.gevent_subprocess.Popen-class.html} |  121 +++--
 ...ting-module.html => x2go.mimetypes-module.html} |   99 +---
 doc/html/x2go.mimetypes-pysrc.html                 |  562 ++++++++++++++++++++
 ...> x2go.mimetypes.X2goMIMETypeAction-class.html} |  113 ++--
 ...=> x2go.mimetypes.X2goMIMETypeQueue-class.html} |   84 ++-
 ...html => x2go.mimetypes.X2goPrintJob-class.html} |   16 +-
 ...gistry-module.html => x2go.xserver-module.html} |   21 +-
 ...settings-pysrc.html => x2go.xserver-pysrc.html} |  167 +++---
 ...l => x2go.xserver.X2goClientXConfig-class.html} |   76 ++-
 ...ss.html => x2go.xserver.X2goXServer-class.html} |   38 +-
 x2go/gevent_subprocess.py                          |  197 +++++++
 x2go/mimetypes.py                                  |  281 ++++++++++
 x2go/xserver.py                                    |   92 ++++
 19 files changed, 1853 insertions(+), 453 deletions(-)
 create mode 100755 build-for-reprepro.sh
 copy doc/html/{toc-x2go.client-module.html => toc-x2go.gevent_subprocess-module.html} (59%)
 copy doc/html/{toc-x2go.guardian-module.html => toc-x2go.mimetypes-module.html} (53%)
 copy doc/html/{toc-x2go.inifiles-module.html => toc-x2go.xserver-module.html} (64%)
 copy doc/html/{x2go.registry-module.html => x2go.gevent_subprocess-module.html} (84%)
 create mode 100644 doc/html/x2go.gevent_subprocess-pysrc.html
 copy doc/html/{x2go.rforward.X2goRevFwChannelThread-class.html => x2go.gevent_subprocess.Popen-class.html} (67%)
 copy doc/html/{x2go.printing-module.html => x2go.mimetypes-module.html} (66%)
 create mode 100644 doc/html/x2go.mimetypes-pysrc.html
 copy doc/html/{x2go.printing.X2goPrintAction-class.html => x2go.mimetypes.X2goMIMETypeAction-class.html} (67%)
 copy doc/html/{x2go.printing.X2goPrintQueue-class.html => x2go.mimetypes.X2goMIMETypeQueue-class.html} (74%)
 copy doc/html/{x2go.printing.X2goPrintJob-class.html => x2go.mimetypes.X2goPrintJob-class.html} (91%)
 copy doc/html/{x2go.registry-module.html => x2go.xserver-module.html} (86%)
 copy doc/html/{x2go.settings-pysrc.html => x2go.xserver-pysrc.html} (56%)
 copy doc/html/{x2go.settings.X2goClientSettings-class.html => x2go.xserver.X2goClientXConfig-class.html} (67%)
 copy doc/html/{x2go.printing.X2goPrintJob-class.html => x2go.xserver.X2goXServer-class.html} (82%)
 create mode 100644 x2go/gevent_subprocess.py
 create mode 100644 x2go/mimetypes.py
 create mode 100644 x2go/xserver.py

The diff of changes is:
diff --git a/build-for-reprepro.sh b/build-for-reprepro.sh
new file mode 100755
index 0000000..e7a1220
--- /dev/null
+++ b/build-for-reprepro.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+# Copyright (C) 2010 by Mike Gabriel <m.gabriel at das-netzwerkteam.de>
+#
+# This programme 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 3 of the License, or
+# (at your option) any later version.
+#
+# This programme 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.
+
+PACKAGE=python-x2go
+
+rm -f ../$PACKAGE_*.changes
+rm -f ../$PACKAGE_*.upload
+rm -f ../$PACKAGE_*.build
+rm -f ../$PACKAGE_*.dsc
+rm -f ../$PACKAGE_*.tar.gz
+rm -f ../$PACKAGE*.deb
+
+cp debian/changelog debian/changelog.new
+editor debian/changelog.new
+mv debian/changelog.new debian/changelog
+
+make -f Makefile.pre-debuild all docupload
+
+debuild
+
+cd ..
+rm -f $PACKAGE_*.upload
+dupload --to nwt-ubuntu $PACKAGE_*.changes
+rm -f $PACKAGE_*.upload
+dupload --to nwt-debian $PACKAGE_*.changes
diff --git a/doc/html/toc-x2go.client-module.html b/doc/html/toc-x2go.gevent_subprocess-module.html
similarity index 59%
copy from doc/html/toc-x2go.client-module.html
copy to doc/html/toc-x2go.gevent_subprocess-module.html
index 832d03a..536baa4 100644
--- a/doc/html/toc-x2go.client-module.html
+++ b/doc/html/toc-x2go.gevent_subprocess-module.html
@@ -3,20 +3,22 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>client</title>
+  <title>gevent_subprocess</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
 
 <body bgcolor="white" text="black" link="blue" vlink="#204080"
       alink="#204080">
-<h1 class="toc">Module client</h1>
+<h1 class="toc">Module gevent_subprocess</h1>
 <hr />
   <h2 class="toc">Classes</h2>
-    <a target="mainFrame" href="x2go.client.X2goClient-class.html"
-     >X2goClient</a><br />  <h2 class="toc">Variables</h2>
-    <a target="mainFrame" href="x2go.client-module.html#__NAME__"
-     >__NAME__</a><br />    <a target="mainFrame" href="x2go.client-module.html#__package__"
+    <a target="mainFrame" href="x2go.gevent_subprocess.Popen-class.html"
+     >Popen</a><br />  <h2 class="toc">Variables</h2>
+    <a target="mainFrame" href="x2go.gevent_subprocess-module.html#MAXFD"
+     >MAXFD</a><br />    <a target="mainFrame" href="x2go.gevent_subprocess-module.html#PIPE"
+     >PIPE</a><br />    <a target="mainFrame" href="x2go.gevent_subprocess-module.html#STDOUT"
+     >STDOUT</a><br />    <a target="mainFrame" href="x2go.gevent_subprocess-module.html#__package__"
      >__package__</a><br /><hr />
 
 <script type="text/javascript">
diff --git a/doc/html/toc-x2go.guardian-module.html b/doc/html/toc-x2go.mimetypes-module.html
similarity index 53%
copy from doc/html/toc-x2go.guardian-module.html
copy to doc/html/toc-x2go.mimetypes-module.html
index e9d88c6..0190ef8 100644
--- a/doc/html/toc-x2go.guardian-module.html
+++ b/doc/html/toc-x2go.mimetypes-module.html
@@ -3,20 +3,24 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>guardian</title>
+  <title>mimetypes</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
 
 <body bgcolor="white" text="black" link="blue" vlink="#204080"
       alink="#204080">
-<h1 class="toc">Module guardian</h1>
+<h1 class="toc">Module mimetypes</h1>
 <hr />
   <h2 class="toc">Classes</h2>
-    <a target="mainFrame" href="x2go.guardian.X2goSessionGuardian-class.html"
-     >X2goSessionGuardian</a><br />  <h2 class="toc">Variables</h2>
-    <a target="mainFrame" href="x2go.guardian-module.html#__NAME__"
-     >__NAME__</a><br />    <a target="mainFrame" href="x2go.guardian-module.html#__package__"
+    <a target="mainFrame" href="x2go.mimetypes.X2goMIMETypeAction-class.html"
+     >X2goMIMETypeAction</a><br />    <a target="mainFrame" href="x2go.mimetypes.X2goMIMETypeQueue-class.html"
+     >X2goMIMETypeQueue</a><br />    <a target="mainFrame" href="x2go.mimetypes.X2goPrintJob-class.html"
+     >X2goPrintJob</a><br />  <h2 class="toc">Functions</h2>
+    <a target="mainFrame" href="x2go.mimetypes-module.html#x2go_printjob_handler"
+     >x2go_printjob_handler</a><br />  <h2 class="toc">Variables</h2>
+    <a target="mainFrame" href="x2go.mimetypes-module.html#__NAME__"
+     >__NAME__</a><br />    <a target="mainFrame" href="x2go.mimetypes-module.html#__package__"
      >__package__</a><br /><hr />
 
 <script type="text/javascript">
diff --git a/doc/html/toc-x2go.inifiles-module.html b/doc/html/toc-x2go.xserver-module.html
similarity index 64%
copy from doc/html/toc-x2go.inifiles-module.html
copy to doc/html/toc-x2go.xserver-module.html
index 66294e0..4a8ef74 100644
--- a/doc/html/toc-x2go.inifiles-module.html
+++ b/doc/html/toc-x2go.xserver-module.html
@@ -3,20 +3,21 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>inifiles</title>
+  <title>xserver</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
 
 <body bgcolor="white" text="black" link="blue" vlink="#204080"
       alink="#204080">
-<h1 class="toc">Module inifiles</h1>
+<h1 class="toc">Module xserver</h1>
 <hr />
   <h2 class="toc">Classes</h2>
-    <a target="mainFrame" href="x2go.inifiles.X2goIniFile-class.html"
-     >X2goIniFile</a><br />  <h2 class="toc">Variables</h2>
-    <a target="mainFrame" href="x2go.inifiles-module.html#__NAME__"
-     >__NAME__</a><br />    <a target="mainFrame" href="x2go.inifiles-module.html#__package__"
+    <a target="mainFrame" href="x2go.xserver.X2goClientXConfig-class.html"
+     >X2goClientXConfig</a><br />    <a target="mainFrame" href="x2go.xserver.X2goXServer-class.html"
+     >X2goXServer</a><br />  <h2 class="toc">Variables</h2>
+    <a target="mainFrame" href="x2go.xserver-module.html#__NAME__"
+     >__NAME__</a><br />    <a target="mainFrame" href="x2go.xserver-module.html#__package__"
      >__package__</a><br /><hr />
 
 <script type="text/javascript">
diff --git a/doc/html/x2go.registry-module.html b/doc/html/x2go.gevent_subprocess-module.html
similarity index 84%
copy from doc/html/x2go.registry-module.html
copy to doc/html/x2go.gevent_subprocess-module.html
index 1a70a24..44fd8c5 100644
--- a/doc/html/x2go.registry-module.html
+++ b/doc/html/x2go.gevent_subprocess-module.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>x2go.registry</title>
+  <title>x2go.gevent_subprocess</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -43,7 +43,7 @@
     <td width="100%">
       <span class="breadcrumbs">
         <a href="x2go-module.html">Package x2go</a> ::
-        Module registry
+        Module gevent_subprocess
       </span>
     </td>
     <td>
@@ -51,16 +51,16 @@
         <!-- hide/show private -->
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="x2go.registry-module.html"
+            >] | <a href="x2go.gevent_subprocess-module.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== MODULE DESCRIPTION ==================== -->
-<h1 class="epydoc">Module registry</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.registry-pysrc.html">source code</a></span></p>
-<p>X2goSessionRegistry class - the X2goClient's session registry 
-  backend</p>
+<h1 class="epydoc">Module gevent_subprocess</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html">source code</a></span></p>
+<p>Implementation of the standard :mod:`subprocess` module that spawns 
+  greenlets</p>
 
 <!-- ==================== CLASSES ==================== -->
 <a name="section-Classes"></a>
@@ -74,15 +74,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="x2go.registry.X2goRegisteredSession-class.html" class="summary-name">X2goRegisteredSession</a>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a href="x2go.registry.X2goSessionRegistry-class.html" class="summary-name">X2goSessionRegistry</a><br />
-      STILL UNDOCUMENTED
+        <a href="x2go.gevent_subprocess.Popen-class.html" class="summary-name">Popen</a>
     </td>
   </tr>
 </table>
@@ -98,7 +90,21 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="__NAME__"></a><span class="summary-name">__NAME__</span> = <code title="'x2gosessregistry-pylib'"><code class="variable-quote">'</code><code class="variable-string">x2gosessregistry-pylib</code><code class="variable-quote">'</code></code>
+        <a name="MAXFD"></a><span class="summary-name">MAXFD</span> = <code title="1024">1024</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a name="PIPE"></a><span class="summary-name">PIPE</span> = <code title="-1">-1</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a name="STDOUT"></a><span class="summary-name">STDOUT</span> = <code title="-2">-2</code>
     </td>
   </tr>
 <tr>
diff --git a/doc/html/x2go.gevent_subprocess-pysrc.html b/doc/html/x2go.gevent_subprocess-pysrc.html
new file mode 100644
index 0000000..9802c44
--- /dev/null
+++ b/doc/html/x2go.gevent_subprocess-pysrc.html
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>x2go.gevent_subprocess</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="x2go-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://www.x2go.org">Python X2go</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        <a href="x2go-module.html">Package x2go</a> ::
+        Module gevent_subprocess
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >] | <a href="x2go.gevent_subprocess-pysrc.html"
+            target="_top">no frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="x2go.gevent_subprocess-module.html">Module x2go.gevent_subprocess</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno">  1</tt>  <tt class="py-line"><tt class="py-comment"># -*- coding: utf-8 -*-</tt> </tt>
+<a name="L2"></a><tt class="py-lineno">  2</tt>  <tt class="py-line"> </tt>
+<a name="L3"></a><tt class="py-lineno">  3</tt>  <tt class="py-line"><tt class="py-comment"># Copyright (C) 2010 by Mike Gabriel <m.gabriel at das-netzwerkteam.de></tt> </tt>
+<a name="L4"></a><tt class="py-lineno">  4</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L5"></a><tt class="py-lineno">  5</tt>  <tt class="py-line"><tt class="py-comment"># Python X2go is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L6"></a><tt class="py-lineno">  6</tt>  <tt class="py-line"><tt class="py-comment"># it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L7"></a><tt class="py-lineno">  7</tt>  <tt class="py-line"><tt class="py-comment"># the Free Software Foundation; either version 3 of the License, or</tt> </tt>
+<a name="L8"></a><tt class="py-lineno">  8</tt>  <tt class="py-line"><tt class="py-comment"># (at your option) any later version.</tt> </tt>
+<a name="L9"></a><tt class="py-lineno">  9</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt>  <tt class="py-line"><tt class="py-comment"># Python X2go is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt>  <tt class="py-line"><tt class="py-comment"># but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt>  <tt class="py-line"><tt class="py-comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt>  <tt class="py-line"><tt class="py-comment"># GNU General Public License for more details.</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt>  <tt class="py-line"><tt class="py-comment"># You should have received a copy of the GNU General Public License</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt>  <tt class="py-line"><tt class="py-comment"># along with this program; if not, write to the</tt> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt>  <tt class="py-line"><tt class="py-comment"># Free Software Foundation, Inc.,</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt>  <tt class="py-line"><tt class="py-comment"># 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt>  <tt class="py-line"> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt>  <tt class="py-line"><tt class="py-comment"># found here: http://groups.google.com/group/gevent/browse_thread/thread/dba1a5d29e0a60ff</tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt>  <tt class="py-line"><tt class="py-comment"># Mark Visser <mjmvisser at gmail.com></tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt>  <tt class="py-line"> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt>  <tt class="py-line"><tt class="py-docstring">"""Implementation of the standard :mod:`subprocess` module that spawns greenlets"""</tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">errno</tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">fcntl</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt>  <tt class="py-line"> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt>  <tt class="py-line"><tt class="py-name">_subprocess</tt> <tt class="py-op">=</tt> <tt class="py-name">__import__</tt><tt class="py-op">(</tt><tt class="py-string">'subprocess'</tt><tt class="py-op">)</tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt>  <tt class="py-line"> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">gevent</tt> <tt class="py-keyword">import</tt> <tt class="py-name">socket</tt><tt class="py-op">,</tt> <tt class="py-name">select</tt><tt class="py-op">,</tt> <tt class="py-name">hub</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-comment"># identical to original</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"><tt class="py-name">CalledProcessError</tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt class="py-name">CalledProcessError</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable x2go.gevent_subprocess.MAXFD=x2go.gevent_subprocess-module.html#MAXFD"><a title="x2go.gevent_subprocess.MAXFD" class="py-name" href="#" onclick="return doclink('link-0', 'MAXFD', 'link-0');">MAXFD</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt id="link-1" class="py-name"><a title="x2go.gevent_subprocess.MAXFD" class="py-name" href="#" onclick="return doclink('link-1', 'MAXFD', 'link-0');">MAXFD</a></tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"><tt id="link-2" class="py-name" targets="Variable x2go.gevent_subprocess.PIPE=x2go.gevent_subprocess-module.html#PIPE"><a title="x2go.gevent_subprocess.PIPE" class="py-name" href="#" onclick="return doclink('link-2', 'PIPE', 'link-2');">PIPE</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt id="link-3" class="py-name"><a title="x2go.gevent_subprocess.PIPE" class="py-name" href="#" onclick="return doclink('link-3', 'PIPE', 'link-2');">PIPE</a></tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable x2go.gevent_subprocess.STDOUT=x2go.gevent_subprocess-module.html#STDOUT"><a title="x2go.gevent_subprocess.STDOUT" class="py-name" href="#" onclick="return doclink('link-4', 'STDOUT', 'link-4');">STDOUT</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="x2go.gevent_subprocess.STDOUT" class="py-name" href="#" onclick="return doclink('link-5', 'STDOUT', 'link-4');">STDOUT</a></tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"><tt class="py-name">call</tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt class="py-name">call</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"><tt class="py-name">check_call</tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt class="py-name">check_call</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"><tt class="py-name">list2cmdline</tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt class="py-name">list2cmdline</tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"> </tt>
+<a name="Popen"></a><div id="Popen-def"><a name="L42"></a><tt class="py-lineno"> 42</tt> <a class="py-toggle" href="#" id="Popen-toggle" onclick="return toggle('Popen');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html">Popen</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Popen-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Popen-expanded"><a name="Popen.__init__"></a><div id="Popen.__init__-def"><a name="L43"></a><tt class="py-lineno"> 43</tt> <a class="py-toggle" href="#" id="Popen.__init__-toggle" onclick="return toggle('Popen.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Popen.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen.__init__-expanded"><a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line">        <tt class="py-comment"># delegate to an actual Popen object</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__p</tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Class x2go.gevent_subprocess.Popen=x2go.gevent_subprocess.Popen-class.html"><a title="x2go.gevent_subprocess.Popen" class="py-name" href="#" onclick="return doclink('link-6', 'Popen', 'link-6');">Popen</a></tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line">        <tt class="py-comment"># make the file handles nonblocking</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line">            <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">fcntl</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">,</tt> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">F_SETFL</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NONBLOCK</tt><tt class="py-op">)</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line">            <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">fcntl</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">,</tt> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">F_SETFL</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NONBLOCK</tt><tt class="py-op">)</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line">            <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">fcntl</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">F_SETFL</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NONBLOCK</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"> </tt>
+<a name="Popen.__getattr__"></a><div id="Popen.__getattr__-def"><a name="L54"></a><tt class="py-lineno"> 54</tt> <a class="py-toggle" href="#" id="Popen.__getattr__-toggle" onclick="return toggle('Popen.__getattr__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#__getattr__">__getattr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Popen.__getattr__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen.__getattr__-expanded"><a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line">        <tt class="py-comment"># delegate attribute lookup to the real Popen object</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__p</tt><tt class="py-op">,</tt> <tt id="link-7" class="py-name" targets="Variable x2go.log.X2goLogger.name=x2go.log.X2goLogger-class.html#name,Variable x2go.printing.X2goPrintAction.name=x2go.printing.X2goPrintAction-class.html#name"><a title="x2go.log.X2goLogger.name
+x2go.printing.X2goPrintAction.name" class="py-name" href="#" onclick="return doclink('link-7', 'name', 'link-7');">name</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"> </tt>
+<a name="Popen._write_pipe"></a><div id="Popen._write_pipe-def"><a name="L58"></a><tt class="py-lineno"> 58</tt> <a class="py-toggle" href="#" id="Popen._write_pipe-toggle" onclick="return toggle('Popen._write_pipe');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#_write_pipe">_write_pipe</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">f</tt><tt class="py-op">,</tt> <tt class="py-param">input</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Popen._write_pipe-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen._write_pipe-expanded"><a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line">        <tt class="py-comment"># writes the given input to f without blocking</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">input</tt><tt class="py-op">:</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line">            <tt class="py-name">bytes_total</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">input</tt><tt class="py-op">)</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line">            <tt class="py-name">bytes_written</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line">            <tt class="py-keyword">while</tt> <tt class="py-name">bytes_written</tt> <tt class="py-op"><</tt> <tt class="py-name">bytes_total</tt><tt class="py-op">:</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line">                <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line">                    <tt class="py-comment"># f.write() doesn't return anything, so use os.write.</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line">                    <tt class="py-name">bytes_written</tt> <tt class="py-op">+=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt id="link-8" class="py-name" targets="Method x2go.inifiles.X2goIniFile.write()=x2go.inifiles.X2goIniFile-class.html#write"><a title="x2go.inifiles.X2goIniFile.write" class="py-name" href="#" onclick="return doclink('link-8', 'write', 'link-8');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">input</tt><tt class="py-op">[</tt><tt class="py-name">bytes_written</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line">                <tt class="py-keyword">except</tt> <tt class="py-name">IOError</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">ex</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">EAGAIN</tt><tt class="py-op">:</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line">                        <tt class="py-keyword">raise</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line">                    <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exc_clear</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line">                <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">wait_write</tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line">        <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line">     </tt>
+<a name="Popen._read_pipe"></a><div id="Popen._read_pipe-def"><a name="L74"></a><tt class="py-lineno"> 74</tt> <a class="py-toggle" href="#" id="Popen._read_pipe-toggle" onclick="return toggle('Popen._read_pipe');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#_read_pipe">_read_pipe</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">f</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Popen._read_pipe-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen._read_pipe-expanded"><a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line">        <tt class="py-comment"># reads output from f without blocking</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line">        <tt class="py-comment"># returns output</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line">        <tt class="py-name">chunks</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line">        <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line">                <tt class="py-name">chunk</tt> <tt class="py-op">=</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-number">4096</tt><tt class="py-op">)</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">chunk</tt><tt class="py-op">:</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line">                    <tt class="py-keyword">break</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line">                <tt class="py-name">chunks</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">chunk</tt><tt class="py-op">)</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt> <tt class="py-name">IOError</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">ex</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">EAGAIN</tt><tt class="py-op">:</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line">                    <tt class="py-keyword">raise</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line">                <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exc_clear</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line">            <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">wait_read</tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line">        <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">chunks</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line"> </tt>
+<a name="Popen.communicate"></a><div id="Popen.communicate-def"><a name="L92"></a><tt class="py-lineno"> 92</tt> <a class="py-toggle" href="#" id="Popen.communicate-toggle" onclick="return toggle('Popen.communicate');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#communicate">communicate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">input</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Popen.communicate-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen.communicate-expanded"><a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line">        <tt class="py-comment"># Optimization: If we are only using one pipe, or no pipe at</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line">        <tt class="py-comment"># all, using select() is unnecessary.</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">count</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> <tt class="py-op">>=</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line">            <tt class="py-name">stdout</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line">            <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">:</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_write_pipe</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">,</tt> <tt class="py-name">input</tt><tt class="py-op">)</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">:</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line">                <tt class="py-name">stdout</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_read_pipe</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">:</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line">                <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_read_pipe</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Method x2go.gevent_subprocess.Popen.wait()=x2go.gevent_subprocess.Popen-class.html#wait"><a title="x2go.gevent_subprocess.Popen.wait" class="py-name" href="#" onclick="return doclink('link-9', 'wait', 'link-9');">wait</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">stdout</tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_communicate</tt><tt class="py-op">(</tt><tt class="py-name">input</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line"> </tt>
+<a name="Popen._communicate"></a><div id="Popen._communicate-def"><a name="L109"></a><tt class="py-lineno">109</tt> <a class="py-toggle" href="#" id="Popen._communicate-toggle" onclick="return toggle('Popen._communicate');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#_communicate">_communicate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">input</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Popen._communicate-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen._communicate-expanded"><a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">        <tt class="py-comment"># identical to original... all the heavy lifting is done</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line">        <tt class="py-comment"># in gevent.select.select</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">        <tt class="py-name">read_set</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line">        <tt class="py-name">write_set</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">        <tt class="py-name">stdout</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> <tt class="py-comment"># Return</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line">        <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> <tt class="py-comment"># Return</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line"> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">:</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">            <tt class="py-comment"># Flush stdin buffer.</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">flush</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">input</tt><tt class="py-op">:</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line">                <tt class="py-name">write_set</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">)</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">:</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line">            <tt class="py-name">read_set</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line">            <tt class="py-name">stdout</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">:</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">            <tt class="py-name">read_set</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line">            <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line">        <tt class="py-name">input_offset</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">        <tt class="py-keyword">while</tt> <tt class="py-name">read_set</tt> <tt class="py-keyword">or</tt> <tt class="py-name">write_set</tt><tt class="py-op">:</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line">                <tt class="py-name">rlist</tt><tt class="py-op">,</tt> <tt class="py-name">wlist</tt><tt class="py-op">,</tt> <tt class="py-name">xlist</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">select</tt><tt class="py-op">(</tt><tt class="py-name">read_set</tt><tt class="py-op">,</tt> <tt class="py-name">write_set</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">EINTR</tt><tt class="py-op">:</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line">                    <tt class="py-keyword">continue</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line"> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt> <tt class="py-keyword">in</tt> <tt class="py-name">wlist</tt><tt class="py-op">:</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line">                <tt class="py-comment"># When select has indicated that the file is writable,</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line">                <tt class="py-comment"># we can write up to PIPE_BUF bytes without risk</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line">                <tt class="py-comment"># blocking.  POSIX defines PIPE_BUF >= 512</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line">                <tt class="py-name">bytes_written</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="x2go.inifiles.X2goIniFile.write" class="py-name" href="#" onclick="return doclink('link-10', 'write', 'link-8');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">buffer</tt><tt class="py-op">(</tt><tt class="py-name">input</tt><tt class="py-op">,</tt> <tt class="py-name">input_offset</tt><tt class="py-op">,</tt> <tt class="py-number">512</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">                <tt class="py-name">input_offset</tt> <tt class="py-op">+=</tt> <tt class="py-name">bytes_written</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">input_offset</tt> <tt class="py-op">>=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">input</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line">                    <tt class="py-name">write_set</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">)</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line"> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt> <tt class="py-keyword">in</tt> <tt class="py-name">rlist</tt><tt class="py-op">:</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line">                <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">1024</tt><tt class="py-op">)</tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">data</tt> <tt class="py-op">==</tt> <tt class="py-string">""</tt><tt class="py-op">:</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line">                    <tt class="py-name">read_set</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line">                <tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line"> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">rlist</tt><tt class="py-op">:</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line">                <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">1024</tt><tt class="py-op">)</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">data</tt> <tt class="py-op">==</tt> <tt class="py-string">""</tt><tt class="py-op">:</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line">                    <tt class="py-name">read_set</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line">                <tt class="py-name">stderr</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line"> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line">        <tt class="py-comment"># All data exchanged.  Translate lists into strings.</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">stdout</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line">            <tt class="py-name">stdout</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">stderr</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line">            <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line"> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line">        <tt class="py-comment"># Translate newlines, if requested.  We cannot let the file</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line">        <tt class="py-comment"># object do the translation: It is based on stdio, which is</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt>  <tt class="py-line">        <tt class="py-comment"># impossible to combine with select (unless forcing no</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line">        <tt class="py-comment"># buffering).</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">universal_newlines</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">file</tt><tt class="py-op">,</tt> <tt class="py-string">'newlines'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">stdout</tt><tt class="py-op">:</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt>  <tt class="py-line">                <tt class="py-name">stdout</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_translate_newlines</tt><tt class="py-op">(</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">stderr</tt><tt class="py-op">:</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line">                <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_translate_newlines</tt><tt class="py-op">(</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line"> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="x2go.gevent_subprocess.Popen.wait" class="py-name" href="#" onclick="return doclink('link-11', 'wait', 'link-9');">wait</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">stdout</tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line"> </tt>
+<a name="Popen.wait"></a><div id="Popen.wait-def"><a name="L183"></a><tt class="py-lineno">183</tt> <a class="py-toggle" href="#" id="Popen.wait-toggle" onclick="return toggle('Popen.wait');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#wait">wait</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">check_interval</tt><tt class="py-op">=</tt><tt class="py-number">0.01</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Popen.wait-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen.wait-expanded"><a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line">        <tt class="py-comment"># non-blocking, use hub.sleep</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line">            <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line">                <tt class="py-name">status</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">poll</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">status</tt> <tt class="py-op">>=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line">                    <tt class="py-keyword">return</tt> <tt class="py-name">status</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line">                <tt class="py-name">hub</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt><tt class="py-op">(</tt><tt class="py-name">check_interval</tt><tt class="py-op">)</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">OSError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">errno</tt> <tt class="py-op">==</tt> <tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">ECHILD</tt><tt class="py-op">:</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line">                <tt class="py-comment"># no child process, this happens if the child process</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line">                <tt class="py-comment"># already died and has been cleaned up</tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> </tt>
+</div></div><a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="x2go-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://www.x2go.org">Python X2go</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Nov 19 21:34:02 2010
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/doc/html/x2go.rforward.X2goRevFwChannelThread-class.html b/doc/html/x2go.gevent_subprocess.Popen-class.html
similarity index 67%
copy from doc/html/x2go.rforward.X2goRevFwChannelThread-class.html
copy to doc/html/x2go.gevent_subprocess.Popen-class.html
index 7275480..2f0204d 100644
--- a/doc/html/x2go.rforward.X2goRevFwChannelThread-class.html
+++ b/doc/html/x2go.gevent_subprocess.Popen-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>x2go.rforward.X2goRevFwChannelThread</title>
+  <title>x2go.gevent_subprocess.Popen</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -43,8 +43,8 @@
     <td width="100%">
       <span class="breadcrumbs">
         <a href="x2go-module.html">Package x2go</a> ::
-        <a href="x2go.rforward-module.html">Module rforward</a> ::
-        Class X2goRevFwChannelThread
+        <a href="x2go.gevent_subprocess-module.html">Module gevent_subprocess</a> ::
+        Class Popen
       </span>
     </td>
     <td>
@@ -52,34 +52,21 @@
         <!-- hide/show private -->
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="x2go.rforward.X2goRevFwChannelThread-class.html"
+            >] | <a href="x2go.gevent_subprocess.Popen-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class X2goRevFwChannelThread</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.rforward-pysrc.html#X2goRevFwChannelThread">source code</a></span></p>
+<h1 class="epydoc">Class Popen</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html#Popen">source code</a></span></p>
 <pre class="base-tree">
-        object --+        
-                 |        
-threading._Verbose --+    
-                     |    
-      threading.Thread --+
-                         |
-                        <strong class="uidshort">X2goRevFwChannelThread</strong>
+object --+
+         |
+        <strong class="uidshort">Popen</strong>
 </pre>
 
-<dl><dt>Known Subclasses:</dt>
-<dd>
-      <ul class="subclass-list">
-<li><a href="x2go.sftpserver.X2goRevFwSFTPChannelThread-class.html">sftpserver.X2goRevFwSFTPChannelThread</a></li>  </ul>
-</dd></dl>
-
 <hr />
-<p>Starts a thread for each incoming Paramiko/SSH data channel trough the
-  reverse forwarding tunnel.</p>
-
 <!-- ==================== INSTANCE METHODS ==================== -->
 <a name="section-InstanceMethods"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -94,13 +81,63 @@ threading._Verbose --+
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="x2go.rforward.X2goRevFwChannelThread-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">channel</span>,
-        <span class="summary-sig-arg">remote</span>=<span class="summary-sig-default">None</span>,
+          <td><span class="summary-sig"><a href="x2go.gevent_subprocess.Popen-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">*args</span>,
         <span class="summary-sig-arg">**kwargs</span>)</span><br />
       x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.rforward-pysrc.html#X2goRevFwChannelThread.__init__">source code</a></span>
+            <span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html#Popen.__init__">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__getattr__"></a><span class="summary-sig-name">__getattr__</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html#Popen.__getattr__">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="communicate"></a><span class="summary-sig-name">communicate</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">input</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html#Popen.communicate">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="wait"></a><span class="summary-sig-name">wait</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">check_interval</span>=<span class="summary-sig-default">0.01</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html#Popen.wait">source code</a></span>
             
           </td>
         </tr>
@@ -110,18 +147,6 @@ threading._Verbose --+
   </tr>
   <tr>
     <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>threading.Thread</code></b>:
-      <code>__repr__</code>,
-      <code>getName</code>,
-      <code>isAlive</code>,
-      <code>isDaemon</code>,
-      <code>is_alive</code>,
-      <code>join</code>,
-      <code>run</code>,
-      <code>setDaemon</code>,
-      <code>setName</code>,
-      <code>start</code>
-      </p>
     <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
       <code>__delattr__</code>,
       <code>__format__</code>,
@@ -130,6 +155,7 @@ threading._Verbose --+
       <code>__new__</code>,
       <code>__reduce__</code>,
       <code>__reduce_ex__</code>,
+      <code>__repr__</code>,
       <code>__setattr__</code>,
       <code>__sizeof__</code>,
       <code>__str__</code>,
@@ -148,11 +174,6 @@ threading._Verbose --+
 </tr>
   <tr>
     <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>threading.Thread</code></b>:
-      <code>daemon</code>,
-      <code>ident</code>,
-      <code>name</code>
-      </p>
     <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
       <code>__class__</code>
       </p>
@@ -176,29 +197,21 @@ threading._Verbose --+
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
   <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
-        <span class="sig-arg">channel</span>,
-        <span class="sig-arg">remote</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">*args</span>,
         <span class="sig-arg">**kwargs</span>)</span>
     <br /><em class="fname">(Constructor)</em>
   </h3>
   </td><td align="right" valign="top"
-    ><span class="codelink"><a href="x2go.rforward-pysrc.html#X2goRevFwChannelThread.__init__">source code</a></span> 
+    ><span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html#Popen.__init__">source code</a></span> 
     </td>
   </tr></table>
   
   <p>x.__init__(...) initializes x; see x.__class__.__doc__ for 
   signature</p>
   <dl class="fields">
-    <dt>Parameters:</dt>
-    <dd><ul class="nomargin-top">
-        <li><strong class="pname"><code>channel</code></strong> (class) - incoming Paramiko/SSH channel from the <a 
-          href="x2go.session.X2goSession-class.html" 
-          class="link">X2goSession</a>'s transport accept queue</li>
-        <li><strong class="pname"><code>remote</code></strong> ((str, int)) - tuple (addr, port) that specifies the data endpoint of the 
-          channel</li>
-    </ul></dd>
     <dt>Overrides:
         object.__init__
+        <dd><em class="note">(inherited documentation)</em></dd>
     </dt>
   </dl>
 </td></tr></table>
@@ -235,7 +248,7 @@ threading._Verbose --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:56 2010
+    Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:55 2010
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/doc/html/x2go.printing-module.html b/doc/html/x2go.mimetypes-module.html
similarity index 66%
copy from doc/html/x2go.printing-module.html
copy to doc/html/x2go.mimetypes-module.html
index 81c6a00..c1f4941 100644
--- a/doc/html/x2go.printing-module.html
+++ b/doc/html/x2go.mimetypes-module.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>x2go.printing</title>
+  <title>x2go.mimetypes</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -43,7 +43,7 @@
     <td width="100%">
       <span class="breadcrumbs">
         <a href="x2go-module.html">Package x2go</a> ::
-        Module printing
+        Module mimetypes
       </span>
     </td>
     <td>
@@ -51,34 +51,15 @@
         <!-- hide/show private -->
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="x2go.printing-module.html"
+            >] | <a href="x2go.mimetypes-module.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== MODULE DESCRIPTION ==================== -->
-<h1 class="epydoc">Module printing</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.printing-pysrc.html">source code</a></span></p>
-<p>X2go printing sets up a thread that listens for incoming print jobs 
-  (<a href="x2go.printing.X2goPrintQueue-class.html" 
-  class="link">X2goPrintQueue</a>).</p>
-  <p>For each incoming print job in an X2go session's spool directory an 
-  individual thread is started (<a 
-  href="x2go.printing.X2goPrintJob-class.html" 
-  class="link">X2goPrintJob</a>) that handles the processing of the 
-  incoming print job.</p>
-  <p>Print jobs can either be sent to any of the local print queues (CUPS, 
-  Win32API), be opened in an external PDF viewer, be saved to a local 
-  folder or be handed over to a custom (print) command. This is defined by 
-  four print action classes (X2goPrintActionPDFVIEW, 
-  X2goPrintActionPDFSAVE, X2goPrintActionPRINT and 
-  X2goPrintActionPRINTCMD).</p>
-  <p>Especially the <a href="x2go.printing.X2goClientPrinting-class.html" 
-  class="link">X2goClientPrinting</a> class in this file is one of Python 
-  X2go's public API classes. Retrieve an instance of this class from your 
-  <a href="x2go.client.X2goClient-class.html" class="link">X2goClient</a> 
-  instance. Use this class in your Python X2go based applications to access
-  the »printing« configuration file of your X2go client application.</p>
+<h1 class="epydoc">Module mimetypes</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.mimetypes-pysrc.html">source code</a></span></p>
+<p>STILL UNDOCUMENTED</p>
 
 <!-- ==================== CLASSES ==================== -->
 <a name="section-Classes"></a>
@@ -92,70 +73,22 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="x2go.printing.X2goClientPrinting-class.html" class="summary-name">X2goClientPrinting</a><br />
-      <a href="x2go.printing.X2goClientPrinting-class.html" 
-        class="link">X2goClientPrinting</a> provides access to the X2go 
-        ini-like file »printing« as stored in 
-        <code>~/.x2goclient/printing</code> resp.
+        <a href="x2go.mimetypes.X2goMIMETypeAction-class.html" class="summary-name">X2goMIMETypeAction</a>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="x2go.printing.X2goPrintAction-class.html" class="summary-name">X2goPrintAction</a>
+        <a href="x2go.mimetypes.X2goMIMETypeQueue-class.html" class="summary-name">X2goMIMETypeQueue</a><br />
+      STILL UNDOCUMENTED
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="x2go.printing.X2goPrintActionPDFVIEW-class.html" class="summary-name">X2goPrintActionPDFVIEW</a><br />
-      Print action that views incoming print job in an external PDF 
-        viewer application.
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a href="x2go.printing.X2goPrintActionPDFSAVE-class.html" class="summary-name">X2goPrintActionPDFSAVE</a><br />
-      Print action that saves incoming print jobs to a local folder.
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a href="x2go.printing.X2goPrintActionPRINT-class.html" class="summary-name">X2goPrintActionPRINT</a><br />
-      Print action that actually prints an incoming print job file.
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a href="x2go.printing.X2goPrintActionPRINTCMD-class.html" class="summary-name">X2goPrintActionPRINTCMD</a><br />
-      Print action that calls an external command for further processing 
-        of incoming print jobs.
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a href="x2go.printing.X2goPrintQueue-class.html" class="summary-name">X2goPrintQueue</a><br />
-      If X2go printing is supported in a particaluar <a 
-        href="x2go.session.X2goSession-class.html" 
-        class="link">X2goSession</a> instance this class provides a 
-        sub-thread for handling incoming X2go print jobs.
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a href="x2go.printing.X2goPrintJob-class.html" class="summary-name">X2goPrintJob</a><br />
+        <a href="x2go.mimetypes.X2goPrintJob-class.html" class="summary-name">X2goPrintJob</a><br />
       For each X2go print job we create a sub-thread that let's the print
         job be processed in the background.
     </td>
@@ -175,7 +108,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="x2go.printing-module.html#x2go_printjob_handler" class="summary-sig-name">x2go_printjob_handler</a>(<span class="summary-sig-arg">job_file</span>=<span class="summary-sig-default">None</span>,
+          <td><span class="summary-sig"><a href="x2go.mimetypes-module.html#x2go_printjob_handler" class="summary-sig-name">x2go_printjob_handler</a>(<span class="summary-sig-arg">job_file</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">pdf_file</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">job_title</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">print_action</span>=<span class="summary-sig-default">None</span>,
@@ -183,10 +116,10 @@
         <span class="summary-sig-arg">logger</span>=<span class="summary-sig-default">None</span>)</span><br />
       This function is called as a handler function for each incoming X2go 
       print job represented by the class <a 
-      href="x2go.printing.X2goPrintJob-class.html" 
+      href="x2go.mimetypes.X2goPrintJob-class.html" 
       class="link">X2goPrintJob</a>.</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.printing-pysrc.html#x2go_printjob_handler">source code</a></span>
+            <span class="codelink"><a href="x2go.mimetypes-pysrc.html#x2go_printjob_handler">source code</a></span>
             
           </td>
         </tr>
@@ -207,7 +140,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="__NAME__"></a><span class="summary-name">__NAME__</span> = <code title="'x2goprint-pylib'"><code class="variable-quote">'</code><code class="variable-string">x2goprint-pylib</code><code class="variable-quote">'</code></code>
+        <a name="__NAME__"></a><span class="summary-name">__NAME__</span> = <code title="'x2gomimetypes-pylib'"><code class="variable-quote">'</code><code class="variable-string">x2gomimetypes-pylib</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 <tr>
@@ -242,13 +175,13 @@
         <span class="sig-arg">logger</span>=<span class="sig-default">None</span>)</span>
   </h3>
   </td><td align="right" valign="top"
-    ><span class="codelink"><a href="x2go.printing-pysrc.html#x2go_printjob_handler">source code</a></span> 
+    ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#x2go_printjob_handler">source code</a></span> 
     </td>
   </tr></table>
   
   <p>This function is called as a handler function for each incoming X2go 
   print job represented by the class <a 
-  href="x2go.printing.X2goPrintJob-class.html" 
+  href="x2go.mimetypes.X2goPrintJob-class.html" 
   class="link">X2goPrintJob</a>.</p>
   <p>The handler function will (re-)read the »printing« configuration file 
   (if no explicit <code>print_action</code> is passed to this function...).
@@ -263,7 +196,7 @@
           <code>X2goPrintActionXXX</code> classes</li>
         <li><strong class="pname"><code>parent_thread</code></strong> (<code>instance</code>) - the <a href="x2go.printing.X2goPrintQueue-class.html" 
           class="link">X2goPrintQueue</a> thread that actually created this
-          handler's <a href="x2go.printing.X2goPrintJob-class.html" 
+          handler's <a href="x2go.mimetypes.X2goPrintJob-class.html" 
           class="link">X2goPrintJob</a> instance</li>
         <li><strong class="pname"><code>logger</code></strong> (<code>instance</code>) - the <a href="x2go.printing.X2goPrintQueue-class.html" 
           class="link">X2goPrintQueue</a>'s logging instance</li>
diff --git a/doc/html/x2go.mimetypes-pysrc.html b/doc/html/x2go.mimetypes-pysrc.html
new file mode 100644
index 0000000..d24c283
--- /dev/null
+++ b/doc/html/x2go.mimetypes-pysrc.html
@@ -0,0 +1,562 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>x2go.mimetypes</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="x2go-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://www.x2go.org">Python X2go</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        <a href="x2go-module.html">Package x2go</a> ::
+        Module mimetypes
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >] | <a href="x2go.mimetypes-pysrc.html"
+            target="_top">no frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="x2go.mimetypes-module.html">Module x2go.mimetypes</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno">  1</tt>  <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python</tt> </tt>
+<a name="L2"></a><tt class="py-lineno">  2</tt>  <tt class="py-line"><tt class="py-comment"># -*- coding: utf-8 -*-</tt> </tt>
+<a name="L3"></a><tt class="py-lineno">  3</tt>  <tt class="py-line"> </tt>
+<a name="L4"></a><tt class="py-lineno">  4</tt>  <tt class="py-line"><tt class="py-comment"># Copyright (C) 2010 by Mike Gabriel <m.gabriel at das-netzwerkteam.de></tt> </tt>
+<a name="L5"></a><tt class="py-lineno">  5</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L6"></a><tt class="py-lineno">  6</tt>  <tt class="py-line"><tt class="py-comment"># Python X2go is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L7"></a><tt class="py-lineno">  7</tt>  <tt class="py-line"><tt class="py-comment"># it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L8"></a><tt class="py-lineno">  8</tt>  <tt class="py-line"><tt class="py-comment"># the Free Software Foundation; either version 3 of the License, or</tt> </tt>
+<a name="L9"></a><tt class="py-lineno">  9</tt>  <tt class="py-line"><tt class="py-comment"># (at your option) any later version.</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt>  <tt class="py-line"><tt class="py-comment"># Python X2go is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt>  <tt class="py-line"><tt class="py-comment"># but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt>  <tt class="py-line"><tt class="py-comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt>  <tt class="py-line"><tt class="py-comment"># GNU General Public License for more details.</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt>  <tt class="py-line"><tt class="py-comment"># You should have received a copy of the GNU General Public License</tt> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt>  <tt class="py-line"><tt class="py-comment"># along with this program; if not, write to the</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt>  <tt class="py-line"><tt class="py-comment"># Free Software Foundation, Inc.,</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt>  <tt class="py-line"><tt class="py-comment"># 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt>  <tt class="py-line"> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt>  <tt class="py-line"><tt class="py-docstring">"""\</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt>  <tt class="py-line"><tt class="py-docstring">STILL UNDOCUMENTED</tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt>  <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt>  <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable x2go.__NAME__=x2go-module.html#__NAME__,Variable x2go.client.__NAME__=x2go.client-module.html#__NAME__,Variable x2go.defaults.__NAME__=x2go.defaults-module.html#__NAME__,Variable x2go.forward.__NAME__=x2go.forward-module.html#__NAME__,Variable x2go.guardian.__NAME__=x2go.guardian-module.html#__NAME__,Variable x2go.inifiles.__NAME__=x2go.inifiles-module.html#__NAME__,Variable x2go.log.__NAME__=x2go.log-module.html#__NAME__,Variable x2go.mimetypes.__NAME__=x2go.mimetypes-module.html#__NAME__,Variable x2go.printing.__NAME__=x2go.printing-module.html#__NAME__,Variable x2go.profiles.__NAME__=x2go.profiles-module.html#__NAME__,Variable x2go.proxy.__NAME__=x2go.proxy-module.html#__NAME__,Variable x2go.registry.__NAME__=x2go.registry-module.html#__NAME__,Variable x2go.rforward.__NAME__=x2go.rforward-module.html#__NAME__,Variable x2go.session.__NAME__=x2go.session-m
 odule.ht
 ml#__NAME__,Variable x2go.settings.__NAME__=x2go.settings-module.html#__NAME__,Variable x2go.sftpserver.__NAME__=x2go.sftpserver-module.html#__NAME__,Variable x2go.utils.__NAME__=x2go.utils-module.html#__NAME__,Variable x2go.x2go_exceptions.__NAME__=x2go.x2go_exceptions-module.html#__NAME__,Variable x2go.xserver.__NAME__=x2go.xserver-module.html#__NAME__"><a title="x2go.__NAME__
+x2go.client.__NAME__
+x2go.defaults.__NAME__
+x2go.forward.__NAME__
+x2go.guardian.__NAME__
+x2go.inifiles.__NAME__
+x2go.log.__NAME__
+x2go.mimetypes.__NAME__
+x2go.printing.__NAME__
+x2go.profiles.__NAME__
+x2go.proxy.__NAME__
+x2go.registry.__NAME__
+x2go.rforward.__NAME__
+x2go.session.__NAME__
+x2go.settings.__NAME__
+x2go.sftpserver.__NAME__
+x2go.utils.__NAME__
+x2go.x2go_exceptions.__NAME__
+x2go.xserver.__NAME__" class="py-name" href="#" onclick="return doclink('link-0', '__NAME__', 'link-0');">__NAME__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'x2gomimetypes-pylib'</tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt>  <tt class="py-line"> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt>  <tt class="py-line"><tt class="py-comment"># modules</tt> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">,</tt> <tt class="py-name">shutil</tt><tt class="py-op">,</tt> <tt class="py-name">copy</tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">subprocess</tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">types</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">threading</tt> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">gevent</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Module x2go.inifiles=x2go.inifiles-module.html"><a title="x2go.inifiles" class="py-name" href="#" onclick="return doclink('link-1', 'inifiles', 'link-1');">inifiles</a></tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">cStringIO</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">ConfigParser</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">platform</tt> <tt class="py-op">==</tt> <tt class="py-string">'win32'</tt><tt class="py-op">:</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line">    <tt class="py-keyword">import</tt> <tt class="py-name">win32api</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"><tt class="py-comment"># Python X2go modules</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Module x2go.log=x2go.log-module.html"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-2', 'log', 'link-2');">log</a></tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Module x2go.defaults=x2go.defaults-module.html"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-3', 'defaults', 'link-3');">defaults</a></tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line"><tt class="py-comment"># we hide the default values from epydoc (that's why we transform them to _UNDERSCORE variables)</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-4', 'defaults', 'link-3');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-5" class="py-name" targets="Variable x2go.defaults.LOCAL_HOME=x2go.defaults-module.html#LOCAL_HOME"><a title="x2go.defaults.LOCAL_HOME" class="py-name" href="#" onclick="return doclink('link-5', 'LOCAL_HOME', 'link-5');">LOCAL_HOME</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">_LOCAL_HOME</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-6" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-6', 'defaults', 'link-3');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Variable x2go.defaults.X2GO_CLIENT_ROOTDIR=x2go.defaults-module.html#X2GO_CLIENT_ROOTDIR"><a title="x2go.defaults.X2GO_CLIENT_ROOTDIR" class="py-name" href="#" onclick="return doclink('link-7', 'X2GO_CLIENT_ROOTDIR', 'link-7');">X2GO_CLIENT_ROOTDIR</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">_X2GO_CLIENT_ROOTDIR</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-8" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-8', 'defaults', 'link-3');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-9" class="py-name" targets="Variable x2go.defaults.X2GO_CLIENTPRINTING_DEFAULTS=x2go.defaults-module.html#X2GO_CLIENTPRINTING_DEFAULTS"><a title="x2go.defaults.X2GO_CLIENTPRINTING_DEFAULTS" class="py-name" href="#" onclick="return doclink('link-9', 'X2GO_CLIENTPRINTING_DEFAULTS', 'link-9');">X2GO_CLIENTPRINTING_DEFAULTS</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">_X2GO_CLIENTPRINTING_DEFAULTS</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-10" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-10', 'defaults', 'link-3');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-11" class="py-name" targets="Variable x2go.defaults.X2GO_PRINTING_CONFIGFILES=x2go.defaults-module.html#X2GO_PRINTING_CONFIGFILES"><a title="x2go.defaults.X2GO_PRINTING_CONFIGFILES" class="py-name" href="#" onclick="return doclink('link-11', 'X2GO_PRINTING_CONFIGFILES', 'link-11');">X2GO_PRINTING_CONFIGFILES</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">_X2GO_PRINTING_CONFIGFILES</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-12" class="py-name" targets="Module x2go.utils=x2go.utils-module.html"><a title="x2go.utils" class="py-name" href="#" onclick="return doclink('link-12', 'utils', 'link-12');">utils</a></tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-13" class="py-name"><a title="x2go.inifiles" class="py-name" href="#" onclick="return doclink('link-13', 'inifiles', 'link-1');">inifiles</a></tt> </tt>
+<a name="X2goMIMETypeAction"></a><div id="X2goMIMETypeAction-def"><a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line"> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt> <a class="py-toggle" href="#" id="X2goMIMETypeAction-toggle" onclick="return toggle('X2goMIMETypeAction');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeAction-class.html">X2goMIMETypeAction</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goMIMETypeAction-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="X2goMIMETypeAction-expanded"><a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line">    <tt id="link-14" class="py-name" targets="Variable x2go.mimetypes.X2goMIMETypeAction.__name__=x2go.mimetypes.X2goMIMETypeAction-class.html#__name__,Variable x2go.printing.X2goPrintAction.__name__=x2go.printing.X2goPrintAction-class.html#__name__,Variable x2go.printing.X2goPrintActionPDFSAVE.__name__=x2go.printing.X2goPrintActionPDFSAVE-class.html#__name__,Variable x2go.printing.X2goPrintActionPDFVIEW.__name__=x2go.printing.X2goPrintActionPDFVIEW-class.html#__name__,Variable x2go.printing.X2goPrintActionPRINT.__name__=x2go.printing.X2goPrintActionPRINT-class.html#__name__,Variable x2go.printing.X2goPrintActionPRINTCMD.__name__=x2go.printing.X2goPrintActionPRINTCMD-class.html#__name__"><a title="x2go.mimetypes.X2goMIMETypeAction.__name__
+x2go.printing.X2goPrintAction.__name__
+x2go.printing.X2goPrintActionPDFSAVE.__name__
+x2go.printing.X2goPrintActionPDFVIEW.__name__
+x2go.printing.X2goPrintActionPRINT.__name__
+x2go.printing.X2goPrintActionPRINTCMD.__name__" class="py-name" href="#" onclick="return doclink('link-14', '__name__', 'link-14');">__name__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'MIME'</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line">    <tt id="link-15" class="py-name" targets="Variable x2go.mimetypes.X2goMIMETypeAction.__description__=x2go.mimetypes.X2goMIMETypeAction-class.html#__description__,Variable x2go.printing.X2goPrintAction.__description__=x2go.printing.X2goPrintAction-class.html#__description__"><a title="x2go.mimetypes.X2goMIMETypeAction.__description__
+x2go.printing.X2goPrintAction.__description__" class="py-name" href="#" onclick="return doclink('link-15', '__description__', 'link-15');">__description__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'Execute a command depending on an incoming file\'s MIME type'</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"> </tt>
+<a name="X2goMIMETypeAction.__init__"></a><div id="X2goMIMETypeAction.__init__-def"><a name="L57"></a><tt class="py-lineno"> 57</tt> <a class="py-toggle" href="#" id="X2goMIMETypeAction.__init__-toggle" onclick="return toggle('X2goMIMETypeAction.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeAction-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">logger</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">loglevel</tt><tt class="py-op">=</tt><tt id="link-16" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-16', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Variable x2go.log.loglevel_DEFAULT=x2go.log-module.html#loglevel_DEFAULT"><a title="x2go.log.loglevel_DEFAULT" class
 ="py-nam
 e" href="#" onclick="return doclink('link-17', 'loglevel_DEFAULT', 'link-17');">loglevel_DEFAULT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goMIMETypeAction.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeAction.__init__-expanded"><a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line">        <tt class="py-docstring">"""\</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt class="py-docstring">        STILL UNDOCUMENTED</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"><tt class="py-docstring">        @param logger: you can pass an L{X2goLogger} object to the</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"><tt class="py-docstring">            L{X2goMIMETypeAction} constructor</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"><tt class="py-docstring">        @type logger: C{instance}</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"><tt class="py-docstring">        @param loglevel: if no L{X2goLogger} object has been supplied a new one will be</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"><tt class="py-docstring">            constructed with the given loglevel</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"><tt class="py-docstring">        @type loglevel: C{int}</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">logger</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt> <tt class="py-op">=</tt> <tt id="link-18" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-18', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Class x2go.log.X2goLogger=x2go.log.X2goLogger-class.html"><a title="x2go.log.X2goLogger" class="py-name" href="#" onclick="return doclink('link-19', 'X2goLogger', 'link-19');">X2goLogger</a></tt><tt class="py-op">(</tt><tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt class="py-name">loglevel</tt><tt class="py-op">)</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">deepcopy</tt><tt class="py-op">(</tt><tt class="py-name">logger</tt><tt class="py-op">)</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name" targets="Variable x2go.log.X2goLogger.tag=x2go.log.X2goLogger-class.html#tag"><a title="x2go.log.X2goLogger.tag" class="py-name" href="#" onclick="return doclink('link-20', 'tag', 'link-20');">tag</a></tt> <tt class="py-op">=</tt> <tt id="link-21" class="py-name"><a title="x2go.__NAME__
+x2go.client.__NAME__
+x2go.defaults.__NAME__
+x2go.forward.__NAME__
+x2go.guardian.__NAME__
+x2go.inifiles.__NAME__
+x2go.log.__NAME__
+x2go.mimetypes.__NAME__
+x2go.printing.__NAME__
+x2go.profiles.__NAME__
+x2go.proxy.__NAME__
+x2go.registry.__NAME__
+x2go.rforward.__NAME__
+x2go.session.__NAME__
+x2go.settings.__NAME__
+x2go.sftpserver.__NAME__
+x2go.utils.__NAME__
+x2go.x2go_exceptions.__NAME__
+x2go.xserver.__NAME__" class="py-name" href="#" onclick="return doclink('link-21', '__NAME__', 'link-0');">__NAME__</a></tt> </tt>
+</div><a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"> </tt>
+<a name="X2goMIMETypeAction.do_execute"></a><div id="X2goMIMETypeAction.do_execute-def"><a name="L75"></a><tt class="py-lineno"> 75</tt> <a class="py-toggle" href="#" id="X2goMIMETypeAction.do_execute-toggle" onclick="return toggle('X2goMIMETypeAction.do_execute');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeAction-class.html#do_execute">do_execute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">mime_file</tt><tt class="py-op">,</tt> <tt class="py-param">mime_type_dir</tt><tt class="py-op">,</tt> <tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goMIMETypeAction.do_execute-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeAction.do_execute-expanded"><a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line">        <tt class="py-docstring">"""\</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line"><tt class="py-docstring">        Perform the defined print action (doing nothing in L{X2goPrintAction} parent class).</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"><tt class="py-docstring">        @param mime_file: name of the incoming file</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"><tt class="py-docstring">        @type mime_file: C{str}</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line"><tt class="py-docstring">        @param mime_type_dir: location of the X2go client's spool directory for incoming MIME files</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line"><tt class="py-docstring">        @type mime_type_dir: C{str}</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">platform</tt> <tt class="py-op">==</tt> <tt class="py-string">"win32"</tt><tt class="py-op">:</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'processing an incoming MIME file with Python\'s os.startfile(): %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">mime_file</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-22" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-22', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-23" class="py-name" targets="Variable x2go.log.loglevel_DEBUG=x2go.log-module.html#loglevel_DEBUG"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-23', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line">            <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">startfile</tt><tt class="py-op">(</tt><tt class="py-name">mime_file</tt><tt class="py-op">)</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line">            <tt class="py-name">cmd_line</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-string">'xdg-open'</tt><tt class="py-op">,</tt> <tt class="py-name">mime_file</tt><tt class="py-op">,</tt> <tt class="py-op">]</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'processing an incoming MIME file with command: %s'</tt> <tt class="py-op">%</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">cmd_line</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-24" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-24', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-25" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-25', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line">            <tt class="py-name">p</tt> <tt class="py-op">=</tt> <tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Class x2go.gevent_subprocess.Popen=x2go.gevent_subprocess.Popen-class.html"><a title="x2go.gevent_subprocess.Popen" class="py-name" href="#" onclick="return doclink('link-26', 'Popen', 'link-26');">Popen</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd_line</tt><tt class="py-op">,</tt> <tt class="py-name">stdout</tt><tt class="py-op">=</tt><tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Variable x2go.gevent_subprocess.PIPE=x2go.gevent_subprocess-module.html#PIPE"><a title="x2go.gevent_subprocess.PIPE" class="py-name" href="#" onclick="return doclink('link-27', 'PIPE', 'link-27');">PIPE</a></tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt><tt class="py-op">=</tt><tt class="py
 -name">s
 ubprocess</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Variable x2go.gevent_subprocess.STDOUT=x2go.gevent_subprocess-module.html#STDOUT"><a title="x2go.gevent_subprocess.STDOUT" class="py-name" href="#" onclick="return doclink('link-28', 'STDOUT', 'link-28');">STDOUT</a></tt><tt class="py-op">,</tt> <tt class="py-name">env</tt><tt class="py-op">=</tt><tt id="link-29" class="py-name" targets="Variable x2go.printing._PRINT_ENV=x2go.printing-module.html#_PRINT_ENV"><a title="x2go.printing._PRINT_ENV" class="py-name" href="#" onclick="return doclink('link-29', '_PRINT_ENV', 'link-29');">_PRINT_ENV</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line">            <tt class="py-comment"># this is nasty!!!!</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'giving PDF viewer 20s to get the PDF file %s loaded'</tt> <tt class="py-op">%</tt> <tt class="py-name">_hr_filename</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-30" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-30', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-31" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-31', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line">            <tt class="py-name">gevent</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt><tt class="py-op">(</tt><tt class="py-number">20</tt><tt class="py-op">)</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line">        <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">mime_file</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line"> </tt>
+<a name="X2goMIMETypeQueue"></a><div id="X2goMIMETypeQueue-def"><a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue-toggle" onclick="return toggle('X2goMIMETypeQueue');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html">X2goMIMETypeQueue</a><tt class="py-op">(</tt><tt class="py-base-class">threading</tt><tt class="py-op">.</tt><tt class="py-base-class">Thread</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goMIMETypeQueue-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="X2goMIMETypeQueue-expanded"><a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line">    <tt class="py-docstring">"""\</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line"><tt class="py-docstring">    STILL UNDOCUMENTED</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line">    <tt id="link-32" class="py-name" targets="Variable x2go.mimetypes.X2goMIMETypeQueue.print_action=x2go.mimetypes.X2goMIMETypeQueue-class.html#print_action,Variable x2go.printing.X2goClientPrinting.print_action=x2go.printing.X2goClientPrinting-class.html#print_action,Variable x2go.printing.X2goPrintQueue.print_action=x2go.printing.X2goPrintQueue-class.html#print_action"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-32', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line"> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line">    <tt id="link-33" class="py-name" targets="Variable x2go.mimetypes.X2goMIMETypeQueue.spooldir=x2go.mimetypes.X2goMIMETypeQueue-class.html#spooldir,Variable x2go.printing.X2goPrintQueue.spooldir=x2go.printing.X2goPrintQueue-class.html#spooldir"><a title="x2go.mimetypes.X2goMIMETypeQueue.spooldir
+x2go.printing.X2goPrintQueue.spooldir" class="py-name" href="#" onclick="return doclink('link-33', 'spooldir', 'link-33');">spooldir</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line">    <tt id="link-34" class="py-name" targets="Variable x2go.mimetypes.X2goMIMETypeQueue.active_jobs=x2go.mimetypes.X2goMIMETypeQueue-class.html#active_jobs,Variable x2go.printing.X2goPrintQueue.active_jobs=x2go.printing.X2goPrintQueue-class.html#active_jobs"><a title="x2go.mimetypes.X2goMIMETypeQueue.active_jobs
+x2go.printing.X2goPrintQueue.active_jobs" class="py-name" href="#" onclick="return doclink('link-34', 'active_jobs', 'link-34');">active_jobs</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">    <tt id="link-35" class="py-name" targets="Variable x2go.mimetypes.X2goMIMETypeQueue.job_history=x2go.mimetypes.X2goMIMETypeQueue-class.html#job_history,Variable x2go.printing.X2goPrintQueue.job_history=x2go.printing.X2goPrintQueue-class.html#job_history"><a title="x2go.mimetypes.X2goMIMETypeQueue.job_history
+x2go.printing.X2goPrintQueue.job_history" class="py-name" href="#" onclick="return doclink('link-35', 'job_history', 'link-35');">job_history</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line"> </tt>
+<a name="X2goMIMETypeQueue.__init__"></a><div id="X2goMIMETypeQueue.__init__-def"><a name="L109"></a><tt class="py-lineno">109</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.__init__-toggle" onclick="return toggle('X2goMIMETypeQueue.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">logger</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">loglevel</tt><tt class="py-op">=</tt><tt id="link-36" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-36', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="x2go.log.loglevel_DEFAULT" class="py-name" href="#" onclick="return doclink('link-37', 'loglevel_DEFAULT', 'link-17');"
 >logleve
 l_DEFAULT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goMIMETypeQueue.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.__init__-expanded"><a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">        <tt class="py-docstring">"""\</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line"><tt class="py-docstring">        STILL UNDOCUMENTED</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line"><tt class="py-docstring">        @param logger: you can pass an L{X2goLogger} object to the</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line"><tt class="py-docstring">            L{X2goProxy} constructor</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line"><tt class="py-docstring">        @type logger: C{instance}</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line"><tt class="py-docstring">        @param loglevel: if no L{X2goLogger} object has been supplied a new one will be</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line"><tt class="py-docstring">            constructed with the given loglevel</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line"><tt class="py-docstring">        @type loglevel: C{int}</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">logger</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt> <tt class="py-op">=</tt> <tt id="link-38" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-38', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-39" class="py-name"><a title="x2go.log.X2goLogger" class="py-name" href="#" onclick="return doclink('link-39', 'X2goLogger', 'link-19');">X2goLogger</a></tt><tt class="py-op">(</tt><tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt class="py-name">loglevel</tt><tt class="py-op">)</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">deepcopy</tt><tt class="py-op">(</tt><tt class="py-name">logger</tt><tt class="py-op">)</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="x2go.log.X2goLogger.tag" class="py-name" href="#" onclick="return doclink('link-40', 'tag', 'link-20');">tag</a></tt> <tt class="py-op">=</tt> <tt id="link-41" class="py-name"><a title="x2go.__NAME__
+x2go.client.__NAME__
+x2go.defaults.__NAME__
+x2go.forward.__NAME__
+x2go.guardian.__NAME__
+x2go.inifiles.__NAME__
+x2go.log.__NAME__
+x2go.mimetypes.__NAME__
+x2go.printing.__NAME__
+x2go.profiles.__NAME__
+x2go.proxy.__NAME__
+x2go.registry.__NAME__
+x2go.rforward.__NAME__
+x2go.session.__NAME__
+x2go.settings.__NAME__
+x2go.sftpserver.__NAME__
+x2go.utils.__NAME__
+x2go.x2go_exceptions.__NAME__
+x2go.xserver.__NAME__" class="py-name" href="#" onclick="return doclink('link-41', '__NAME__', 'link-0');">__NAME__</a></tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line"> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line">        <tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">Thread</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method x2go.client.X2goClient.__init__()=x2go.client.X2goClient-class.html#__init__,Method x2go.forward.X2goFwServer.__init__()=x2go.forward.X2goFwServer-class.html#__init__,Method x2go.gevent_subprocess.Popen.__init__()=x2go.gevent_subprocess.Popen-class.html#__init__,Method x2go.guardian.X2goSessionGuardian.__init__()=x2go.guardian.X2goSessionGuardian-class.html#__init__,Method x2go.inifiles.X2goIniFile.__init__()=x2go.inifiles.X2goIniFile-class.html#__init__,Method x2go.log.X2goLogger.__init__()=x2go.log.X2goLogger-class.html#__init__,Method x2go.mimetypes.X2goMIMETypeAction.__init__()=x2go.mimetypes.X2goMIMETypeAction-class.html#__init__,Method x2go.mimetypes.X2goMIMETypeQueue.__init__()=x2go.mimetypes.X2goMIMETypeQueue-class.html#__init__,M
 ethod x2
 go.mimetypes.X2goPrintJob.__init__()=x2go.mimetypes.X2goPrintJob-class.html#__init__,Method x2go.printing.X2goClientPrinting.__init__()=x2go.printing.X2goClientPrinting-class.html#__init__,Method x2go.printing.X2goPrintAction.__init__()=x2go.printing.X2goPrintAction-class.html#__init__,Method x2go.printing.X2goPrintActionPDFSAVE.__init__()=x2go.printing.X2goPrintActionPDFSAVE-class.html#__init__,Method x2go.printing.X2goPrintActionPDFVIEW.__init__()=x2go.printing.X2goPrintActionPDFVIEW-class.html#__init__,Method x2go.printing.X2goPrintActionPRINT.__init__()=x2go.printing.X2goPrintActionPRINT-class.html#__init__,Method x2go.printing.X2goPrintActionPRINTCMD.__init__()=x2go.printing.X2goPrintActionPRINTCMD-class.html#__init__,Method x2go.printing.X2goPrintJob.__init__()=x2go.printing.X2goPrintJob-class.html#__init__,Method x2go.printing.X2goPrintQueue.__init__()=x2go.printing.X2goPrintQueue-class.html#__init__,Method x2go.profiles.X2goSessionProfiles.__init__()=x2go.profiles.X2
 goSessio
 nProfiles-class.html#__init__,Method x2go.proxy.X2goNX3Proxy.__init__()=x2go.proxy.X2goNX3Proxy-class.html#__init__,Method x2go.proxy.X2goProxy.__init__()=x2go.proxy.X2goProxy-class.html#__init__,Method x2go.registry.X2goRegisteredSession.__init__()=x2go.registry.X2goRegisteredSession-class.html#__init__,Method x2go.registry.X2goSessionRegistry.__init__()=x2go.registry.X2goSessionRegistry-class.html#__init__,Method x2go.rforward.X2goRevFwChannelThread.__init__()=x2go.rforward.X2goRevFwChannelThread-class.html#__init__,Method x2go.rforward.X2goRevFwTunnel.__init__()=x2go.rforward.X2goRevFwTunnel-class.html#__init__,Method x2go.session.X2goServerSessionList.__init__()=x2go.session.X2goServerSessionList-class.html#__init__,Method x2go.session.X2goSession.__init__()=x2go.session.X2goSession-class.html#__init__,Method x2go.settings.X2goClientSettings.__init__()=x2go.settings.X2goClientSettings-class.html#__init__,Method x2go.sftpserver.X2goRevFwTunnelToSFTP.__init__()=x2go.sftpse
 rver.X2g
 oRevFwTunnelToSFTP-class.html#__init__,Method x2go.xserver.X2goClientXConfig.__init__()=x2go.xserver.X2goClientXConfig-class.html#__init__,Method x2go.xserver.X2goXServer.__init__()=x2go.xserver.X2goXServer-class.html#__init__"><a title="x2go.client.X2goClient.__init__
+x2go.forward.X2goFwServer.__init__
+x2go.gevent_subprocess.Popen.__init__
+x2go.guardian.X2goSessionGuardian.__init__
+x2go.inifiles.X2goIniFile.__init__
+x2go.log.X2goLogger.__init__
+x2go.mimetypes.X2goMIMETypeAction.__init__
+x2go.mimetypes.X2goMIMETypeQueue.__init__
+x2go.mimetypes.X2goPrintJob.__init__
+x2go.printing.X2goClientPrinting.__init__
+x2go.printing.X2goPrintAction.__init__
+x2go.printing.X2goPrintActionPDFSAVE.__init__
+x2go.printing.X2goPrintActionPDFVIEW.__init__
+x2go.printing.X2goPrintActionPRINT.__init__
+x2go.printing.X2goPrintActionPRINTCMD.__init__
+x2go.printing.X2goPrintJob.__init__
+x2go.printing.X2goPrintQueue.__init__
+x2go.profiles.X2goSessionProfiles.__init__
+x2go.proxy.X2goNX3Proxy.__init__
+x2go.proxy.X2goProxy.__init__
+x2go.registry.X2goRegisteredSession.__init__
+x2go.registry.X2goSessionRegistry.__init__
+x2go.rforward.X2goRevFwChannelThread.__init__
+x2go.rforward.X2goRevFwTunnel.__init__
+x2go.session.X2goServerSessionList.__init__
+x2go.session.X2goSession.__init__
+x2go.settings.X2goClientSettings.__init__
+x2go.sftpserver.X2goRevFwTunnelToSFTP.__init__
+x2go.xserver.X2goClientXConfig.__init__
+x2go.xserver.X2goXServer.__init__" class="py-name" href="#" onclick="return doclink('link-42', '__init__', 'link-42');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">daemon</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_accept_jobs</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"> </tt>
+<a name="X2goMIMETypeQueue.__del__"></a><div id="X2goMIMETypeQueue.__del__-def"><a name="L131"></a><tt class="py-lineno">131</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.__del__-toggle" onclick="return toggle('X2goMIMETypeQueue.__del__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#__del__">__del__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goMIMETypeQueue.__del__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.__del__-expanded"><a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Method x2go.guardian.X2goSessionGuardian.stop_thread()=x2go.guardian.X2goSessionGuardian-class.html#stop_thread,Method x2go.mimetypes.X2goMIMETypeQueue.stop_thread()=x2go.mimetypes.X2goMIMETypeQueue-class.html#stop_thread,Method x2go.printing.X2goPrintQueue.stop_thread()=x2go.printing.X2goPrintQueue-class.html#stop_thread,Method x2go.proxy.X2goProxy.stop_thread()=x2go.proxy.X2goProxy-class.html#stop_thread,Method x2go.rforward.X2goRevFwTunnel.stop_thread()=x2go.rforward.X2goRevFwTunnel-class.html#stop_thread"><a title="x2go.guardian.X2goSessionGuardian.stop_thread
+x2go.mimetypes.X2goMIMETypeQueue.stop_thread
+x2go.printing.X2goPrintQueue.stop_thread
+x2go.proxy.X2goProxy.stop_thread
+x2go.rforward.X2goRevFwTunnel.stop_thread" class="py-name" href="#" onclick="return doclink('link-43', 'stop_thread', 'link-43');">stop_thread</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line"> </tt>
+<a name="X2goMIMETypeQueue.pause"></a><div id="X2goMIMETypeQueue.pause-def"><a name="L134"></a><tt class="py-lineno">134</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.pause-toggle" onclick="return toggle('X2goMIMETypeQueue.pause');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#pause">pause</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goMIMETypeQueue.pause-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.pause-expanded"><a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line">        <tt class="py-docstring">"""\</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"><tt class="py-docstring">        Prevent acceptance of new incoming MIME type files. The processing of MIME type files</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"><tt class="py-docstring">        that are currently still active will be completed, though.</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_accept_jobs</tt> <tt class="py-op">==</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_accept_jobs</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'paused thread: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-44" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-44', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-45', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line"> </tt>
+<a name="X2goMIMETypeQueue.resume"></a><div id="X2goMIMETypeQueue.resume-def"><a name="L144"></a><tt class="py-lineno">144</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.resume-toggle" onclick="return toggle('X2goMIMETypeQueue.resume');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#resume">resume</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goMIMETypeQueue.resume-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.resume-expanded"><a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">        <tt class="py-docstring">"""\</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line"><tt class="py-docstring">        Resume operation of the X2go MIME type thread and continue accepting new incoming </tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line"><tt class="py-docstring">        MIME type files.</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_accept_jobs</tt> <tt class="py-op">==</tt> <tt class="py-name">False</tt><tt class="py-op">:</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_accept_jobs</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'resumed thread: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-46" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-46', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-47" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-47', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line"> </tt>
+<a name="X2goMIMETypeQueue.stop_thread"></a><div id="X2goMIMETypeQueue.stop_thread-def"><a name="L154"></a><tt class="py-lineno">154</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.stop_thread-toggle" onclick="return toggle('X2goMIMETypeQueue.stop_thread');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#stop_thread">stop_thread</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goMIMETypeQueue.stop_thread-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.stop_thread-expanded"><a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line">        <tt class="py-docstring">"""\</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line"><tt class="py-docstring">        Stops this L{X2goMIMETypeQueue} thread completely.</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name" targets="Method x2go.mimetypes.X2goMIMETypeQueue.pause()=x2go.mimetypes.X2goMIMETypeQueue-class.html#pause,Method x2go.printing.X2goPrintQueue.pause()=x2go.printing.X2goPrintQueue-class.html#pause,Method x2go.rforward.X2goRevFwTunnel.pause()=x2go.rforward.X2goRevFwTunnel-class.html#pause"><a title="x2go.mimetypes.X2goMIMETypeQueue.pause
+x2go.printing.X2goPrintQueue.pause
+x2go.rforward.X2goRevFwTunnel.pause" class="py-name" href="#" onclick="return doclink('link-48', 'pause', 'link-48');">pause</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keepalive</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'stopping thread: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-49" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-49', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-50', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line"> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
+<a name="X2goMIMETypeQueue._incoming_mime_files"></a><div id="X2goMIMETypeQueue._incoming_mime_files-def"><a name="L164"></a><tt class="py-lineno">164</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue._incoming_mime_files-toggle" onclick="return toggle('X2goMIMETypeQueue._incoming_mime_files');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#_incoming_mime_files">_incoming_mime_files</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goMIMETypeQueue._incoming_mime_files-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue._incoming_mime_files-expanded"><a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line"> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line">        <tt class="py-name">l</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">listdir</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mime_type_dir</tt><tt class="py-op">)</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line">        <tt class="py-name">mime_files</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">_job_file</tt> <tt class="py-keyword">in</tt> <tt class="py-name">job_files</tt><tt class="py-op">:</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line">            <tt class="py-name">j</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">spool_dir</tt><tt class="py-op">,</tt> <tt class="py-name">_job_file</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'r'</tt><tt class="py-op">)</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line">            <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">j</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-name">pdf_filename</tt><tt class="py-op">,</tt> <tt class="py-name">job_title</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt>  <tt class="py-line">            <tt class="py-name">j</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line">            <tt class="py-name">jobs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">_job_file</tt><tt class="py-op">,</tt> <tt class="py-name">pdf_filename</tt><tt class="py-op">,</tt> <tt class="py-name">job_title</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">[</tt> <tt class="py-name">j</tt> <tt class="py-keyword">for</tt> <tt class="py-name">j</tt> <tt class="py-keyword">in</tt> <tt class="py-name">jobs</tt> <tt class="py-keyword">if</tt> <tt class="py-name">j</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.active_jobs
+x2go.printing.X2goPrintQueue.active_jobs" class="py-name" href="#" onclick="return doclink('link-51', 'active_jobs', 'link-34');">active_jobs</a></tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">]</tt> </tt>
+</div><a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line"> </tt>
+<a name="X2goMIMETypeQueue.set_print_action"></a><div id="X2goMIMETypeQueue.set_print_action-def"><a name="L176"></a><tt class="py-lineno">176</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.set_print_action-toggle" onclick="return toggle('X2goMIMETypeQueue.set_print_action');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#set_print_action">set_print_action</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">print_action</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goMIMETypeQueue.set_print_action-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.set_print_action-expanded"><a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line">        <tt class="py-docstring">"""\</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line"><tt class="py-docstring">        Modify the print action of this L{X2goPrintQueue} thread during runtime. The </tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line"><tt class="py-docstring">        change of print action will be valid for the next incoming print job.</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-52" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-52', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-keyword">in</tt> <tt id="link-53" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-53', 'defaults', 'link-3');">defaults</a></tt><tt class="py-op">.</tt><tt id="link-54" class="py-name" targets="Variable x2go.defaults.X2GO_PRINT_ACTIONS=x2go.defaults-module.html#X2GO_PRINT_ACTIONS"><a title="x2go.defaults.X2GO_PRINT_ACTIONS" class="py-name" href="#" onclick="return doclink('link-54', 'X2GO_PRINT_ACTIONS', 'link-54');">X2GO_PRINT_ACTIONS</a></tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line">            <tt id="link-55" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-55', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-op">=</tt> <tt id="link-56" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-56', 'defaults', 'link-3');">defaults</a></tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="x2go.defaults.X2GO_PRINT_ACTIONS" class="py-name" href="#" onclick="return doclink('link-57', 'X2GO_PRINT_ACTIONS', 'link-54');">X2GO_PRINT_ACTIONS</a></tt><tt class="py-op">[</tt><tt id="link-58" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-58', 'print_action', 'link-32');">print_action</a></tt><tt class="py-op">]</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line"> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-59" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-59', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-keyword">in</tt> <tt id="link-60" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-60', 'defaults', 'link-3');">defaults</a></tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="x2go.defaults.X2GO_PRINT_ACTIONS" class="py-name" href="#" onclick="return doclink('link-61', 'X2GO_PRINT_ACTIONS', 'link-54');">X2GO_PRINT_ACTIONS</a></tt><tt class="py-op">.</tt><tt class="py-name">values</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-62', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-op">=</tt> <tt id="link-63" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-63', 'print_action', 'link-32');">print_action</a></tt><tt class="py-op">(</tt><tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line"> </tt>
+<a name="X2goMIMETypeQueue.run"></a><div id="X2goMIMETypeQueue.run-def"><a name="L188"></a><tt class="py-lineno">188</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.run-toggle" onclick="return toggle('X2goMIMETypeQueue.run');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#run">run</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goMIMETypeQueue.run-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.run-expanded"><a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line">        <tt class="py-docstring">"""\</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line"><tt class="py-docstring">        Start this L{X2goPrintQueue} thread...</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'starting print queue thread: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-64" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-64', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-65', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line"> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keepalive</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line">        <tt class="py-keyword">while</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keepalive</tt><tt class="py-op">:</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt>  <tt class="py-line"> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line">            <tt class="py-keyword">while</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_accept_jobs</tt><tt class="py-op">:</tt> </tt>
+<a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line"> </tt>
+<a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_incoming_print_jobs</tt><tt class="py-op">:</tt> </tt>
+<a name="L201"></a><tt class="py-lineno">201</tt>  <tt class="py-line"> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line">                    <tt class="py-keyword">for</tt> <tt class="py-name">_job</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_incoming_print_jobs</tt><tt class="py-op">:</tt> </tt>
+<a name="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line">                        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'incoming print job: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">_job</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-66" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-66', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-67" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-67', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line">                        <tt class="py-name">_new_printjob_thread</tt> <tt class="py-op">=</tt> <tt id="link-68" class="py-name" targets="Class x2go.mimetypes.X2goPrintJob=x2go.mimetypes.X2goPrintJob-class.html,Class x2go.printing.X2goPrintJob=x2go.printing.X2goPrintJob-class.html"><a title="x2go.mimetypes.X2goPrintJob
+x2go.printing.X2goPrintJob" class="py-name" href="#" onclick="return doclink('link-68', 'X2goPrintJob', 'link-68');">X2goPrintJob</a></tt><tt class="py-op">(</tt><tt class="py-name">target</tt><tt class="py-op">=</tt><tt id="link-69" class="py-name" targets="Function x2go.mimetypes.x2go_printjob_handler()=x2go.mimetypes-module.html#x2go_printjob_handler,Function x2go.printing.x2go_printjob_handler()=x2go.printing-module.html#x2go_printjob_handler"><a title="x2go.mimetypes.x2go_printjob_handler
+x2go.printing.x2go_printjob_handler" class="py-name" href="#" onclick="return doclink('link-69', 'x2go_printjob_handler', 'link-69');">x2go_printjob_handler</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line">                                                            <tt class="py-name">kwargs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt>  </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt>  <tt class="py-line">                                                            <tt class="py-string">'job_file'</tt><tt class="py-op">:</tt> <tt class="py-name">_job</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line">                                                            <tt class="py-string">'pdf_file'</tt><tt class="py-op">:</tt> <tt class="py-name">_job</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt>  <tt class="py-line">                                                            <tt class="py-string">'job_title'</tt><tt class="py-op">:</tt> <tt class="py-name">_job</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line">                                                            <tt class="py-string">'print_action'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-70', 'print_action', 'link-32');">print_action</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line">                                                            <tt class="py-string">'parent_thread'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">,</tt>  </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line">                                                            <tt class="py-string">'logger'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">,</tt>  </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt>  <tt class="py-line">                                                          <tt class="py-op">}</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt>  <tt class="py-line">                                                  <tt class="py-op">)</tt> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt>  <tt class="py-line">                        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.active_jobs
+x2go.printing.X2goPrintQueue.active_jobs" class="py-name" href="#" onclick="return doclink('link-71', 'active_jobs', 'link-34');">active_jobs</a></tt><tt class="py-op">[</tt><tt class="py-string">'%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">_job</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">_new_printjob_thread</tt> </tt>
+<a name="L215"></a><tt class="py-lineno">215</tt>  <tt class="py-line">                        <tt class="py-name">_new_printjob_thread</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name" targets="Method x2go.registry.X2goRegisteredSession.start()=x2go.registry.X2goRegisteredSession-class.html#start,Method x2go.session.X2goSession.start()=x2go.session.X2goSession-class.html#start"><a title="x2go.registry.X2goRegisteredSession.start
+x2go.session.X2goSession.start" class="py-name" href="#" onclick="return doclink('link-72', 'start', 'link-72');">start</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line"> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt>  <tt class="py-line">                <tt class="py-name">gevent</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line"> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line">            <tt class="py-name">gevent</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L220"></a><tt class="py-lineno">220</tt>  <tt class="py-line"> </tt>
+<a name="x2go_printjob_handler"></a><div id="x2go_printjob_handler-def"><a name="L221"></a><tt class="py-lineno">221</tt>  <tt class="py-line"> </tt>
+<a name="L222"></a><tt class="py-lineno">222</tt> <a class="py-toggle" href="#" id="x2go_printjob_handler-toggle" onclick="return toggle('x2go_printjob_handler');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes-module.html#x2go_printjob_handler">x2go_printjob_handler</a><tt class="py-op">(</tt><tt class="py-param">job_file</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">pdf_file</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">job_title</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">print_action</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">parent_thread</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">logger</tt><tt class="py-op">=</tt><tt class="py-
 name">No
 ne</tt><tt class="py-op">,</tt> <tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="x2go_printjob_handler-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="x2go_printjob_handler-expanded"><a name="L223"></a><tt class="py-lineno">223</tt>  <tt class="py-line">    <tt class="py-docstring">"""\</tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line"><tt class="py-docstring">    This function is called as a handler function for each incoming X2go print job </tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line"><tt class="py-docstring">    represented by the class L{X2goPrintJob}.</tt> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt>  <tt class="py-line"><tt class="py-docstring">    The handler function will (re-)read the »printing« configuration file (if no</tt> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt>  <tt class="py-line"><tt class="py-docstring">    explicit C{print_action} is passed to this function...). It then will</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line"><tt class="py-docstring">    execute the C{<print_action>.do_print()} command.</tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt>  <tt class="py-line"><tt class="py-docstring">    @param pdf_file: PDF file name as placed in to the X2go spool directory</tt> </tt>
+<a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line"><tt class="py-docstring">    @type pdf_file: C{str}</tt> </tt>
+<a name="L233"></a><tt class="py-lineno">233</tt>  <tt class="py-line"><tt class="py-docstring">    @param job_title: human readable print job title</tt> </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt>  <tt class="py-line"><tt class="py-docstring">    @type job_title: C{str}</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line"><tt class="py-docstring">    @param print_action: an instance of either of the possible C{X2goPrintActionXXX} classes</tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt>  <tt class="py-line"><tt class="py-docstring">    @type print_action: C{X2goPrintActionXXX} nstance</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line"><tt class="py-docstring">    @param parent_thread: the L{X2goPrintQueue} thread that actually created this handler's L{X2goPrintJob} instance</tt> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt>  <tt class="py-line"><tt class="py-docstring">    @type parent_thread: C{instance}</tt> </tt>
+<a name="L239"></a><tt class="py-lineno">239</tt>  <tt class="py-line"><tt class="py-docstring">    @param logger: the L{X2goPrintQueue}'s logging instance</tt> </tt>
+<a name="L240"></a><tt class="py-lineno">240</tt>  <tt class="py-line"><tt class="py-docstring">    @type logger: C{instance}</tt> </tt>
+<a name="L241"></a><tt class="py-lineno">241</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L242"></a><tt class="py-lineno">242</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-73" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-73', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line">        <tt class="py-name">_printing</tt> <tt class="py-op">=</tt> <tt id="link-74" class="py-name" targets="Class x2go.printing.X2goClientPrinting=x2go.printing.X2goClientPrinting-class.html"><a title="x2go.printing.X2goClientPrinting" class="py-name" href="#" onclick="return doclink('link-74', 'X2goClientPrinting', 'link-74');">X2goClientPrinting</a></tt><tt class="py-op">(</tt><tt class="py-name">logger</tt><tt class="py-op">=</tt><tt class="py-name">logger</tt><tt class="py-op">)</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt>  <tt class="py-line">        <tt id="link-75" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-75', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_printing</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-76', 'print_action', 'link-32');">print_action</a></tt> </tt>
+<a name="L246"></a><tt class="py-lineno">246</tt>  <tt class="py-line"> </tt>
+<a name="L247"></a><tt class="py-lineno">247</tt>  <tt class="py-line">    <tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'action for printing is: %s'</tt> <tt class="py-op">%</tt> <tt id="link-77" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-77', 'print_action', 'link-32');">print_action</a></tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-78" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-78', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-79', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L248"></a><tt class="py-lineno">248</tt>  <tt class="py-line">    <tt id="link-80" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action
+x2go.printing.X2goClientPrinting.print_action
+x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-80', 'print_action', 'link-32');">print_action</a></tt><tt class="py-op">.</tt><tt id="link-81" class="py-name" targets="Method x2go.printing.X2goPrintAction.do_print()=x2go.printing.X2goPrintAction-class.html#do_print,Method x2go.printing.X2goPrintActionPDFSAVE.do_print()=x2go.printing.X2goPrintActionPDFSAVE-class.html#do_print,Method x2go.printing.X2goPrintActionPDFVIEW.do_print()=x2go.printing.X2goPrintActionPDFVIEW-class.html#do_print,Method x2go.printing.X2goPrintActionPRINT.do_print()=x2go.printing.X2goPrintActionPRINT-class.html#do_print,Method x2go.printing.X2goPrintActionPRINTCMD.do_print()=x2go.printing.X2goPrintActionPRINTCMD-class.html#do_print"><a title="x2go.printing.X2goPrintAction.do_print
+x2go.printing.X2goPrintActionPDFSAVE.do_print
+x2go.printing.X2goPrintActionPDFVIEW.do_print
+x2go.printing.X2goPrintActionPRINT.do_print
+x2go.printing.X2goPrintActionPRINTCMD.do_print" class="py-name" href="#" onclick="return doclink('link-81', 'do_print', 'link-81');">do_print</a></tt><tt class="py-op">(</tt><tt class="py-name">pdf_file</tt><tt class="py-op">=</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">parent_thread</tt><tt class="py-op">.</tt><tt class="py-name">spool_dir</tt><tt class="py-op">,</tt> <tt class="py-name">pdf_file</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line">                          <tt class="py-name">job_title</tt><tt class="py-op">=</tt><tt class="py-name">job_title</tt><tt class="py-op">,</tt> </tt>
+<a name="L250"></a><tt class="py-lineno">250</tt>  <tt class="py-line">                          <tt class="py-name">spool_dir</tt><tt class="py-op">=</tt><tt class="py-name">parent_thread</tt><tt class="py-op">.</tt><tt class="py-name">spool_dir</tt><tt class="py-op">,</tt> </tt>
+<a name="L251"></a><tt class="py-lineno">251</tt>  <tt class="py-line">                         <tt class="py-op">)</tt> </tt>
+<a name="L252"></a><tt class="py-lineno">252</tt>  <tt class="py-line"> </tt>
+<a name="L253"></a><tt class="py-lineno">253</tt>  <tt class="py-line">    <tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'removing print job files for %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">pdf_file</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-82" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-82', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-83" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-83', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L254"></a><tt class="py-lineno">254</tt>  <tt class="py-line">    <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">parent_thread</tt><tt class="py-op">.</tt><tt class="py-name">spool_dir</tt><tt class="py-op">,</tt> <tt class="py-name">job_file</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt>  <tt class="py-line">    <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">parent_thread</tt><tt class="py-op">.</tt><tt class="py-name">spool_dir</tt><tt class="py-op">,</tt> <tt class="py-name">pdf_file</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L256"></a><tt class="py-lineno">256</tt>  <tt class="py-line"> </tt>
+<a name="L257"></a><tt class="py-lineno">257</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">parent_thread</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.active_jobs
+x2go.printing.X2goPrintQueue.active_jobs" class="py-name" href="#" onclick="return doclink('link-84', 'active_jobs', 'link-34');">active_jobs</a></tt><tt class="py-op">[</tt><tt class="py-string">'%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">pdf_file</tt><tt class="py-op">]</tt> </tt>
+<a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line">    <tt class="py-name">parent_thread</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.job_history
+x2go.printing.X2goPrintQueue.job_history" class="py-name" href="#" onclick="return doclink('link-85', 'job_history', 'link-35');">job_history</a></tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">pdf_file</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line"> </tt>
+<a name="X2goPrintJob"></a><div id="X2goPrintJob-def"><a name="L260"></a><tt class="py-lineno">260</tt>  <tt class="py-line"> </tt>
+<a name="L261"></a><tt class="py-lineno">261</tt> <a class="py-toggle" href="#" id="X2goPrintJob-toggle" onclick="return toggle('X2goPrintJob');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.mimetypes.X2goPrintJob-class.html">X2goPrintJob</a><tt class="py-op">(</tt><tt class="py-base-class">threading</tt><tt class="py-op">.</tt><tt class="py-base-class">Thread</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goPrintJob-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="X2goPrintJob-expanded"><a name="L262"></a><tt class="py-lineno">262</tt>  <tt class="py-line">    <tt class="py-docstring">"""\</tt> </tt>
+<a name="L263"></a><tt class="py-lineno">263</tt>  <tt class="py-line"><tt class="py-docstring">    For each X2go print job we create a sub-thread that let's </tt> </tt>
+<a name="L264"></a><tt class="py-lineno">264</tt>  <tt class="py-line"><tt class="py-docstring">    the print job be processed in the background.</tt> </tt>
+<a name="L265"></a><tt class="py-lineno">265</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line"><tt class="py-docstring">    As a handler for this class the function L{x2go_printjob_handler()} </tt> </tt>
+<a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line"><tt class="py-docstring">    is used.</tt> </tt>
+<a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="X2goPrintJob.__init__"></a><div id="X2goPrintJob.__init__-def"><a name="L270"></a><tt class="py-lineno">270</tt> <a class="py-toggle" href="#" id="X2goPrintJob.__init__-toggle" onclick="return toggle('X2goPrintJob.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goPrintJob-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goPrintJob.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goPrintJob.__init__-expanded"><a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line">        <tt class="py-docstring">"""\</tt> </tt>
+<a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line"><tt class="py-docstring">        Construct the X2go print job thread...</tt> </tt>
+<a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line"><tt class="py-docstring">        All parameters (**kwargs) are passed through to the constructor</tt> </tt>
+<a name="L275"></a><tt class="py-lineno">275</tt>  <tt class="py-line"><tt class="py-docstring">        of C{threading.Thread()}.</tt> </tt>
+<a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line">        <tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">Thread</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="x2go.client.X2goClient.__init__
+x2go.forward.X2goFwServer.__init__
+x2go.gevent_subprocess.Popen.__init__
+x2go.guardian.X2goSessionGuardian.__init__
+x2go.inifiles.X2goIniFile.__init__
+x2go.log.X2goLogger.__init__
+x2go.mimetypes.X2goMIMETypeAction.__init__
+x2go.mimetypes.X2goMIMETypeQueue.__init__
+x2go.mimetypes.X2goPrintJob.__init__
+x2go.printing.X2goClientPrinting.__init__
+x2go.printing.X2goPrintAction.__init__
+x2go.printing.X2goPrintActionPDFSAVE.__init__
+x2go.printing.X2goPrintActionPDFVIEW.__init__
+x2go.printing.X2goPrintActionPRINT.__init__
+x2go.printing.X2goPrintActionPRINTCMD.__init__
+x2go.printing.X2goPrintJob.__init__
+x2go.printing.X2goPrintQueue.__init__
+x2go.profiles.X2goSessionProfiles.__init__
+x2go.proxy.X2goNX3Proxy.__init__
+x2go.proxy.X2goProxy.__init__
+x2go.registry.X2goRegisteredSession.__init__
+x2go.registry.X2goSessionRegistry.__init__
+x2go.rforward.X2goRevFwChannelThread.__init__
+x2go.rforward.X2goRevFwTunnel.__init__
+x2go.session.X2goServerSessionList.__init__
+x2go.session.X2goSession.__init__
+x2go.settings.X2goClientSettings.__init__
+x2go.sftpserver.X2goRevFwTunnelToSFTP.__init__
+x2go.xserver.X2goClientXConfig.__init__
+x2go.xserver.X2goXServer.__init__" class="py-name" href="#" onclick="return doclink('link-86', '__init__', 'link-42');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">daemon</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+</div></div><a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="x2go-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://www.x2go.org">Python X2go</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:58 2010
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/doc/html/x2go.printing.X2goPrintAction-class.html b/doc/html/x2go.mimetypes.X2goMIMETypeAction-class.html
similarity index 67%
copy from doc/html/x2go.printing.X2goPrintAction-class.html
copy to doc/html/x2go.mimetypes.X2goMIMETypeAction-class.html
index c2de8c2..64efd5d 100644
--- a/doc/html/x2go.printing.X2goPrintAction-class.html
+++ b/doc/html/x2go.mimetypes.X2goMIMETypeAction-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>x2go.printing.X2goPrintAction</title>
+  <title>x2go.mimetypes.X2goMIMETypeAction</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -43,8 +43,8 @@
     <td width="100%">
       <span class="breadcrumbs">
         <a href="x2go-module.html">Package x2go</a> ::
-        <a href="x2go.printing-module.html">Module printing</a> ::
-        Class X2goPrintAction
+        <a href="x2go.mimetypes-module.html">Module mimetypes</a> ::
+        Class X2goMIMETypeAction
       </span>
     </td>
     <td>
@@ -52,26 +52,20 @@
         <!-- hide/show private -->
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="x2go.printing.X2goPrintAction-class.html"
+            >] | <a href="x2go.mimetypes.X2goMIMETypeAction-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class X2goPrintAction</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintAction">source code</a></span></p>
+<h1 class="epydoc">Class X2goMIMETypeAction</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeAction">source code</a></span></p>
 <pre class="base-tree">
 object --+
          |
-        <strong class="uidshort">X2goPrintAction</strong>
+        <strong class="uidshort">X2goMIMETypeAction</strong>
 </pre>
 
-<dl><dt>Known Subclasses:</dt>
-<dd>
-      <ul class="subclass-list">
-<li><a href="x2go.printing.X2goPrintActionPDFSAVE-class.html">X2goPrintActionPDFSAVE</a></li><li>, <a href="x2go.printing.X2goPrintActionPDFVIEW-class.html">X2goPrintActionPDFVIEW</a></li><li>, <a href="x2go.printing.X2goPrintActionPRINT-class.html">X2goPrintActionPRINT</a></li><li>, <a href="x2go.printing.X2goPrintActionPRINTCMD-class.html">X2goPrintActionPRINTCMD</a></li>  </ul>
-</dd></dl>
-
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
 <a name="section-InstanceMethods"></a>
@@ -87,12 +81,12 @@ object --+
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="x2go.printing.X2goPrintAction-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+          <td><span class="summary-sig"><a href="x2go.mimetypes.X2goMIMETypeAction-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">logger</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">loglevel</span>=<span class="summary-sig-default">56</span>)</span><br />
-      This is a meta class has no functionality.</td>
+      STILL UNDOCUMENTED</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintAction.__init__">source code</a></span>
+            <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeAction.__init__">source code</a></span>
             
           </td>
         </tr>
@@ -106,15 +100,14 @@ object --+
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="x2go.printing.X2goPrintAction-class.html#do_print" class="summary-sig-name">do_print</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">pdf_file</span>,
-        <span class="summary-sig-arg">job_title</span>,
-        <span class="summary-sig-arg">spool_dir</span>)</span><br />
+          <td><span class="summary-sig"><a href="x2go.mimetypes.X2goMIMETypeAction-class.html#do_execute" class="summary-sig-name">do_execute</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">mime_file</span>,
+        <span class="summary-sig-arg">mime_type_dir</span>)</span><br />
       Perform the defined print action (doing nothing in <a 
       href="x2go.printing.X2goPrintAction-class.html" 
       class="link">X2goPrintAction</a> parent class).</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintAction.do_print">source code</a></span>
+            <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeAction.do_execute">source code</a></span>
             
           </td>
         </tr>
@@ -153,14 +146,14 @@ object --+
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="__name__"></a><span class="summary-name">__name__</span> = <code title="'NAME'"><code class="variable-quote">'</code><code class="variable-string">NAME</code><code class="variable-quote">'</code></code>
+        <a name="__name__"></a><span class="summary-name">__name__</span> = <code title="'MIME'"><code class="variable-quote">'</code><code class="variable-string">MIME</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="__description__"></a><span class="summary-name">__description__</span> = <code title="'DESCRIPTION'"><code class="variable-quote">'</code><code class="variable-string">DESCRIPTION</code><code class="variable-quote">'</code></code>
+        <a href="x2go.mimetypes.X2goMIMETypeAction-class.html#__description__" class="summary-name">__description__</a> = <code title="'Execute a command depending on an incoming file\'s MIME type'"><code class="variable-quote">'</code><code class="variable-string">Execute a command depending on an incoming </code><code class="variable-ellipsis">...</code></code>
     </td>
   </tr>
 </table>
@@ -172,22 +165,6 @@ object --+
   <td align="left" colspan="2" class="table-header">
     <span class="table-header">Properties</span></td>
 </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a href="x2go.printing.X2goPrintAction-class.html#name" class="summary-name">name</a><br />
-      Return the X2go print action's name.
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a href="x2go.printing.X2goPrintAction-class.html#description" class="summary-name">description</a><br />
-      Return the X2go print action's description text.
-    </td>
-  </tr>
   <tr>
     <td colspan="2" class="summary">
     <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
@@ -218,19 +195,18 @@ object --+
     <br /><em class="fname">(Constructor)</em>
   </h3>
   </td><td align="right" valign="top"
-    ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintAction.__init__">source code</a></span> 
+    ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeAction.__init__">source code</a></span> 
     </td>
   </tr></table>
   
-  <p>This is a meta class has no functionality. It is used as parent class 
-  by »real« X2go print actions.</p>
+  <p>STILL UNDOCUMENTED</p>
   <dl class="fields">
     <dt>Parameters:</dt>
     <dd><ul class="nomargin-top">
         <li><strong class="pname"><code>logger</code></strong> (<code>instance</code>) - you can pass an <a href="x2go.log.X2goLogger-class.html" 
           class="link">X2goLogger</a> object to the <a 
-          href="x2go.printing.X2goPrintAction-class.html" 
-          class="link">X2goPrintAction</a> constructor</li>
+          href="x2go.mimetypes.X2goMIMETypeAction-class.html" 
+          class="link">X2goMIMETypeAction</a> constructor</li>
         <li><strong class="pname"><code>loglevel</code></strong> (<code>int</code>) - if no <a href="x2go.log.X2goLogger-class.html" 
           class="link">X2goLogger</a> object has been supplied a new one 
           will be constructed with the given loglevel</li>
@@ -241,20 +217,19 @@ object --+
   </dl>
 </td></tr></table>
 </div>
-<a name="do_print"></a>
+<a name="do_execute"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">do_print</span>(<span class="sig-arg">self</span>,
-        <span class="sig-arg">pdf_file</span>,
-        <span class="sig-arg">job_title</span>,
-        <span class="sig-arg">spool_dir</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">do_execute</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">mime_file</span>,
+        <span class="sig-arg">mime_type_dir</span>)</span>
   </h3>
   </td><td align="right" valign="top"
-    ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintAction.do_print">source code</a></span> 
+    ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeAction.do_execute">source code</a></span> 
     </td>
   </tr></table>
   
@@ -264,50 +239,38 @@ object --+
   <dl class="fields">
     <dt>Parameters:</dt>
     <dd><ul class="nomargin-top">
-        <li><strong class="pname"><code>pdf_file</code></strong> (<code>str</code>) - PDF file name as placed in to the X2go spool directory</li>
-        <li><strong class="pname"><code>job_title</code></strong> (<code>str</code>) - human readable print job title</li>
-        <li><strong class="pname"><code>spool_dir</code></strong> (<code>str</code>) - location of the X2go client's spool directory</li>
+        <li><strong class="pname"><code>mime_file</code></strong> (<code>str</code>) - name of the incoming file</li>
+        <li><strong class="pname"><code>mime_type_dir</code></strong> (<code>str</code>) - location of the X2go client's spool directory for incoming MIME 
+          files</li>
     </ul></dd>
   </dl>
 </td></tr></table>
 </div>
 <br />
-<!-- ==================== PROPERTY DETAILS ==================== -->
-<a name="section-PropertyDetails"></a>
+<!-- ==================== CLASS VARIABLE DETAILS ==================== -->
+<a name="section-ClassVariableDetails"></a>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr bgcolor="#70b0f0" class="table-header">
   <td align="left" colspan="2" class="table-header">
-    <span class="table-header">Property Details</span></td>
+    <span class="table-header">Class Variable Details</span></td>
 </tr>
 </table>
-<a name="name"></a>
+<a name="__description__"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
-  <h3 class="epydoc">name</h3>
-  <p>Return the X2go print action's name.</p>
+  <h3 class="epydoc">__description__</h3>
+  
   <dl class="fields">
-    <dt>Get Method:</dt>
-    <dd class="value"><span class="summary-sig"><i>unreachable</i>.name()</span>
-        - Return the X2go print action's name.
-    </dd>
   </dl>
-</td></tr></table>
-</div>
-<a name="description"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
-  <h3 class="epydoc">description</h3>
-  <p>Return the X2go print action's description text.</p>
   <dl class="fields">
-    <dt>Get Method:</dt>
-    <dd class="value"><span class="summary-sig"><i>unreachable</i>.description()</span>
-        - Return the X2go print action's description text.
-    </dd>
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">Execute a command depending on an incoming file\'s MIME type</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
   </dl>
 </td></tr></table>
 </div>
diff --git a/doc/html/x2go.printing.X2goPrintQueue-class.html b/doc/html/x2go.mimetypes.X2goMIMETypeQueue-class.html
similarity index 74%
copy from doc/html/x2go.printing.X2goPrintQueue-class.html
copy to doc/html/x2go.mimetypes.X2goMIMETypeQueue-class.html
index 8d87b83..26ab93a 100644
--- a/doc/html/x2go.printing.X2goPrintQueue-class.html
+++ b/doc/html/x2go.mimetypes.X2goMIMETypeQueue-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>x2go.printing.X2goPrintQueue</title>
+  <title>x2go.mimetypes.X2goMIMETypeQueue</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -43,8 +43,8 @@
     <td width="100%">
       <span class="breadcrumbs">
         <a href="x2go-module.html">Package x2go</a> ::
-        <a href="x2go.printing-module.html">Module printing</a> ::
-        Class X2goPrintQueue
+        <a href="x2go.mimetypes-module.html">Module mimetypes</a> ::
+        Class X2goMIMETypeQueue
       </span>
     </td>
     <td>
@@ -52,14 +52,14 @@
         <!-- hide/show private -->
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="x2go.printing.X2goPrintQueue-class.html"
+            >] | <a href="x2go.mimetypes.X2goMIMETypeQueue-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class X2goPrintQueue</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue">source code</a></span></p>
+<h1 class="epydoc">Class X2goMIMETypeQueue</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue">source code</a></span></p>
 <pre class="base-tree">
         object --+        
                  |        
@@ -67,14 +67,11 @@ threading._Verbose --+
                      |    
       threading.Thread --+
                          |
-                        <strong class="uidshort">X2goPrintQueue</strong>
+                        <strong class="uidshort">X2goMIMETypeQueue</strong>
 </pre>
 
 <hr />
-<p>If X2go printing is supported in a particaluar <a 
-  href="x2go.session.X2goSession-class.html" class="link">X2goSession</a> 
-  instance this class provides a sub-thread for handling incoming X2go 
-  print jobs.</p>
+<p>STILL UNDOCUMENTED</p>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
 <a name="section-InstanceMethods"></a>
@@ -90,15 +87,12 @@ threading._Verbose --+
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="x2go.printing.X2goPrintQueue-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">spool_dir</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">print_action</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">print_action_args</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+          <td><span class="summary-sig"><a href="x2go.mimetypes.X2goMIMETypeQueue-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">logger</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">loglevel</span>=<span class="summary-sig-default">56</span>)</span><br />
-      x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
+      STILL UNDOCUMENTED</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.__init__">source code</a></span>
+            <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.__init__">source code</a></span>
             
           </td>
         </tr>
@@ -114,7 +108,7 @@ threading._Verbose --+
         <tr>
           <td><span class="summary-sig"><a name="__del__"></a><span class="summary-sig-name">__del__</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.__del__">source code</a></span>
+            <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.__del__">source code</a></span>
             
           </td>
         </tr>
@@ -128,10 +122,10 @@ threading._Verbose --+
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="x2go.printing.X2goPrintQueue-class.html#pause" class="summary-sig-name">pause</a>(<span class="summary-sig-arg">self</span>)</span><br />
-      Prevent acceptance of new incoming print jobs.</td>
+          <td><span class="summary-sig"><a href="x2go.mimetypes.X2goMIMETypeQueue-class.html#pause" class="summary-sig-name">pause</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Prevent acceptance of new incoming MIME type files.</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.pause">source code</a></span>
+            <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.pause">source code</a></span>
             
           </td>
         </tr>
@@ -146,10 +140,10 @@ threading._Verbose --+
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
           <td><span class="summary-sig"><a name="resume"></a><span class="summary-sig-name">resume</span>(<span class="summary-sig-arg">self</span>)</span><br />
-      Resume operation of the X2go print spooler and continue accepting new
-      incoming print jobs.</td>
+      Resume operation of the X2go MIME type thread and continue accepting 
+      new incoming MIME type files.</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.resume">source code</a></span>
+            <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.resume">source code</a></span>
             
           </td>
         </tr>
@@ -164,10 +158,10 @@ threading._Verbose --+
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
           <td><span class="summary-sig"><a name="stop_thread"></a><span class="summary-sig-name">stop_thread</span>(<span class="summary-sig-arg">self</span>)</span><br />
-      Stops this <a href="x2go.printing.X2goPrintQueue-class.html" 
-      class="link">X2goPrintQueue</a> thread completely.</td>
+      Stops this <a href="x2go.mimetypes.X2goMIMETypeQueue-class.html" 
+      class="link">X2goMIMETypeQueue</a> thread completely.</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.stop_thread">source code</a></span>
+            <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.stop_thread">source code</a></span>
             
           </td>
         </tr>
@@ -181,14 +175,14 @@ threading._Verbose --+
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="x2go.printing.X2goPrintQueue-class.html#set_print_action" class="summary-sig-name">set_print_action</a>(<span class="summary-sig-arg">self</span>,
+          <td><span class="summary-sig"><a href="x2go.mimetypes.X2goMIMETypeQueue-class.html#set_print_action" class="summary-sig-name">set_print_action</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">print_action</span>,
         <span class="summary-sig-arg">**kwargs</span>)</span><br />
       Modify the print action of this <a 
       href="x2go.printing.X2goPrintQueue-class.html" 
       class="link">X2goPrintQueue</a> thread during runtime.</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.set_print_action">source code</a></span>
+            <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.set_print_action">source code</a></span>
             
           </td>
         </tr>
@@ -202,11 +196,11 @@ threading._Verbose --+
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="x2go.printing.X2goPrintQueue-class.html#run" class="summary-sig-name">run</a>(<span class="summary-sig-arg">self</span>)</span><br />
+          <td><span class="summary-sig"><a href="x2go.mimetypes.X2goMIMETypeQueue-class.html#run" class="summary-sig-name">run</a>(<span class="summary-sig-arg">self</span>)</span><br />
       Start this <a href="x2go.printing.X2goPrintQueue-class.html" 
       class="link">X2goPrintQueue</a> thread...</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.run">source code</a></span>
+            <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.run">source code</a></span>
             
           </td>
         </tr>
@@ -318,34 +312,19 @@ threading._Verbose --+
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
   <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
-        <span class="sig-arg">spool_dir</span>=<span class="sig-default">None</span>,
-        <span class="sig-arg">print_action</span>=<span class="sig-default">None</span>,
-        <span class="sig-arg">print_action_args</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
         <span class="sig-arg">logger</span>=<span class="sig-default">None</span>,
         <span class="sig-arg">loglevel</span>=<span class="sig-default">56</span>)</span>
     <br /><em class="fname">(Constructor)</em>
   </h3>
   </td><td align="right" valign="top"
-    ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.__init__">source code</a></span> 
+    ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.__init__">source code</a></span> 
     </td>
   </tr></table>
   
-  <p>x.__init__(...) initializes x; see x.__class__.__doc__ for 
-  signature</p>
+  <p>STILL UNDOCUMENTED</p>
   <dl class="fields">
     <dt>Parameters:</dt>
     <dd><ul class="nomargin-top">
-        <li><strong class="pname"><code>spool_dir</code></strong> (<code>str</code>) - local spool directory for incoming print job files</li>
-        <li><strong class="pname"><code>print_action</code></strong> (<code>str</code> or instance) - name or instance of either of the possible X2go print action 
-          classes</li>
-        <li><strong class="pname"><code>print_action_args</code></strong> - depending of the chosen <code>print_action</code> this dictionary
-          may contain different values; the <code>print_action_args</code> 
-          will be passed on to the X2go print action instance constructor, 
-          so refer to either of these: <a 
-          href="x2go.printing.X2goPrintActionPDFVIEW-class.html#__init__" 
-          class="link">X2goPrintActionPDFVIEW.__init__()</a>, <a 
-          href="x2go.printing.X2goPrintActionPRINT-class.html#__init__" 
-          class="link">X2goPrintActionPRINT.__init__()</a> et al.</li>
         <li><strong class="pname"><code>logger</code></strong> (<code>instance</code>) - you can pass an <a href="x2go.log.X2goLogger-class.html" 
           class="link">X2goLogger</a> object to the <a 
           href="x2go.proxy.X2goProxy-class.html" class="link">X2goProxy</a>
@@ -370,12 +349,13 @@ threading._Verbose --+
   <h3 class="epydoc"><span class="sig"><span class="sig-name">pause</span>(<span class="sig-arg">self</span>)</span>
   </h3>
   </td><td align="right" valign="top"
-    ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.pause">source code</a></span> 
+    ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.pause">source code</a></span> 
     </td>
   </tr></table>
   
-  <p>Prevent acceptance of new incoming print jobs. The processing of print
-  jobs that are currently still active will be completed, though.</p>
+  <p>Prevent acceptance of new incoming MIME type files. The processing of 
+  MIME type files that are currently still active will be completed, 
+  though.</p>
   <dl class="fields">
   </dl>
 </td></tr></table>
@@ -392,7 +372,7 @@ threading._Verbose --+
         <span class="sig-arg">**kwargs</span>)</span>
   </h3>
   </td><td align="right" valign="top"
-    ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.set_print_action">source code</a></span> 
+    ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.set_print_action">source code</a></span> 
     </td>
   </tr></table>
   
@@ -414,7 +394,7 @@ threading._Verbose --+
   <h3 class="epydoc"><span class="sig"><span class="sig-name">run</span>(<span class="sig-arg">self</span>)</span>
   </h3>
   </td><td align="right" valign="top"
-    ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.run">source code</a></span> 
+    ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.run">source code</a></span> 
     </td>
   </tr></table>
   
diff --git a/doc/html/x2go.printing.X2goPrintJob-class.html b/doc/html/x2go.mimetypes.X2goPrintJob-class.html
similarity index 91%
copy from doc/html/x2go.printing.X2goPrintJob-class.html
copy to doc/html/x2go.mimetypes.X2goPrintJob-class.html
index ff38e3c..2c85866 100644
--- a/doc/html/x2go.printing.X2goPrintJob-class.html
+++ b/doc/html/x2go.mimetypes.X2goPrintJob-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>x2go.printing.X2goPrintJob</title>
+  <title>x2go.mimetypes.X2goPrintJob</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -43,7 +43,7 @@
     <td width="100%">
       <span class="breadcrumbs">
         <a href="x2go-module.html">Package x2go</a> ::
-        <a href="x2go.printing-module.html">Module printing</a> ::
+        <a href="x2go.mimetypes-module.html">Module mimetypes</a> ::
         Class X2goPrintJob
       </span>
     </td>
@@ -52,14 +52,14 @@
         <!-- hide/show private -->
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="x2go.printing.X2goPrintJob-class.html"
+            >] | <a href="x2go.mimetypes.X2goPrintJob-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class X2goPrintJob</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintJob">source code</a></span></p>
+<h1 class="epydoc">Class X2goPrintJob</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goPrintJob">source code</a></span></p>
 <pre class="base-tree">
         object --+        
                  |        
@@ -74,7 +74,7 @@ threading._Verbose --+
 <p>For each X2go print job we create a sub-thread that let's the print 
   job be processed in the background.</p>
   <p>As a handler for this class the function <a 
-  href="x2go.printing-module.html#x2go_printjob_handler" 
+  href="x2go.mimetypes-module.html#x2go_printjob_handler" 
   class="link">x2go_printjob_handler()</a> is used.</p>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -91,11 +91,11 @@ threading._Verbose --+
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="x2go.printing.X2goPrintJob-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+          <td><span class="summary-sig"><a href="x2go.mimetypes.X2goPrintJob-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">**kwargs</span>)</span><br />
       Construct the X2go print job thread...</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintJob.__init__">source code</a></span>
+            <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goPrintJob.__init__">source code</a></span>
             
           </td>
         </tr>
@@ -175,7 +175,7 @@ threading._Verbose --+
     <br /><em class="fname">(Constructor)</em>
   </h3>
   </td><td align="right" valign="top"
-    ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintJob.__init__">source code</a></span> 
+    ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goPrintJob.__init__">source code</a></span> 
     </td>
   </tr></table>
   
diff --git a/doc/html/x2go.registry-module.html b/doc/html/x2go.xserver-module.html
similarity index 86%
copy from doc/html/x2go.registry-module.html
copy to doc/html/x2go.xserver-module.html
index 1a70a24..3d0f914 100644
--- a/doc/html/x2go.registry-module.html
+++ b/doc/html/x2go.xserver-module.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>x2go.registry</title>
+  <title>x2go.xserver</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -43,7 +43,7 @@
     <td width="100%">
       <span class="breadcrumbs">
         <a href="x2go-module.html">Package x2go</a> ::
-        Module registry
+        Module xserver
       </span>
     </td>
     <td>
@@ -51,17 +51,14 @@
         <!-- hide/show private -->
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="x2go.registry-module.html"
+            >] | <a href="x2go.xserver-module.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== MODULE DESCRIPTION ==================== -->
-<h1 class="epydoc">Module registry</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.registry-pysrc.html">source code</a></span></p>
-<p>X2goSessionRegistry class - the X2goClient's session registry 
-  backend</p>
-
+<h1 class="epydoc">Module xserver</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.xserver-pysrc.html">source code</a></span></p>
 <!-- ==================== CLASSES ==================== -->
 <a name="section-Classes"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -74,15 +71,17 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="x2go.registry.X2goRegisteredSession-class.html" class="summary-name">X2goRegisteredSession</a>
+        <a href="x2go.xserver.X2goClientXConfig-class.html" class="summary-name">X2goClientXConfig</a><br />
+      Configuration file based XServer startup settings for X2goClient 
+        instances.
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="x2go.registry.X2goSessionRegistry-class.html" class="summary-name">X2goSessionRegistry</a><br />
-      STILL UNDOCUMENTED
+        <a href="x2go.xserver.X2goXServer-class.html" class="summary-name">X2goXServer</a><br />
+      This routine will start an XServer if it is not running already
     </td>
   </tr>
 </table>
@@ -98,7 +97,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="__NAME__"></a><span class="summary-name">__NAME__</span> = <code title="'x2gosessregistry-pylib'"><code class="variable-quote">'</code><code class="variable-string">x2gosessregistry-pylib</code><code class="variable-quote">'</code></code>
+        <a name="__NAME__"></a><span class="summary-name">__NAME__</span> = <code title="'x2gosettings-pylib'"><code class="variable-quote">'</code><code class="variable-string">x2gosettings-pylib</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 <tr>
diff --git a/doc/html/x2go.settings-pysrc.html b/doc/html/x2go.xserver-pysrc.html
similarity index 56%
copy from doc/html/x2go.settings-pysrc.html
copy to doc/html/x2go.xserver-pysrc.html
index 844ab58..5d774b9 100644
--- a/doc/html/x2go.settings-pysrc.html
+++ b/doc/html/x2go.xserver-pysrc.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>x2go.settings</title>
+  <title>x2go.xserver</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -43,7 +43,7 @@
     <td width="100%">
       <span class="breadcrumbs">
         <a href="x2go-module.html">Package x2go</a> ::
-        Module settings
+        Module xserver
       </span>
     </td>
     <td>
@@ -51,43 +51,45 @@
         <!-- hide/show private -->
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="x2go.settings-pysrc.html"
+            >] | <a href="x2go.xserver-pysrc.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
-<h1 class="epydoc">Source Code for <a href="x2go.settings-module.html">Module x2go.settings</a></h1>
+<h1 class="epydoc">Source Code for <a href="x2go.xserver-module.html">Module x2go.xserver</a></h1>
 <pre class="py-src">
 <a name="L1"></a><tt class="py-lineno"> 1</tt>  <tt class="py-line"><tt class="py-comment"># -*- coding: utf-8 -*-</tt> </tt>
 <a name="L2"></a><tt class="py-lineno"> 2</tt>  <tt class="py-line"> </tt>
-<a name="L3"></a><tt class="py-lineno"> 3</tt>  <tt class="py-line"><tt class="py-comment"># Copyright (C) 2010 by Mike Gabriel <m.gabriel at das-netzwerkteam.de></tt> </tt>
-<a name="L4"></a><tt class="py-lineno"> 4</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
-<a name="L5"></a><tt class="py-lineno"> 5</tt>  <tt class="py-line"><tt class="py-comment"># Python X2go is free software; you can redistribute it and/or modify</tt> </tt>
-<a name="L6"></a><tt class="py-lineno"> 6</tt>  <tt class="py-line"><tt class="py-comment"># it under the terms of the GNU General Public License as published by</tt> </tt>
-<a name="L7"></a><tt class="py-lineno"> 7</tt>  <tt class="py-line"><tt class="py-comment"># the Free Software Foundation; either version 3 of the License, or</tt> </tt>
-<a name="L8"></a><tt class="py-lineno"> 8</tt>  <tt class="py-line"><tt class="py-comment"># (at your option) any later version.</tt> </tt>
-<a name="L9"></a><tt class="py-lineno"> 9</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
-<a name="L10"></a><tt class="py-lineno">10</tt>  <tt class="py-line"><tt class="py-comment"># Python X2go is distributed in the hope that it will be useful,</tt> </tt>
-<a name="L11"></a><tt class="py-lineno">11</tt>  <tt class="py-line"><tt class="py-comment"># but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
-<a name="L12"></a><tt class="py-lineno">12</tt>  <tt class="py-line"><tt class="py-comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</tt> </tt>
-<a name="L13"></a><tt class="py-lineno">13</tt>  <tt class="py-line"><tt class="py-comment"># GNU General Public License for more details.</tt> </tt>
-<a name="L14"></a><tt class="py-lineno">14</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
-<a name="L15"></a><tt class="py-lineno">15</tt>  <tt class="py-line"><tt class="py-comment"># You should have received a copy of the GNU General Public License</tt> </tt>
-<a name="L16"></a><tt class="py-lineno">16</tt>  <tt class="py-line"><tt class="py-comment"># along with this program; if not, write to the</tt> </tt>
-<a name="L17"></a><tt class="py-lineno">17</tt>  <tt class="py-line"><tt class="py-comment"># Free Software Foundation, Inc.,</tt> </tt>
-<a name="L18"></a><tt class="py-lineno">18</tt>  <tt class="py-line"><tt class="py-comment"># 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</tt> </tt>
-<a name="L19"></a><tt class="py-lineno">19</tt>  <tt class="py-line"> </tt>
-<a name="L20"></a><tt class="py-lineno">20</tt>  <tt class="py-line"><tt class="py-docstring">"""\</tt> </tt>
-<a name="L21"></a><tt class="py-lineno">21</tt>  <tt class="py-line"><tt class="py-docstring">X2goClientSettings class - managing x2goclient settings file (incl. LDAP-Support).</tt> </tt>
-<a name="L22"></a><tt class="py-lineno">22</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L23"></a><tt class="py-lineno">23</tt>  <tt class="py-line"><tt class="py-docstring">The L{X2goClientSettings} class one of Python X2go's a public API classes.</tt> </tt>
-<a name="L24"></a><tt class="py-lineno">24</tt>  <tt class="py-line"><tt class="py-docstring">Use this class (indirectly by retrieving it from an L{X2goClient} instance)</tt> </tt>
-<a name="L25"></a><tt class="py-lineno">25</tt>  <tt class="py-line"><tt class="py-docstring">in your Python X2go based applications to access the</tt> </tt>
-<a name="L26"></a><tt class="py-lineno">26</tt>  <tt class="py-line"><tt class="py-docstring">»settings« configuration file of your X2go client application.</tt> </tt>
-<a name="L27"></a><tt class="py-lineno">27</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L28"></a><tt class="py-lineno">28</tt>  <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
-<a name="L29"></a><tt class="py-lineno">29</tt>  <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable x2go.__NAME__=x2go-module.html#__NAME__,Variable x2go.client.__NAME__=x2go.client-module.html#__NAME__,Variable x2go.defaults.__NAME__=x2go.defaults-module.html#__NAME__,Variable x2go.forward.__NAME__=x2go.forward-module.html#__NAME__,Variable x2go.guardian.__NAME__=x2go.guardian-module.html#__NAME__,Variable x2go.inifiles.__NAME__=x2go.inifiles-module.html#__NAME__,Variable x2go.log.__NAME__=x2go.log-module.html#__NAME__,Variable x2go.mimetypes.__NAME__=x2go.mimetypes-module.html#__NAME__,Variable x2go.printing.__NAME__=x2go.printing-module.html#__NAME__,Variable x2go.profiles.__NAME__=x2go.profiles-module.html#__NAME__,Variable x2go.proxy.__NAME__=x2go.proxy-module.html#__NAME__,Variable x2go.registry.__NAME__=x2go.registry-module.html#__NAME__,Variable x2go.rforward.__NAME__=x2go.rforward-module.html#__NAME__,Variable x2go.session.__NAME__=x2go.session-mo
 dule.htm
 l#__NAME__,Variable x2go.settings.__NAME__=x2go.settings-module.html#__NAME__,Variable x2go.sftpserver.__NAME__=x2go.sftpserver-module.html#__NAME__,Variable x2go.utils.__NAME__=x2go.utils-module.html#__NAME__,Variable x2go.x2go_exceptions.__NAME__=x2go.x2go_exceptions-module.html#__NAME__,Variable x2go.xserver.__NAME__=x2go.xserver-module.html#__NAME__"><a title="x2go.__NAME__
+<a name="L3"></a><tt class="py-lineno"> 3</tt>  <tt class="py-line"><tt class="py-comment"># -*- coding: utf-8 -*-</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt>  <tt class="py-line"> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt>  <tt class="py-line"><tt class="py-comment"># Copyright (C) 2010 by Mike Gabriel <m.gabriel at das-netzwerkteam.de></tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt>  <tt class="py-line"><tt class="py-comment"># Python X2go is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt>  <tt class="py-line"><tt class="py-comment"># it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt>  <tt class="py-line"><tt class="py-comment"># the Free Software Foundation; either version 3 of the License, or</tt> </tt>
+<a name="L10"></a><tt class="py-lineno">10</tt>  <tt class="py-line"><tt class="py-comment"># (at your option) any later version.</tt> </tt>
+<a name="L11"></a><tt class="py-lineno">11</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L12"></a><tt class="py-lineno">12</tt>  <tt class="py-line"><tt class="py-comment"># Python X2go is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L13"></a><tt class="py-lineno">13</tt>  <tt class="py-line"><tt class="py-comment"># but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L14"></a><tt class="py-lineno">14</tt>  <tt class="py-line"><tt class="py-comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</tt> </tt>
+<a name="L15"></a><tt class="py-lineno">15</tt>  <tt class="py-line"><tt class="py-comment"># GNU General Public License for more details.</tt> </tt>
+<a name="L16"></a><tt class="py-lineno">16</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L17"></a><tt class="py-lineno">17</tt>  <tt class="py-line"><tt class="py-comment"># You should have received a copy of the GNU General Public License</tt> </tt>
+<a name="L18"></a><tt class="py-lineno">18</tt>  <tt class="py-line"><tt class="py-comment"># along with this program; if not, write to the</tt> </tt>
+<a name="L19"></a><tt class="py-lineno">19</tt>  <tt class="py-line"><tt class="py-comment"># Free Software Foundation, Inc.,</tt> </tt>
+<a name="L20"></a><tt class="py-lineno">20</tt>  <tt class="py-line"><tt class="py-comment"># 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</tt> </tt>
+<a name="L21"></a><tt class="py-lineno">21</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L22"></a><tt class="py-lineno">22</tt>  <tt class="py-line"><tt class="py-comment"># This code was initially written by:</tt> </tt>
+<a name="L23"></a><tt class="py-lineno">23</tt>  <tt class="py-line"><tt class="py-comment">#       2010 Dick Kniep <dick.kniep at lindix.nl></tt> </tt>
+<a name="L24"></a><tt class="py-lineno">24</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L25"></a><tt class="py-lineno">25</tt>  <tt class="py-line"><tt class="py-comment"># Other contributors:</tt> </tt>
+<a name="L26"></a><tt class="py-lineno">26</tt>  <tt class="py-line"><tt class="py-comment">#       none so far</tt> </tt>
+<a name="L27"></a><tt class="py-lineno">27</tt>  <tt class="py-line"> </tt>
+<a name="L28"></a><tt class="py-lineno">28</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
+<a name="L29"></a><tt class="py-lineno">29</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Module x2go.gevent_subprocess=x2go.gevent_subprocess-module.html"><a title="x2go.gevent_subprocess" class="py-name" href="#" onclick="return doclink('link-0', 'gevent_subprocess', 'link-0');">gevent_subprocess</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">subprocess</tt> </tt>
+<a name="L30"></a><tt class="py-lineno">30</tt>  <tt class="py-line"> </tt>
+<a name="L31"></a><tt class="py-lineno">31</tt>  <tt class="py-line"><tt id="link-1" class="py-name" targets="Variable x2go.__NAME__=x2go-module.html#__NAME__,Variable x2go.client.__NAME__=x2go.client-module.html#__NAME__,Variable x2go.defaults.__NAME__=x2go.defaults-module.html#__NAME__,Variable x2go.forward.__NAME__=x2go.forward-module.html#__NAME__,Variable x2go.guardian.__NAME__=x2go.guardian-module.html#__NAME__,Variable x2go.inifiles.__NAME__=x2go.inifiles-module.html#__NAME__,Variable x2go.log.__NAME__=x2go.log-module.html#__NAME__,Variable x2go.mimetypes.__NAME__=x2go.mimetypes-module.html#__NAME__,Variable x2go.printing.__NAME__=x2go.printing-module.html#__NAME__,Variable x2go.profiles.__NAME__=x2go.profiles-module.html#__NAME__,Variable x2go.proxy.__NAME__=x2go.proxy-module.html#__NAME__,Variable x2go.registry.__NAME__=x2go.registry-module.html#__NAME__,Variable x2go.rforward.__NAME__=x2go.rforward-module.html#__NAME__,Variable x2go.session.__NAME__=x2go.session-mo
 dule.htm
 l#__NAME__,Variable x2go.settings.__NAME__=x2go.settings-module.html#__NAME__,Variable x2go.sftpserver.__NAME__=x2go.sftpserver-module.html#__NAME__,Variable x2go.utils.__NAME__=x2go.utils-module.html#__NAME__,Variable x2go.x2go_exceptions.__NAME__=x2go.x2go_exceptions-module.html#__NAME__,Variable x2go.xserver.__NAME__=x2go.xserver-module.html#__NAME__"><a title="x2go.__NAME__
 x2go.client.__NAME__
 x2go.defaults.__NAME__
 x2go.forward.__NAME__
@@ -105,46 +107,49 @@ x2go.settings.__NAME__
 x2go.sftpserver.__NAME__
 x2go.utils.__NAME__
 x2go.x2go_exceptions.__NAME__
-x2go.xserver.__NAME__" class="py-name" href="#" onclick="return doclink('link-0', '__NAME__', 'link-0');">__NAME__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'x2gosettings-pylib'</tt> </tt>
-<a name="L30"></a><tt class="py-lineno">30</tt>  <tt class="py-line"> </tt>
-<a name="L31"></a><tt class="py-lineno">31</tt>  <tt class="py-line"><tt class="py-comment"># modules</tt> </tt>
-<a name="L32"></a><tt class="py-lineno">32</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
-<a name="L33"></a><tt class="py-lineno">33</tt>  <tt class="py-line"> </tt>
-<a name="L34"></a><tt class="py-lineno">34</tt>  <tt class="py-line"><tt class="py-comment"># Python X2go modules</tt> </tt>
-<a name="L35"></a><tt class="py-lineno">35</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Module x2go.log=x2go.log-module.html"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-1', 'log', 'link-1');">log</a></tt> </tt>
-<a name="L36"></a><tt class="py-lineno">36</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-2" class="py-name" targets="Module x2go.defaults=x2go.defaults-module.html"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-2', 'defaults', 'link-2');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Variable x2go.defaults.X2GO_SETTINGS_CONFIGFILES=x2go.defaults-module.html#X2GO_SETTINGS_CONFIGFILES"><a title="x2go.defaults.X2GO_SETTINGS_CONFIGFILES" class="py-name" href="#" onclick="return doclink('link-3', 'X2GO_SETTINGS_CONFIGFILES', 'link-3');">X2GO_SETTINGS_CONFIGFILES</a></tt> </tt>
-<a name="L37"></a><tt class="py-lineno">37</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-4', 'defaults', 'link-2');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-5" class="py-name" targets="Variable x2go.defaults.X2GO_CLIENTSETTINGS_DEFAULTS=x2go.defaults-module.html#X2GO_CLIENTSETTINGS_DEFAULTS"><a title="x2go.defaults.X2GO_CLIENTSETTINGS_DEFAULTS" class="py-name" href="#" onclick="return doclink('link-5', 'X2GO_CLIENTSETTINGS_DEFAULTS', 'link-5');">X2GO_CLIENTSETTINGS_DEFAULTS</a></tt> </tt>
-<a name="L38"></a><tt class="py-lineno">38</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-6" class="py-name" targets="Module x2go.inifiles=x2go.inifiles-module.html"><a title="x2go.inifiles" class="py-name" href="#" onclick="return doclink('link-6', 'inifiles', 'link-6');">inifiles</a></tt> </tt>
-<a name="L39"></a><tt class="py-lineno">39</tt>  <tt class="py-line"> </tt>
-<a name="L40"></a><tt class="py-lineno">40</tt>  <tt class="py-line"> </tt>
-<a name="X2goClientSettings"></a><div id="X2goClientSettings-def"><a name="L41"></a><tt class="py-lineno">41</tt> <a class="py-toggle" href="#" id="X2goClientSettings-toggle" onclick="return toggle('X2goClientSettings');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.settings.X2goClientSettings-class.html">X2goClientSettings</a><tt class="py-op">(</tt><tt class="py-base-class">inifiles</tt><tt class="py-op">.</tt><tt class="py-base-class">X2goIniFile</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="X2goClientSettings-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="X2goClientSettings-expanded"><a name="L42"></a><tt class="py-lineno">42</tt>  <tt class="py-line">    <tt class="py-docstring">"""\</tt> </tt>
-<a name="L43"></a><tt class="py-lineno">43</tt>  <tt class="py-line"><tt class="py-docstring">    Configuration file based settings for X2goClient instances.</tt> </tt>
-<a name="L44"></a><tt class="py-lineno">44</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L45"></a><tt class="py-lineno">45</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L46"></a><tt class="py-lineno">46</tt>  <tt class="py-line">    <tt id="link-7" class="py-name" targets="Variable x2go.inifiles.X2goIniFile.defaultValues=x2go.inifiles.X2goIniFile-class.html#defaultValues,Variable x2go.printing.X2goClientPrinting.defaultValues=x2go.printing.X2goClientPrinting-class.html#defaultValues,Variable x2go.profiles.X2goSessionProfiles.defaultValues=x2go.profiles.X2goSessionProfiles-class.html#defaultValues,Variable x2go.settings.X2goClientSettings.defaultValues=x2go.settings.X2goClientSettings-class.html#defaultValues,Variable x2go.xserver.X2goClientXConfig.defaultValues=x2go.xserver.X2goClientXConfig-class.html#defaultValues"><a title="x2go.inifiles.X2goIniFile.defaultValues
+x2go.xserver.__NAME__" class="py-name" href="#" onclick="return doclink('link-1', '__NAME__', 'link-1');">__NAME__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'x2gosettings-pylib'</tt> </tt>
+<a name="L32"></a><tt class="py-lineno">32</tt>  <tt class="py-line"> </tt>
+<a name="L33"></a><tt class="py-lineno">33</tt>  <tt class="py-line"><tt class="py-comment"># modules</tt> </tt>
+<a name="L34"></a><tt class="py-lineno">34</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
+<a name="L35"></a><tt class="py-lineno">35</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">threading</tt> </tt>
+<a name="L36"></a><tt class="py-lineno">36</tt>  <tt class="py-line"> </tt>
+<a name="L37"></a><tt class="py-lineno">37</tt>  <tt class="py-line"><tt class="py-comment"># Python X2go modules</tt> </tt>
+<a name="L38"></a><tt class="py-lineno">38</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Module x2go.log=x2go.log-module.html"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-2', 'log', 'link-2');">log</a></tt> </tt>
+<a name="L39"></a><tt class="py-lineno">39</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-3" class="py-name" targets="Module x2go.defaults=x2go.defaults-module.html"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-3', 'defaults', 'link-3');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-4" class="py-name" targets="Variable x2go.defaults.X2GO_XCONFIG_CONFIGFILES=x2go.defaults-module.html#X2GO_XCONFIG_CONFIGFILES"><a title="x2go.defaults.X2GO_XCONFIG_CONFIGFILES" class="py-name" href="#" onclick="return doclink('link-4', 'X2GO_XCONFIG_CONFIGFILES', 'link-4');">X2GO_XCONFIG_CONFIGFILES</a></tt> </tt>
+<a name="L40"></a><tt class="py-lineno">40</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-5" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-5', 'defaults', 'link-3');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-6" class="py-name" targets="Variable x2go.defaults.X2GO_CLIENTXCONFIG_DEFAULTS=x2go.defaults-module.html#X2GO_CLIENTXCONFIG_DEFAULTS"><a title="x2go.defaults.X2GO_CLIENTXCONFIG_DEFAULTS" class="py-name" href="#" onclick="return doclink('link-6', 'X2GO_CLIENTXCONFIG_DEFAULTS', 'link-6');">X2GO_CLIENTXCONFIG_DEFAULTS</a></tt> </tt>
+<a name="L41"></a><tt class="py-lineno">41</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Module x2go.inifiles=x2go.inifiles-module.html"><a title="x2go.inifiles" class="py-name" href="#" onclick="return doclink('link-7', 'inifiles', 'link-7');">inifiles</a></tt> </tt>
+<a name="L42"></a><tt class="py-lineno">42</tt>  <tt class="py-line"> </tt>
+<a name="L43"></a><tt class="py-lineno">43</tt>  <tt class="py-line"> </tt>
+<a name="X2goClientXConfig"></a><div id="X2goClientXConfig-def"><a name="L44"></a><tt class="py-lineno">44</tt> <a class="py-toggle" href="#" id="X2goClientXConfig-toggle" onclick="return toggle('X2goClientXConfig');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.xserver.X2goClientXConfig-class.html">X2goClientXConfig</a><tt class="py-op">(</tt><tt class="py-base-class">inifiles</tt><tt class="py-op">.</tt><tt class="py-base-class">X2goIniFile</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goClientXConfig-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="X2goClientXConfig-expanded"><a name="L45"></a><tt class="py-lineno">45</tt>  <tt class="py-line">    <tt class="py-docstring">"""\</tt> </tt>
+<a name="L46"></a><tt class="py-lineno">46</tt>  <tt class="py-line"><tt class="py-docstring">    Configuration file based XServer startup settings for X2goClient instances.</tt> </tt>
+<a name="L47"></a><tt class="py-lineno">47</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L48"></a><tt class="py-lineno">48</tt>  <tt class="py-line"><tt class="py-docstring">    This class is needed for Windows systems and (maybe soon) for Unix desktops using Wayland.</tt> </tt>
+<a name="L49"></a><tt class="py-lineno">49</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L50"></a><tt class="py-lineno">50</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L51"></a><tt class="py-lineno">51</tt>  <tt class="py-line">    <tt id="link-8" class="py-name" targets="Variable x2go.inifiles.X2goIniFile.defaultValues=x2go.inifiles.X2goIniFile-class.html#defaultValues,Variable x2go.printing.X2goClientPrinting.defaultValues=x2go.printing.X2goClientPrinting-class.html#defaultValues,Variable x2go.profiles.X2goSessionProfiles.defaultValues=x2go.profiles.X2goSessionProfiles-class.html#defaultValues,Variable x2go.settings.X2goClientSettings.defaultValues=x2go.settings.X2goClientSettings-class.html#defaultValues,Variable x2go.xserver.X2goClientXConfig.defaultValues=x2go.xserver.X2goClientXConfig-class.html#defaultValues"><a title="x2go.inifiles.X2goIniFile.defaultValues
 x2go.printing.X2goClientPrinting.defaultValues
 x2go.profiles.X2goSessionProfiles.defaultValues
 x2go.settings.X2goClientSettings.defaultValues
-x2go.xserver.X2goClientXConfig.defaultValues" class="py-name" href="#" onclick="return doclink('link-7', 'defaultValues', 'link-7');">defaultValues</a></tt> <tt class="py-op">=</tt> <tt id="link-8" class="py-name"><a title="x2go.defaults.X2GO_CLIENTSETTINGS_DEFAULTS" class="py-name" href="#" onclick="return doclink('link-8', 'X2GO_CLIENTSETTINGS_DEFAULTS', 'link-5');">X2GO_CLIENTSETTINGS_DEFAULTS</a></tt> </tt>
-<a name="L47"></a><tt class="py-lineno">47</tt>  <tt class="py-line"> </tt>
-<a name="X2goClientSettings.__init__"></a><div id="X2goClientSettings.__init__-def"><a name="L48"></a><tt class="py-lineno">48</tt> <a class="py-toggle" href="#" id="X2goClientSettings.__init__-toggle" onclick="return toggle('X2goClientSettings.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.settings.X2goClientSettings-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">config_files</tt><tt class="py-op">=</tt><tt id="link-9" class="py-name"><a title="x2go.defaults.X2GO_SETTINGS_CONFIGFILES" class="py-name" href="#" onclick="return doclink('link-9', 'X2GO_SETTINGS_CONFIGFILES', 'link-3');">X2GO_SETTINGS_CONFIGFILES</a></tt><tt class="py-op">,</tt> <tt class="py-param">defaults</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">logger</tt><tt class="py-op">=</tt><tt class="py-name">None
 </tt><tt
  class="py-op">,</tt> <tt class="py-param">loglevel</tt><tt class="py-op">=</tt><tt id="link-10" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-10', 'log', 'link-1');">log</a></tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Variable x2go.log.loglevel_DEFAULT=x2go.log-module.html#loglevel_DEFAULT"><a title="x2go.log.loglevel_DEFAULT" class="py-name" href="#" onclick="return doclink('link-11', 'loglevel_DEFAULT', 'link-11');">loglevel_DEFAULT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="X2goClientSettings.__init__-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="X2goClientSettings.__init__-expanded"><a name="L49"></a><tt class="py-lineno">49</tt>  <tt class="py-line">        <tt class="py-docstring">"""\</tt> </tt>
-<a name="L50"></a><tt class="py-lineno">50</tt>  <tt class="py-line"><tt class="py-docstring">        Constructs an L{X2goClientSettings} instance. This is normally done by an L{X2goClient} instance.</tt> </tt>
-<a name="L51"></a><tt class="py-lineno">51</tt>  <tt class="py-line"><tt class="py-docstring">        You can retrieve this L{X2goClientSettings} instance with the L{X2goClient.get_client_settings()} </tt> </tt>
-<a name="L52"></a><tt class="py-lineno">52</tt>  <tt class="py-line"><tt class="py-docstring">        method.</tt> </tt>
-<a name="L53"></a><tt class="py-lineno">53</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L54"></a><tt class="py-lineno">54</tt>  <tt class="py-line"><tt class="py-docstring">        On construction the L{X2goClientSettings} object is filled with values from the configuration files::</tt> </tt>
-<a name="L55"></a><tt class="py-lineno">55</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L56"></a><tt class="py-lineno">56</tt>  <tt class="py-line"><tt class="py-docstring">            /etc/x2goclient/settings</tt> </tt>
-<a name="L57"></a><tt class="py-lineno">57</tt>  <tt class="py-line"><tt class="py-docstring">            ~/.x2goclient/settings</tt> </tt>
+x2go.xserver.X2goClientXConfig.defaultValues" class="py-name" href="#" onclick="return doclink('link-8', 'defaultValues', 'link-8');">defaultValues</a></tt> <tt class="py-op">=</tt> <tt id="link-9" class="py-name"><a title="x2go.defaults.X2GO_CLIENTXCONFIG_DEFAULTS" class="py-name" href="#" onclick="return doclink('link-9', 'X2GO_CLIENTXCONFIG_DEFAULTS', 'link-6');">X2GO_CLIENTXCONFIG_DEFAULTS</a></tt> </tt>
+<a name="L52"></a><tt class="py-lineno">52</tt>  <tt class="py-line"> </tt>
+<a name="X2goClientXConfig.__init__"></a><div id="X2goClientXConfig.__init__-def"><a name="L53"></a><tt class="py-lineno">53</tt> <a class="py-toggle" href="#" id="X2goClientXConfig.__init__-toggle" onclick="return toggle('X2goClientXConfig.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.xserver.X2goClientXConfig-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">config_files</tt><tt class="py-op">=</tt><tt id="link-10" class="py-name"><a title="x2go.defaults.X2GO_XCONFIG_CONFIGFILES" class="py-name" href="#" onclick="return doclink('link-10', 'X2GO_XCONFIG_CONFIGFILES', 'link-4');">X2GO_XCONFIG_CONFIGFILES</a></tt><tt class="py-op">,</tt> <tt class="py-param">defaults</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">logger</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><t
 t class=
 "py-op">,</tt> <tt class="py-param">loglevel</tt><tt class="py-op">=</tt><tt id="link-11" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-11', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-12" class="py-name" targets="Variable x2go.log.loglevel_DEFAULT=x2go.log-module.html#loglevel_DEFAULT"><a title="x2go.log.loglevel_DEFAULT" class="py-name" href="#" onclick="return doclink('link-12', 'loglevel_DEFAULT', 'link-12');">loglevel_DEFAULT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goClientXConfig.__init__-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="X2goClientXConfig.__init__-expanded"><a name="L54"></a><tt class="py-lineno">54</tt>  <tt class="py-line">        <tt class="py-docstring">"""\</tt> </tt>
+<a name="L55"></a><tt class="py-lineno">55</tt>  <tt class="py-line"><tt class="py-docstring">        Constructs an L{X2goClientXConfig} instance. This is normally done by an L{X2goClient} instance.</tt> </tt>
+<a name="L56"></a><tt class="py-lineno">56</tt>  <tt class="py-line"><tt class="py-docstring">        You can retrieve this L{X2goClientXConfig} instance with the C{X2goClient.get_client_xconfig()} </tt> </tt>
+<a name="L57"></a><tt class="py-lineno">57</tt>  <tt class="py-line"><tt class="py-docstring">        method.</tt> </tt>
 <a name="L58"></a><tt class="py-lineno">58</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L59"></a><tt class="py-lineno">59</tt>  <tt class="py-line"><tt class="py-docstring">        The files are read in the specified order and config options of both files are merged. Options </tt> </tt>
-<a name="L60"></a><tt class="py-lineno">60</tt>  <tt class="py-line"><tt class="py-docstring">        set in the user configuration file (C{~/.x2goclient/settings}) override global options set in</tt> </tt>
-<a name="L61"></a><tt class="py-lineno">61</tt>  <tt class="py-line"><tt class="py-docstring">        C{/etc/x2goclient/settings}.</tt> </tt>
-<a name="L62"></a><tt class="py-lineno">62</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L63"></a><tt class="py-lineno">63</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
-<a name="L64"></a><tt class="py-lineno">64</tt>  <tt class="py-line">        <tt id="link-12" class="py-name"><a title="x2go.inifiles" class="py-name" href="#" onclick="return doclink('link-12', 'inifiles', 'link-6');">inifiles</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Class x2go.inifiles.X2goIniFile=x2go.inifiles.X2goIniFile-class.html"><a title="x2go.inifiles.X2goIniFile" class="py-name" href="#" onclick="return doclink('link-13', 'X2goIniFile', 'link-13');">X2goIniFile</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Method x2go.client.X2goClient.__init__()=x2go.client.X2goClient-class.html#__init__,Method x2go.forward.X2goFwServer.__init__()=x2go.forward.X2goFwServer-class.html#__init__,Method x2go.gevent_subprocess.Popen.__init__()=x2go.gevent_subprocess.Popen-class.html#__init__,Method x2go.guardian.X2goSessionGuardian.__init__()=x2go.guardian.X2goSessionGuardian-class.html#__init__,Method x2go.inifiles.X2goIniFi
 le.__ini
 t__()=x2go.inifiles.X2goIniFile-class.html#__init__,Method x2go.log.X2goLogger.__init__()=x2go.log.X2goLogger-class.html#__init__,Method x2go.mimetypes.X2goMIMETypeAction.__init__()=x2go.mimetypes.X2goMIMETypeAction-class.html#__init__,Method x2go.mimetypes.X2goMIMETypeQueue.__init__()=x2go.mimetypes.X2goMIMETypeQueue-class.html#__init__,Method x2go.mimetypes.X2goPrintJob.__init__()=x2go.mimetypes.X2goPrintJob-class.html#__init__,Method x2go.printing.X2goClientPrinting.__init__()=x2go.printing.X2goClientPrinting-class.html#__init__,Method x2go.printing.X2goPrintAction.__init__()=x2go.printing.X2goPrintAction-class.html#__init__,Method x2go.printing.X2goPrintActionPDFSAVE.__init__()=x2go.printing.X2goPrintActionPDFSAVE-class.html#__init__,Method x2go.printing.X2goPrintActionPDFVIEW.__init__()=x2go.printing.X2goPrintActionPDFVIEW-class.html#__init__,Method x2go.printing.X2goPrintActionPRINT.__init__()=x2go.printing.X2goPrintActionPRINT-class.html#__init__,Method x2go.printing.
 X2goPrin
 tActionPRINTCMD.__init__()=x2go.printing.X2goPrintActionPRINTCMD-class.html#__init__,Method x2go.printing.X2goPrintJob.__init__()=x2go.printing.X2goPrintJob-class.html#__init__,Method x2go.printing.X2goPrintQueue.__init__()=x2go.printing.X2goPrintQueue-class.html#__init__,Method x2go.profiles.X2goSessionProfiles.__init__()=x2go.profiles.X2goSessionProfiles-class.html#__init__,Method x2go.proxy.X2goNX3Proxy.__init__()=x2go.proxy.X2goNX3Proxy-class.html#__init__,Method x2go.proxy.X2goProxy.__init__()=x2go.proxy.X2goProxy-class.html#__init__,Method x2go.registry.X2goRegisteredSession.__init__()=x2go.registry.X2goRegisteredSession-class.html#__init__,Method x2go.registry.X2goSessionRegistry.__init__()=x2go.registry.X2goSessionRegistry-class.html#__init__,Method x2go.rforward.X2goRevFwChannelThread.__init__()=x2go.rforward.X2goRevFwChannelThread-class.html#__init__,Method x2go.rforward.X2goRevFwTunnel.__init__()=x2go.rforward.X2goRevFwTunnel-class.html#__init__,Method x2go.sessio
 n.X2goSe
 rverSessionList.__init__()=x2go.session.X2goServerSessionList-class.html#__init__,Method x2go.session.X2goSession.__init__()=x2go.session.X2goSession-class.html#__init__,Method x2go.settings.X2goClientSettings.__init__()=x2go.settings.X2goClientSettings-class.html#__init__,Method x2go.sftpserver.X2goRevFwTunnelToSFTP.__init__()=x2go.sftpserver.X2goRevFwTunnelToSFTP-class.html#__init__,Method x2go.xserver.X2goClientXConfig.__init__()=x2go.xserver.X2goClientXConfig-class.html#__init__,Method x2go.xserver.X2goXServer.__init__()=x2go.xserver.X2goXServer-class.html#__init__"><a title="x2go.client.X2goClient.__init__
+<a name="L59"></a><tt class="py-lineno">59</tt>  <tt class="py-line"><tt class="py-docstring">        On construction the L{X2goClientXConfig} instance is filled with values from the configuration files::</tt> </tt>
+<a name="L60"></a><tt class="py-lineno">60</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L61"></a><tt class="py-lineno">61</tt>  <tt class="py-line"><tt class="py-docstring">            /etc/x2goclient/xconfig</tt> </tt>
+<a name="L62"></a><tt class="py-lineno">62</tt>  <tt class="py-line"><tt class="py-docstring">            ~/.x2goclient/xconfig</tt> </tt>
+<a name="L63"></a><tt class="py-lineno">63</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L64"></a><tt class="py-lineno">64</tt>  <tt class="py-line"><tt class="py-docstring">        The files are read in the specified order and config options of both files are merged. Options </tt> </tt>
+<a name="L65"></a><tt class="py-lineno">65</tt>  <tt class="py-line"><tt class="py-docstring">        set in the user configuration file (C{~/.x2goclient/xconfig}) override global options set in</tt> </tt>
+<a name="L66"></a><tt class="py-lineno">66</tt>  <tt class="py-line"><tt class="py-docstring">        C{/etc/x2goclient/xconfig}.</tt> </tt>
+<a name="L67"></a><tt class="py-lineno">67</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L68"></a><tt class="py-lineno">68</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L69"></a><tt class="py-lineno">69</tt>  <tt class="py-line">        <tt id="link-13" class="py-name"><a title="x2go.inifiles" class="py-name" href="#" onclick="return doclink('link-13', 'inifiles', 'link-7');">inifiles</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Class x2go.inifiles.X2goIniFile=x2go.inifiles.X2goIniFile-class.html"><a title="x2go.inifiles.X2goIniFile" class="py-name" href="#" onclick="return doclink('link-14', 'X2goIniFile', 'link-14');">X2goIniFile</a></tt><tt class="py-op">.</tt><tt id="link-15" class="py-name" targets="Method x2go.client.X2goClient.__init__()=x2go.client.X2goClient-class.html#__init__,Method x2go.forward.X2goFwServer.__init__()=x2go.forward.X2goFwServer-class.html#__init__,Method x2go.gevent_subprocess.Popen.__init__()=x2go.gevent_subprocess.Popen-class.html#__init__,Method x2go.guardian.X2goSessionGuardian.__init__()=x2go.guardian.X2goSessionGuardian-class.html#__init__,Method x2go.inifiles.X2goIniFi
 le.__ini
 t__()=x2go.inifiles.X2goIniFile-class.html#__init__,Method x2go.log.X2goLogger.__init__()=x2go.log.X2goLogger-class.html#__init__,Method x2go.mimetypes.X2goMIMETypeAction.__init__()=x2go.mimetypes.X2goMIMETypeAction-class.html#__init__,Method x2go.mimetypes.X2goMIMETypeQueue.__init__()=x2go.mimetypes.X2goMIMETypeQueue-class.html#__init__,Method x2go.mimetypes.X2goPrintJob.__init__()=x2go.mimetypes.X2goPrintJob-class.html#__init__,Method x2go.printing.X2goClientPrinting.__init__()=x2go.printing.X2goClientPrinting-class.html#__init__,Method x2go.printing.X2goPrintAction.__init__()=x2go.printing.X2goPrintAction-class.html#__init__,Method x2go.printing.X2goPrintActionPDFSAVE.__init__()=x2go.printing.X2goPrintActionPDFSAVE-class.html#__init__,Method x2go.printing.X2goPrintActionPDFVIEW.__init__()=x2go.printing.X2goPrintActionPDFVIEW-class.html#__init__,Method x2go.printing.X2goPrintActionPRINT.__init__()=x2go.printing.X2goPrintActionPRINT-class.html#__init__,Method x2go.printing.
 X2goPrin
 tActionPRINTCMD.__init__()=x2go.printing.X2goPrintActionPRINTCMD-class.html#__init__,Method x2go.printing.X2goPrintJob.__init__()=x2go.printing.X2goPrintJob-class.html#__init__,Method x2go.printing.X2goPrintQueue.__init__()=x2go.printing.X2goPrintQueue-class.html#__init__,Method x2go.profiles.X2goSessionProfiles.__init__()=x2go.profiles.X2goSessionProfiles-class.html#__init__,Method x2go.proxy.X2goNX3Proxy.__init__()=x2go.proxy.X2goNX3Proxy-class.html#__init__,Method x2go.proxy.X2goProxy.__init__()=x2go.proxy.X2goProxy-class.html#__init__,Method x2go.registry.X2goRegisteredSession.__init__()=x2go.registry.X2goRegisteredSession-class.html#__init__,Method x2go.registry.X2goSessionRegistry.__init__()=x2go.registry.X2goSessionRegistry-class.html#__init__,Method x2go.rforward.X2goRevFwChannelThread.__init__()=x2go.rforward.X2goRevFwChannelThread-class.html#__init__,Method x2go.rforward.X2goRevFwTunnel.__init__()=x2go.rforward.X2goRevFwTunnel-class.html#__init__,Method x2go.sessio
 n.X2goSe
 rverSessionList.__init__()=x2go.session.X2goServerSessionList-class.html#__init__,Method x2go.session.X2goSession.__init__()=x2go.session.X2goSession-class.html#__init__,Method x2go.settings.X2goClientSettings.__init__()=x2go.settings.X2goClientSettings-class.html#__init__,Method x2go.sftpserver.X2goRevFwTunnelToSFTP.__init__()=x2go.sftpserver.X2goRevFwTunnelToSFTP-class.html#__init__,Method x2go.xserver.X2goClientXConfig.__init__()=x2go.xserver.X2goClientXConfig-class.html#__init__,Method x2go.xserver.X2goXServer.__init__()=x2go.xserver.X2goXServer-class.html#__init__"><a title="x2go.client.X2goClient.__init__
 x2go.forward.X2goFwServer.__init__
 x2go.gevent_subprocess.Popen.__init__
 x2go.guardian.X2goSessionGuardian.__init__
@@ -173,8 +178,30 @@ x2go.session.X2goSession.__init__
 x2go.settings.X2goClientSettings.__init__
 x2go.sftpserver.X2goRevFwTunnelToSFTP.__init__
 x2go.xserver.X2goClientXConfig.__init__
-x2go.xserver.X2goXServer.__init__" class="py-name" href="#" onclick="return doclink('link-14', '__init__', 'link-14');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt id="link-15" class="py-name" targets="Variable x2go.printing.X2goClientPrinting.config_files=x2go.printing.X2goClientPrinting-class.html#config_files"><a title="x2go.printing.X2goClientPrinting.config_files" class="py-name" href="#" onclick="return doclink('link-15', 'config_files', 'link-15');">config_files</a></tt><tt class="py-op">,</tt> <tt id="link-16" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-16', 'defaults', 'link-2');">defaults</a></tt><tt class="py-op">=</tt><tt id="link-17" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-17', 'defaults', 'link-2');">defaults</a></tt><tt class="py-op">,</tt> <tt class="py-name">logger</tt><tt class="py-op">=</tt><tt c
 lass="py
 -name">logger</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt class="py-name">loglevel</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L65"></a><tt class="py-lineno">65</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+x2go.xserver.X2goXServer.__init__" class="py-name" href="#" onclick="return doclink('link-15', '__init__', 'link-15');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt id="link-16" class="py-name" targets="Variable x2go.printing.X2goClientPrinting.config_files=x2go.printing.X2goClientPrinting-class.html#config_files"><a title="x2go.printing.X2goClientPrinting.config_files" class="py-name" href="#" onclick="return doclink('link-16', 'config_files', 'link-16');">config_files</a></tt><tt class="py-op">,</tt> <tt id="link-17" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-17', 'defaults', 'link-3');">defaults</a></tt><tt class="py-op">=</tt><tt id="link-18" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-18', 'defaults', 'link-3');">defaults</a></tt><tt class="py-op">,</tt> <tt class="py-name">logger</tt><tt class="py-op">=</tt><tt c
 lass="py
 -name">logger</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt class="py-name">loglevel</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L70"></a><tt class="py-lineno">70</tt>  <tt class="py-line"> </tt>
+<a name="L71"></a><tt class="py-lineno">71</tt>  <tt class="py-line"> </tt>
+<a name="X2goXServer"></a><div id="X2goXServer-def"><a name="L72"></a><tt class="py-lineno">72</tt> <a class="py-toggle" href="#" id="X2goXServer-toggle" onclick="return toggle('X2goXServer');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.xserver.X2goXServer-class.html">X2goXServer</a><tt class="py-op">(</tt><tt class="py-base-class">threading</tt><tt class="py-op">.</tt><tt class="py-base-class">Thread</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goXServer-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="X2goXServer-expanded"><a name="L73"></a><tt class="py-lineno">73</tt>  <tt class="py-line">    <tt class="py-docstring">"""</tt> </tt>
+<a name="L74"></a><tt class="py-lineno">74</tt>  <tt class="py-line"><tt class="py-docstring">    This routine will start an XServer if it is not running </tt> </tt>
+<a name="L75"></a><tt class="py-lineno">75</tt>  <tt class="py-line"><tt class="py-docstring">    already</tt> </tt>
+<a name="L76"></a><tt class="py-lineno">76</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L77"></a><tt class="py-lineno">77</tt>  <tt class="py-line"> </tt>
+<a name="X2goXServer.__init__"></a><div id="X2goXServer.__init__-def"><a name="L78"></a><tt class="py-lineno">78</tt> <a class="py-toggle" href="#" id="X2goXServer.__init__-toggle" onclick="return toggle('X2goXServer.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.xserver.X2goXServer-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">XServerParms</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="X2goXServer.__init__-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="X2goXServer.__init__-expanded"><a name="L79"></a><tt class="py-lineno">79</tt>  <tt class="py-line"> </tt>
+<a name="L80"></a><tt class="py-lineno">80</tt>  <tt class="py-line">        <tt class="py-name">processname</tt> <tt class="py-op">=</tt> <tt class="py-name">XServerParms</tt><tt class="py-op">.</tt><tt class="py-name">binary</tt> </tt>
+<a name="L81"></a><tt class="py-lineno">81</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">(</tt><tt class="py-string">"ps xa"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L82"></a><tt class="py-lineno">82</tt>  <tt class="py-line">            <tt class="py-name">fields</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L83"></a><tt class="py-lineno">83</tt>  <tt class="py-line">            <tt class="py-name">pid</tt> <tt class="py-op">=</tt> <tt class="py-name">fields</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L84"></a><tt class="py-lineno">84</tt>  <tt class="py-line">            <tt class="py-name">process</tt> <tt class="py-op">=</tt> <tt class="py-name">fields</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> </tt>
+<a name="L85"></a><tt class="py-lineno">85</tt>  <tt class="py-line"> </tt>
+<a name="L86"></a><tt class="py-lineno">86</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">process</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-name">XServerParms</tt><tt class="py-op">.</tt><tt class="py-name">binary</tt><tt class="py-op">)</tt> <tt class="py-op">></tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L87"></a><tt class="py-lineno">87</tt>  <tt class="py-line">                <tt class="py-comment"># XServer is already running</tt> </tt>
+<a name="L88"></a><tt class="py-lineno">88</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> </tt>
+<a name="L89"></a><tt class="py-lineno">89</tt>  <tt class="py-line"> </tt>
+<a name="L90"></a><tt class="py-lineno">90</tt>  <tt class="py-line">            <tt class="py-name">p</tt> <tt class="py-op">=</tt> <tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Class x2go.gevent_subprocess.Popen=x2go.gevent_subprocess.Popen-class.html"><a title="x2go.gevent_subprocess.Popen" class="py-name" href="#" onclick="return doclink('link-19', 'Popen', 'link-19');">Popen</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">XServerParms</tt><tt class="py-op">.</tt><tt class="py-name">binary</tt><tt class="py-op">,</tt><tt class="py-name">XServerParms</tt><tt class="py-op">.</tt><tt class="py-name">parameters</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">shell</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L91"></a><tt class="py-lineno">91</tt>  <tt class="py-line">            <tt class="py-name">sts</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">waitpid</tt><tt class="py-op">(</tt><tt class="py-name">p</tt><tt class="py-op">.</tt><tt class="py-name">pid</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+</div></div><a name="L92"></a><tt class="py-lineno">92</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -212,7 +239,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:58 2010
+    Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:59 2010
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/doc/html/x2go.settings.X2goClientSettings-class.html b/doc/html/x2go.xserver.X2goClientXConfig-class.html
similarity index 67%
copy from doc/html/x2go.settings.X2goClientSettings-class.html
copy to doc/html/x2go.xserver.X2goClientXConfig-class.html
index 29b43da..71e153e 100644
--- a/doc/html/x2go.settings.X2goClientSettings-class.html
+++ b/doc/html/x2go.xserver.X2goClientXConfig-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>x2go.settings.X2goClientSettings</title>
+  <title>x2go.xserver.X2goClientXConfig</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -43,8 +43,8 @@
     <td width="100%">
       <span class="breadcrumbs">
         <a href="x2go-module.html">Package x2go</a> ::
-        <a href="x2go.settings-module.html">Module settings</a> ::
-        Class X2goClientSettings
+        <a href="x2go.xserver-module.html">Module xserver</a> ::
+        Class X2goClientXConfig
       </span>
     </td>
     <td>
@@ -52,24 +52,27 @@
         <!-- hide/show private -->
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="x2go.settings.X2goClientSettings-class.html"
+            >] | <a href="x2go.xserver.X2goClientXConfig-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class X2goClientSettings</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.settings-pysrc.html#X2goClientSettings">source code</a></span></p>
+<h1 class="epydoc">Class X2goClientXConfig</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.xserver-pysrc.html#X2goClientXConfig">source code</a></span></p>
 <pre class="base-tree">
           object --+    
                    |    
 <a href="x2go.inifiles.X2goIniFile-class.html">inifiles.X2goIniFile</a> --+
                        |
-                      <strong class="uidshort">X2goClientSettings</strong>
+                      <strong class="uidshort">X2goClientXConfig</strong>
 </pre>
 
 <hr />
-<p>Configuration file based settings for X2goClient instances.</p>
+<p>Configuration file based XServer startup settings for X2goClient 
+  instances.</p>
+  <p>This class is needed for Windows systems and (maybe soon) for Unix 
+  desktops using Wayland.</p>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
 <a name="section-InstanceMethods"></a>
@@ -85,15 +88,15 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="x2go.settings.X2goClientSettings-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">config_files</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string">/etc/x2goclient/settings</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">/home/mike/.x2goclient/settings</code><code class="variable-quote">'</code><code class="variable-group">]</code></span>,
+          <td><span class="summary-sig"><a href="x2go.xserver.X2goClientXConfig-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">config_files</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string">/etc/x2goclient/xconfig</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">/home/mike/.x2goclient/xconfig</code><code class="variable-quote">'</code><code class="variable-group">]</code></span>,
         <span class="summary-sig-arg">defaults</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">logger</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">loglevel</span>=<span class="summary-sig-default">56</span>)</span><br />
-      Constructs an <a href="x2go.settings.X2goClientSettings-class.html" 
-      class="link">X2goClientSettings</a> instance.</td>
+      Constructs an <a href="x2go.xserver.X2goClientXConfig-class.html" 
+      class="link">X2goClientXConfig</a> instance.</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.settings-pysrc.html#X2goClientSettings.__init__">source code</a></span>
+            <span class="codelink"><a href="x2go.xserver-pysrc.html#X2goClientXConfig.__init__">source code</a></span>
             
           </td>
         </tr>
@@ -140,15 +143,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="x2go.settings.X2goClientSettings-class.html#defaultValues" class="summary-name">defaultValues</a> = <code title="{'Authorization': {'editprofile': True,
-                   'newprofile': True,
-                   'resume': True,
-                   'suspend': True},
- 'General': {'autoresume': True, 'clientport': 22},
- 'LDAP': {'port': 389,
-          'port1': 0,
-          'port2': 0,
-..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">Authorization</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">editprofile</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">newpr</code><code class="variable-ellipsis">...</code></code>
+        <a href="x2go.xserver.X2goClientXConfig-class.html#defaultValues" class="summary-name">defaultValues</a> = <code title="{'XServer': {'binary': 'XMing', 'parameters': '', 'stopcommand': ''}}"><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">XServer</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">binary</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">XMing</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">parameters</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-ellipsis">...</code></code>
     </td>
   </tr>
   <tr>
@@ -196,37 +191,36 @@
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
   <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
-        <span class="sig-arg">config_files</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string">/etc/x2goclient/settings</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">/home/mike/.x2goclient/settings</code><code class="variable-quote">'</code><code class="variable-group">]</code></span>,
+        <span class="sig-arg">config_files</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string">/etc/x2goclient/xconfig</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">/home/mike/.x2goclient/xconfig</code><code class="variable-quote">'</code><code class="variable-group">]</code></span>,
         <span class="sig-arg">defaults</span>=<span class="sig-default">None</span>,
         <span class="sig-arg">logger</span>=<span class="sig-default">None</span>,
         <span class="sig-arg">loglevel</span>=<span class="sig-default">56</span>)</span>
     <br /><em class="fname">(Constructor)</em>
   </h3>
   </td><td align="right" valign="top"
-    ><span class="codelink"><a href="x2go.settings-pysrc.html#X2goClientSettings.__init__">source code</a></span> 
+    ><span class="codelink"><a href="x2go.xserver-pysrc.html#X2goClientXConfig.__init__">source code</a></span> 
     </td>
   </tr></table>
   
-  <p>Constructs an <a href="x2go.settings.X2goClientSettings-class.html" 
-  class="link">X2goClientSettings</a> instance. This is normally done by an
+  <p>Constructs an <a href="x2go.xserver.X2goClientXConfig-class.html" 
+  class="link">X2goClientXConfig</a> instance. This is normally done by an 
   <a href="x2go.client.X2goClient-class.html" class="link">X2goClient</a> 
   instance. You can retrieve this <a 
-  href="x2go.settings.X2goClientSettings-class.html" 
-  class="link">X2goClientSettings</a> instance with the <a 
-  href="x2go.client.X2goClient-class.html#get_client_settings" 
-  class="link">X2goClient.get_client_settings()</a> method.</p>
+  href="x2go.xserver.X2goClientXConfig-class.html" 
+  class="link">X2goClientXConfig</a> instance with the 
+  <code>X2goClient.get_client_xconfig()</code> method.</p>
   <p>On construction the <a 
-  href="x2go.settings.X2goClientSettings-class.html" 
-  class="link">X2goClientSettings</a> object is filled with values from the
-  configuration files:</p>
+  href="x2go.xserver.X2goClientXConfig-class.html" 
+  class="link">X2goClientXConfig</a> instance is filled with values from 
+  the configuration files:</p>
 <pre class="literalblock">
-   /etc/x2goclient/settings
-   ~/.x2goclient/settings
+   /etc/x2goclient/xconfig
+   ~/.x2goclient/xconfig
 </pre>
   <p>The files are read in the specified order and config options of both 
   files are merged. Options set in the user configuration file 
-  (<code>~/.x2goclient/settings</code>) override global options set in 
-  <code>/etc/x2goclient/settings</code>.</p>
+  (<code>~/.x2goclient/xconfig</code>) override global options set in 
+  <code>/etc/x2goclient/xconfig</code>.</p>
   <dl class="fields">
     <dt>Parameters:</dt>
     <dd><ul class="nomargin-top">
@@ -271,15 +265,7 @@
   <dl class="fields">
     <dt>Value:</dt>
       <dd><table><tr><td><pre class="variable">
-<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">Authorization</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">editprofile</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-op">,</code>
-                   <code class="variable-quote">'</code><code class="variable-string">newprofile</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-op">,</code>
-                   <code class="variable-quote">'</code><code class="variable-string">resume</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-op">,</code>
-                   <code class="variable-quote">'</code><code class="variable-string">suspend</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-group">}</code><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">General</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">autoresume</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">clientport</code><code class="variable-quote">'</code><code class="variable-op">: </code>22<code class="variable-group">}</code><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">LDAP</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">port</code><code class="variable-quote">'</code><code class="variable-op">: </code>389<code class="variable-op">,</code>
-          <code class="variable-quote">'</code><code class="variable-string">port1</code><code class="variable-quote">'</code><code class="variable-op">: </code>0<code class="variable-op">,</code>
-          <code class="variable-quote">'</code><code class="variable-string">port2</code><code class="variable-quote">'</code><code class="variable-op">: </code>0<code class="variable-op">,</code>
-<code class="variable-ellipsis">...</code>
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">XServer</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">binary</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">XMing</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">parameters</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">stopcommand</code><code class="variable-quote">'</code><code class="variable-op">: </code>
 <code cl
 ass="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-group">}</code><code class="variable-group">}</code>
 </pre></td></tr></table>
 </dd>
   </dl>
diff --git a/doc/html/x2go.printing.X2goPrintJob-class.html b/doc/html/x2go.xserver.X2goXServer-class.html
similarity index 82%
copy from doc/html/x2go.printing.X2goPrintJob-class.html
copy to doc/html/x2go.xserver.X2goXServer-class.html
index ff38e3c..d9e5774 100644
--- a/doc/html/x2go.printing.X2goPrintJob-class.html
+++ b/doc/html/x2go.xserver.X2goXServer-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>x2go.printing.X2goPrintJob</title>
+  <title>x2go.xserver.X2goXServer</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -43,8 +43,8 @@
     <td width="100%">
       <span class="breadcrumbs">
         <a href="x2go-module.html">Package x2go</a> ::
-        <a href="x2go.printing-module.html">Module printing</a> ::
-        Class X2goPrintJob
+        <a href="x2go.xserver-module.html">Module xserver</a> ::
+        Class X2goXServer
       </span>
     </td>
     <td>
@@ -52,14 +52,14 @@
         <!-- hide/show private -->
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="x2go.printing.X2goPrintJob-class.html"
+            >] | <a href="x2go.xserver.X2goXServer-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class X2goPrintJob</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintJob">source code</a></span></p>
+<h1 class="epydoc">Class X2goXServer</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.xserver-pysrc.html#X2goXServer">source code</a></span></p>
 <pre class="base-tree">
         object --+        
                  |        
@@ -67,15 +67,11 @@ threading._Verbose --+
                      |    
       threading.Thread --+
                          |
-                        <strong class="uidshort">X2goPrintJob</strong>
+                        <strong class="uidshort">X2goXServer</strong>
 </pre>
 
 <hr />
-<p>For each X2go print job we create a sub-thread that let's the print 
-  job be processed in the background.</p>
-  <p>As a handler for this class the function <a 
-  href="x2go.printing-module.html#x2go_printjob_handler" 
-  class="link">x2go_printjob_handler()</a> is used.</p>
+<p>This routine will start an XServer if it is not running already</p>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
 <a name="section-InstanceMethods"></a>
@@ -91,11 +87,11 @@ threading._Verbose --+
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="x2go.printing.X2goPrintJob-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">**kwargs</span>)</span><br />
-      Construct the X2go print job thread...</td>
+          <td><span class="summary-sig"><a href="x2go.xserver.X2goXServer-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">XServerParms</span>)</span><br />
+      x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
           <td align="right" valign="top">
-            <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintJob.__init__">source code</a></span>
+            <span class="codelink"><a href="x2go.xserver-pysrc.html#X2goXServer.__init__">source code</a></span>
             
           </td>
         </tr>
@@ -171,20 +167,20 @@ threading._Verbose --+
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
   <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
-        <span class="sig-arg">**kwargs</span>)</span>
+        <span class="sig-arg">XServerParms</span>)</span>
     <br /><em class="fname">(Constructor)</em>
   </h3>
   </td><td align="right" valign="top"
-    ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintJob.__init__">source code</a></span> 
+    ><span class="codelink"><a href="x2go.xserver-pysrc.html#X2goXServer.__init__">source code</a></span> 
     </td>
   </tr></table>
   
-  <p>Construct the X2go print job thread...</p>
-  <p>All parameters (**kwargs) are passed through to the constructor of 
-  <code>threading.Thread()</code>.</p>
+  <p>x.__init__(...) initializes x; see x.__class__.__doc__ for 
+  signature</p>
   <dl class="fields">
     <dt>Overrides:
         object.__init__
+        <dd><em class="note">(inherited documentation)</em></dd>
     </dt>
   </dl>
 </td></tr></table>
@@ -221,7 +217,7 @@ threading._Verbose --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:56 2010
+    Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:57 2010
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/x2go/gevent_subprocess.py b/x2go/gevent_subprocess.py
new file mode 100644
index 0000000..79ed23e
--- /dev/null
+++ b/x2go/gevent_subprocess.py
@@ -0,0 +1,197 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2010 by Mike Gabriel <m.gabriel at das-netzwerkteam.de>
+#
+# Python X2go 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 3 of the License, or
+# (at your option) any later version.
+#
+# Python X2go 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.
+
+# found here: http://groups.google.com/group/gevent/browse_thread/thread/dba1a5d29e0a60ff
+# Mark Visser <mjmvisser at gmail.com>
+
+"""Implementation of the standard :mod:`subprocess` module that spawns greenlets"""
+import errno
+import sys
+import fcntl, os
+
+_subprocess = __import__('subprocess')
+
+from gevent import socket, select, hub
+
+# identical to original
+CalledProcessError = _subprocess.CalledProcessError
+MAXFD = _subprocess.MAXFD
+PIPE = _subprocess.PIPE
+STDOUT = _subprocess.STDOUT
+call = _subprocess.call
+check_call = _subprocess.check_call
+list2cmdline = _subprocess.list2cmdline
+
+
+class Popen(object):
+    def __init__(self, *args, **kwargs):
+        # delegate to an actual Popen object
+        self.__p = _subprocess.Popen(*args, **kwargs)
+        # make the file handles nonblocking
+        if self.stdin is not None:
+            fcntl.fcntl(self.stdin, fcntl.F_SETFL, os.O_NONBLOCK)
+        if self.stdout is not None:
+            fcntl.fcntl(self.stdout, fcntl.F_SETFL, os.O_NONBLOCK)
+        if self.stderr is not None:
+            fcntl.fcntl(self.stderr, fcntl.F_SETFL, os.O_NONBLOCK)
+
+    def __getattr__(self, name):
+        # delegate attribute lookup to the real Popen object
+        return getattr(self.__p, name)
+
+    def _write_pipe(self, f, input):
+        # writes the given input to f without blocking
+        if input:
+            bytes_total = len(input)
+            bytes_written = 0
+            while bytes_written < bytes_total:
+                try:
+                    # f.write() doesn't return anything, so use os.write.
+                    bytes_written += os.write(f.fileno(), input[bytes_written:])
+                except IOError, ex:
+                    if ex[0] != errno.EAGAIN:
+                        raise
+                    sys.exc_clear()
+                socket.wait_write(f.fileno())
+        f.close()
+    
+    def _read_pipe(self, f):
+        # reads output from f without blocking
+        # returns output
+        chunks = []
+        while True:
+            try:
+                chunk = f.read(4096)
+                if not chunk:
+                    break
+                chunks.append(chunk)
+            except IOError, ex:
+                if ex[0] != errno.EAGAIN:
+                    raise
+                sys.exc_clear()
+            socket.wait_read(f.fileno())
+        f.close()
+        return ''.join(chunks)
+
+    def communicate(self, input=None):
+        # Optimization: If we are only using one pipe, or no pipe at
+        # all, using select() is unnecessary.
+        if [self.stdin, self.stdout, self.stderr].count(None) >= 2:
+            stdout = None
+            stderr = None
+            if self.stdin:
+                self._write_pipe(self.stdin, input)
+            elif self.stdout:
+                stdout = self._read_pipe(self.stdout)
+            elif self.stderr:
+                stderr = self._read_pipe(self.stderr)
+            self.wait()
+            return (stdout, stderr)
+        else:
+            return self._communicate(input)
+
+    def _communicate(self, input):
+        # identical to original... all the heavy lifting is done
+        # in gevent.select.select
+        read_set = []
+        write_set = []
+        stdout = None # Return
+        stderr = None # Return
+
+        if self.stdin:
+            # Flush stdin buffer.
+            self.stdin.flush()
+            if input:
+                write_set.append(self.stdin)
+            else:
+                self.stdin.close()
+        if self.stdout:
+            read_set.append(self.stdout)
+            stdout = []
+        if self.stderr:
+            read_set.append(self.stderr)
+            stderr = []
+
+        input_offset = 0
+        while read_set or write_set:
+            try:
+                rlist, wlist, xlist = select.select(read_set, write_set, [])
+            except select.error, e:
+                if e.args[0] == errno.EINTR:
+                    continue
+                raise
+
+            if self.stdin in wlist:
+                # When select has indicated that the file is writable,
+                # we can write up to PIPE_BUF bytes without risk
+                # blocking.  POSIX defines PIPE_BUF >= 512
+                bytes_written = os.write(self.stdin.fileno(), buffer(input, input_offset, 512))
+                input_offset += bytes_written
+                if input_offset >= len(input):
+                    self.stdin.close()
+                    write_set.remove(self.stdin)
+
+            if self.stdout in rlist:
+                data = os.read(self.stdout.fileno(), 1024)
+                if data == "":
+                    self.stdout.close()
+                    read_set.remove(self.stdout)
+                stdout.append(data)
+
+            if self.stderr in rlist:
+                data = os.read(self.stderr.fileno(), 1024)
+                if data == "":
+                    self.stderr.close()
+                    read_set.remove(self.stderr)
+                stderr.append(data)
+
+        # All data exchanged.  Translate lists into strings.
+        if stdout is not None:
+            stdout = ''.join(stdout)
+        if stderr is not None:
+            stderr = ''.join(stderr)
+
+        # Translate newlines, if requested.  We cannot let the file
+        # object do the translation: It is based on stdio, which is
+        # impossible to combine with select (unless forcing no
+        # buffering).
+        if self.universal_newlines and hasattr(file, 'newlines'):
+            if stdout:
+                stdout = self._translate_newlines(stdout)
+            if stderr:
+                stderr = self._translate_newlines(stderr)
+
+        self.wait()
+        return (stdout, stderr)
+
+    def wait(self, check_interval=0.01):
+        # non-blocking, use hub.sleep
+        try:
+            while True:
+                status = self.poll()
+                if status >= 0:
+                    return status
+                hub.sleep(check_interval)
+        except OSError, e:
+            if e.errno == errno.ECHILD:
+                # no child process, this happens if the child process
+                # already died and has been cleaned up
+                return -1
+            else:
+                raise
\ No newline at end of file
diff --git a/x2go/mimetypes.py b/x2go/mimetypes.py
new file mode 100644
index 0000000..f46e6ee
--- /dev/null
+++ b/x2go/mimetypes.py
@@ -0,0 +1,281 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2010 by Mike Gabriel <m.gabriel at das-netzwerkteam.de>
+#
+# Python X2go 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 3 of the License, or
+# (at your option) any later version.
+#
+# Python X2go 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.
+
+"""\
+STILL UNDOCUMENTED
+
+"""
+__NAME__ = 'x2gomimetypes-pylib'
+
+# modules
+import sys, os, shutil, copy
+import subprocess
+import types
+import threading
+import gevent
+import inifiles
+import cStringIO
+import ConfigParser
+
+if sys.platform == 'win32':
+    import win32api
+
+
+# Python X2go modules
+import log
+import defaults
+# we hide the default values from epydoc (that's why we transform them to _UNDERSCORE variables)
+from defaults import LOCAL_HOME as _LOCAL_HOME
+from defaults import X2GO_CLIENT_ROOTDIR as _X2GO_CLIENT_ROOTDIR
+from defaults import X2GO_CLIENTPRINTING_DEFAULTS as _X2GO_CLIENTPRINTING_DEFAULTS
+from defaults import X2GO_PRINTING_CONFIGFILES as _X2GO_PRINTING_CONFIGFILES
+import utils
+import inifiles
+
+class X2goMIMETypeAction(object):
+
+    __name__ = 'MIME'
+    __description__ = 'Execute a command depending on an incoming file\'s MIME type'
+
+    def __init__(self, logger=None, loglevel=log.loglevel_DEFAULT):
+        """\
+        STILL UNDOCUMENTED
+
+        @param logger: you can pass an L{X2goLogger} object to the
+            L{X2goMIMETypeAction} constructor
+        @type logger: C{instance}
+        @param loglevel: if no L{X2goLogger} object has been supplied a new one will be
+            constructed with the given loglevel
+        @type loglevel: C{int}
+
+        """
+        if logger is None:
+            self.logger = log.X2goLogger(loglevel=loglevel)
+        else:
+            self.logger = copy.deepcopy(logger)
+        self.logger.tag = __NAME__
+
+    def do_execute(self, mime_file, mime_type_dir, ):
+        """\
+        Perform the defined print action (doing nothing in L{X2goPrintAction} parent class).
+
+        @param mime_file: name of the incoming file
+        @type mime_file: C{str}
+        @param mime_type_dir: location of the X2go client's spool directory for incoming MIME files
+        @type mime_type_dir: C{str}
+
+        """
+        if sys.platform == "win32":
+            self.logger('processing an incoming MIME file with Python\'s os.startfile(): %s' % mime_file, loglevel=log.loglevel_DEBUG)
+            os.startfile(mime_file)
+        else:
+            cmd_line = [ 'xdg-open', mime_file, ]
+            self.logger('processing an incoming MIME file with command: %s' % ' '.join(cmd_line), loglevel=log.loglevel_DEBUG)
+            p = subprocess.Popen(cmd_line, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=_PRINT_ENV)
+            # this is nasty!!!!
+            self.logger('giving PDF viewer 20s to get the PDF file %s loaded' % _hr_filename, loglevel=log.loglevel_DEBUG)
+            gevent.sleep(20)
+        os.remove(mime_file)
+
+
+class X2goMIMETypeQueue(threading.Thread):
+    """\
+    STILL UNDOCUMENTED
+
+    """
+    print_action = None
+
+    spooldir = None
+    active_jobs = {}
+    job_history = []
+
+    def __init__(self, logger=None, loglevel=log.loglevel_DEFAULT):
+        """\
+        STILL UNDOCUMENTED
+
+        @param logger: you can pass an L{X2goLogger} object to the
+            L{X2goProxy} constructor
+        @type logger: C{instance}
+        @param loglevel: if no L{X2goLogger} object has been supplied a new one will be
+            constructed with the given loglevel
+        @type loglevel: C{int}
+
+        """
+        if logger is None:
+            self.logger = log.X2goLogger(loglevel=loglevel)
+        else:
+            self.logger = copy.deepcopy(logger)
+        self.logger.tag = __NAME__
+
+        threading.Thread.__init__(self)
+        self.daemon = True
+        self._accept_jobs = True
+
+    def __del__(self):
+        self.stop_thread()
+
+    def pause(self):
+        """\
+        Prevent acceptance of new incoming MIME type files. The processing of MIME type files
+        that are currently still active will be completed, though.
+
+        """
+        if self._accept_jobs == True:
+            self._accept_jobs = False
+            self.logger('paused thread: %s' % repr(self), loglevel=log.loglevel_DEBUG)
+
+    def resume(self):
+        """\
+        Resume operation of the X2go MIME type thread and continue accepting new incoming 
+        MIME type files.
+
+        """
+        if self._accept_jobs == False:
+            self._accept_jobs = True
+            self.logger('resumed thread: %s' % repr(self), loglevel=log.loglevel_DEBUG)
+
+    def stop_thread(self):
+        """\
+        Stops this L{X2goMIMETypeQueue} thread completely.
+
+        """
+        self.pause()
+        self._keepalive = False
+        self.logger('stopping thread: %s' % repr(self), loglevel=log.loglevel_DEBUG)
+
+    @property
+    def _incoming_mime_files(self):
+
+        l = os.listdir(self.mime_type_dir)
+        mime_files = []
+        for _job_file in job_files:
+            j = open(os.path.join(self.spool_dir, _job_file), 'r')
+            content = j.read()
+            (pdf_filename, job_title) = content.split('\n')[0:2]
+            j.close()
+            jobs.append((_job_file, pdf_filename, job_title))
+        return [ j for j in jobs if j[1] not in self.active_jobs.keys() ]
+
+    def set_print_action(self, print_action, **kwargs):
+        """\
+        Modify the print action of this L{X2goPrintQueue} thread during runtime. The 
+        change of print action will be valid for the next incoming print job.
+
+        """
+        if print_action in defaults.X2GO_PRINT_ACTIONS.keys():
+            print_action = defaults.X2GO_PRINT_ACTIONS[print_action]
+
+        if print_action in defaults.X2GO_PRINT_ACTIONS.values():
+            self.print_action = print_action(**kwargs)
+
+    def run(self):
+        """\
+        Start this L{X2goPrintQueue} thread...
+
+        """
+        self.logger('starting print queue thread: %s' % repr(self), loglevel=log.loglevel_DEBUG)
+
+        self._keepalive = True
+        while self._keepalive:
+
+            while self._accept_jobs:
+
+                if self._incoming_print_jobs:
+
+                    for _job in self._incoming_print_jobs:
+                        self.logger('incoming print job: %s' % _job[1], loglevel=log.loglevel_DEBUG)
+                        _new_printjob_thread = X2goPrintJob(target=x2go_printjob_handler,
+                                                            kwargs={ 
+                                                            'job_file': _job[0],
+                                                            'pdf_file': _job[1],
+                                                            'job_title': _job[2],
+                                                            'print_action': self.print_action,
+                                                            'parent_thread': self, 
+                                                            'logger': self.logger, 
+                                                          }
+                                                  )
+                        self.active_jobs['%s' % _job[1]] = _new_printjob_thread
+                        _new_printjob_thread.start()
+
+                gevent.sleep(3)
+
+            gevent.sleep(1)
+
+
+def x2go_printjob_handler(job_file=None, pdf_file=None, job_title=None, print_action=None, parent_thread=None, logger=None, ):
+    """\
+    This function is called as a handler function for each incoming X2go print job 
+    represented by the class L{X2goPrintJob}.
+
+    The handler function will (re-)read the »printing« configuration file (if no
+    explicit C{print_action} is passed to this function...). It then will
+    execute the C{<print_action>.do_print()} command.
+
+    @param pdf_file: PDF file name as placed in to the X2go spool directory
+    @type pdf_file: C{str}
+    @param job_title: human readable print job title
+    @type job_title: C{str}
+    @param print_action: an instance of either of the possible C{X2goPrintActionXXX} classes
+    @type print_action: C{X2goPrintActionXXX} nstance
+    @param parent_thread: the L{X2goPrintQueue} thread that actually created this handler's L{X2goPrintJob} instance
+    @type parent_thread: C{instance}
+    @param logger: the L{X2goPrintQueue}'s logging instance
+    @type logger: C{instance}
+
+    """
+    if print_action is None:
+        _printing = X2goClientPrinting(logger=logger)
+        print_action = _printing.print_action
+
+    logger('action for printing is: %s' % print_action, loglevel=log.loglevel_DEBUG)
+    print_action.do_print(pdf_file=os.path.join(parent_thread.spool_dir, pdf_file),
+                          job_title=job_title,
+                          spool_dir=parent_thread.spool_dir,
+                         )
+
+    logger('removing print job files for %s' % pdf_file, loglevel=log.loglevel_DEBUG)
+    os.remove(os.path.join(parent_thread.spool_dir, job_file))
+    os.remove(os.path.join(parent_thread.spool_dir, pdf_file))
+
+    del parent_thread.active_jobs['%s' % pdf_file]
+    parent_thread.job_history.append(pdf_file)
+
+
+class X2goPrintJob(threading.Thread):
+    """\
+    For each X2go print job we create a sub-thread that let's 
+    the print job be processed in the background.
+
+    As a handler for this class the function L{x2go_printjob_handler()} 
+    is used.
+
+    """
+    def __init__(self, **kwargs):
+        """\
+        Construct the X2go print job thread...
+
+        All parameters (**kwargs) are passed through to the constructor
+        of C{threading.Thread()}.
+
+        """
+        threading.Thread.__init__(self, **kwargs)
+        self.daemon = True
+
+
diff --git a/x2go/xserver.py b/x2go/xserver.py
new file mode 100644
index 0000000..e72a0bf
--- /dev/null
+++ b/x2go/xserver.py
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2010 by Mike Gabriel <m.gabriel at das-netzwerkteam.de>
+#
+# Python X2go 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 3 of the License, or
+# (at your option) any later version.
+#
+# Python X2go 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.
+#
+# This code was initially written by:
+#       2010 Dick Kniep <dick.kniep at lindix.nl>
+#
+# Other contributors:
+#       none so far
+
+import os
+import gevent_subprocess as subprocess
+
+__NAME__ = 'x2gosettings-pylib'
+
+# modules
+import os
+import threading
+
+# Python X2go modules
+import log
+from defaults import X2GO_XCONFIG_CONFIGFILES
+from defaults import X2GO_CLIENTXCONFIG_DEFAULTS
+import inifiles
+
+
+class X2goClientXConfig(inifiles.X2goIniFile):
+    """\
+    Configuration file based XServer startup settings for X2goClient instances.
+
+    This class is needed for Windows systems and (maybe soon) for Unix desktops using Wayland.
+
+    """
+    defaultValues = X2GO_CLIENTXCONFIG_DEFAULTS
+
+    def __init__(self, config_files=X2GO_XCONFIG_CONFIGFILES, defaults=None, logger=None, loglevel=log.loglevel_DEFAULT):
+        """\
+        Constructs an L{X2goClientXConfig} instance. This is normally done by an L{X2goClient} instance.
+        You can retrieve this L{X2goClientXConfig} instance with the C{X2goClient.get_client_xconfig()} 
+        method.
+
+        On construction the L{X2goClientXConfig} instance is filled with values from the configuration files::
+
+            /etc/x2goclient/xconfig
+            ~/.x2goclient/xconfig
+
+        The files are read in the specified order and config options of both files are merged. Options 
+        set in the user configuration file (C{~/.x2goclient/xconfig}) override global options set in
+        C{/etc/x2goclient/xconfig}.
+
+        """
+        inifiles.X2goIniFile.__init__(self, config_files, defaults=defaults, logger=logger, loglevel=loglevel)
+
+
+class X2goXServer(threading.Thread):
+    """
+    This routine will start an XServer if it is not running 
+    already
+    """
+
+    def __init__(self, XServerParms):
+
+        processname = XServerParms.binary
+        for line in os.popen("ps xa"):
+            fields = line.split()
+            pid = fields[0]
+            process = fields[4]
+
+            if process.find(XServerParms.binary) > 0:
+                # XServer is already running
+                return
+
+            p = subprocess.Popen([XServerParms.binary,XServerParms.parameters], shell=True)
+            sts = os.waitpid(p.pid, 0)[1]
+


hooks/post-receive
-- 
python-x2go.git (Python X2Go Client API)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "python-x2go.git" (Python X2Go Client API).




More information about the x2go-commits mailing list