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

X2Go dev team git-admin at x2go.org
Wed Jan 8 15:29:12 CET 2014


The branch, build-baikal 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