Hello community,
here is the log from the commit of package python-PyVirtualDisplay for
openSUSE:Factory checked in at 2020-03-08 22:22:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-PyVirtualDisplay (Old)
and /work/SRC/openSUSE:Factory/.python-PyVirtualDisplay.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-PyVirtualDisplay"
Sun Mar 8 22:22:04 2020 rev:14 rq:780800 version:0.2.5
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-PyVirtualDisplay/python-PyVirtualDisplay.changes
2019-11-22 10:20:56.013339280 +0100
+++
/work/SRC/openSUSE:Factory/.python-PyVirtualDisplay.new.26092/python-PyVirtualDisplay.changes
2020-03-08 22:22:06.320002230 +0100
@@ -1,0 +2,6 @@
+Mon Mar 2 04:20:32 UTC 2020 - Steve Kowalik <[email protected]>
+
+- Update to 0.2.5:
+ * No changelog available
+
+-------------------------------------------------------------------
Old:
----
PyVirtualDisplay-0.2.1.tar.gz
New:
----
PyVirtualDisplay-0.2.5.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-PyVirtualDisplay.spec ++++++
--- /var/tmp/diff_new_pack.oxUnso/_old 2020-03-08 22:22:06.916002598 +0100
+++ /var/tmp/diff_new_pack.oxUnso/_new 2020-03-08 22:22:06.916002598 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-PyVirtualDisplay
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%bcond_without test
Name: python-PyVirtualDisplay
-Version: 0.2.1
+Version: 0.2.5
Release: 0
Summary: Python wrapper for Xvfb, Xephyr and Xvnc
License: BSD-2-Clause
++++++ PyVirtualDisplay-0.2.1.tar.gz -> PyVirtualDisplay-0.2.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.2.1/PKG-INFO
new/PyVirtualDisplay-0.2.5/PKG-INFO
--- old/PyVirtualDisplay-0.2.1/PKG-INFO 2016-10-03 19:10:29.000000000 +0200
+++ new/PyVirtualDisplay-0.2.5/PKG-INFO 2019-12-18 18:19:39.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: PyVirtualDisplay
-Version: 0.2.1
+Version: 0.2.5
Summary: python wrapper for Xvfb, Xephyr and Xvnc
Home-page: https://github.com/ponty/pyvirtualdisplay
Author: ponty
@@ -13,15 +13,13 @@
* documentation: http://pyvirtualdisplay.readthedocs.org
* PYPI: https://pypi.python.org/pypi/pyvirtualdisplay
- |Travis| |Coveralls| |Latest Version| |Supported Python versions|
|License| |Downloads| |Code Health| |Documentation|
+ |Travis| |Coveralls| |Latest Version| |Supported Python versions|
|License| |Code Health| |Documentation|
Features:
- python wrapper
- - supported python versions: 2.6, 2.7, 3.3, 3.4, 3.5
+ - supported python versions: 2.7, 3.5, 3.6, 3.7, 3.8
- back-ends: Xvfb_, Xephyr_, Xvnc_
- .. warning:: at least one back-end should be installed
-
Known problems:
- only a few back-end options are supported
@@ -57,7 +55,6 @@
* optional: pyscreenshot_ and PIL_ should be installed for
``smartdisplay`` submodule
* install the program::
- # as root
pip install pyvirtualdisplay
Ubuntu 14.04
@@ -79,7 +76,6 @@
::
- # as root
pip uninstall pyvirtualdisplay
@@ -99,7 +95,9 @@
from pyvirtualdisplay import Display
if __name__ == "__main__":
+ # start Xephyr
Display(visible=1, size=(320, 240)).start()
+ # start Gnumeric
EasyProcess('gnumeric').start()
#-#
@@ -125,12 +123,12 @@
with SmartDisplay(visible=0, bgcolor='black') as disp:
with EasyProcess('xmessage hello'):
img = disp.waitgrab()
-
-
+
+
img.show()
#-#
-
+
Image:
.. #-- screenshot('python -m
pyvirtualdisplay.examples.screenshot3','screenshot3.png') --#
@@ -166,7 +164,6 @@
``pyvirtualdisplay.xauth.NotFoundError`` is raised.
- .. _setuptools: http://peak.telecommunity.com/DevCenter/EasyInstall
.. _pip: http://pip.openplans.org/
.. _Xvfb: http://en.wikipedia.org/wiki/Xvfb
.. _Xephyr: http://en.wikipedia.org/wiki/Xephyr
@@ -185,8 +182,6 @@
:target: https://pypi.python.org/pypi/PyVirtualDisplay/
.. |License| image:: https://img.shields.io/pypi/l/PyVirtualDisplay.svg
:target: https://pypi.python.org/pypi/PyVirtualDisplay/
- .. |Downloads| image::
https://img.shields.io/pypi/dm/PyVirtualDisplay.svg
- :target: https://pypi.python.org/pypi/PyVirtualDisplay/
.. |Code Health| image::
https://landscape.io/github/ponty/PyVirtualDisplay/master/landscape.svg?style=flat
:target: https://landscape.io/github/ponty/PyVirtualDisplay/master
.. |Documentation| image::
https://readthedocs.org/projects/pyvirtualdisplay/badge/?version=latest
@@ -199,9 +194,9 @@
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyVirtualDisplay-0.2.1/PyVirtualDisplay.egg-info/PKG-INFO
new/PyVirtualDisplay-0.2.5/PyVirtualDisplay.egg-info/PKG-INFO
--- old/PyVirtualDisplay-0.2.1/PyVirtualDisplay.egg-info/PKG-INFO
2016-10-03 19:10:28.000000000 +0200
+++ new/PyVirtualDisplay-0.2.5/PyVirtualDisplay.egg-info/PKG-INFO
2019-12-18 18:19:39.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: PyVirtualDisplay
-Version: 0.2.1
+Version: 0.2.5
Summary: python wrapper for Xvfb, Xephyr and Xvnc
Home-page: https://github.com/ponty/pyvirtualdisplay
Author: ponty
@@ -13,15 +13,13 @@
* documentation: http://pyvirtualdisplay.readthedocs.org
* PYPI: https://pypi.python.org/pypi/pyvirtualdisplay
- |Travis| |Coveralls| |Latest Version| |Supported Python versions|
|License| |Downloads| |Code Health| |Documentation|
+ |Travis| |Coveralls| |Latest Version| |Supported Python versions|
|License| |Code Health| |Documentation|
Features:
- python wrapper
- - supported python versions: 2.6, 2.7, 3.3, 3.4, 3.5
+ - supported python versions: 2.7, 3.5, 3.6, 3.7, 3.8
- back-ends: Xvfb_, Xephyr_, Xvnc_
- .. warning:: at least one back-end should be installed
-
Known problems:
- only a few back-end options are supported
@@ -57,7 +55,6 @@
* optional: pyscreenshot_ and PIL_ should be installed for
``smartdisplay`` submodule
* install the program::
- # as root
pip install pyvirtualdisplay
Ubuntu 14.04
@@ -79,7 +76,6 @@
::
- # as root
pip uninstall pyvirtualdisplay
@@ -99,7 +95,9 @@
from pyvirtualdisplay import Display
if __name__ == "__main__":
+ # start Xephyr
Display(visible=1, size=(320, 240)).start()
+ # start Gnumeric
EasyProcess('gnumeric').start()
#-#
@@ -125,12 +123,12 @@
with SmartDisplay(visible=0, bgcolor='black') as disp:
with EasyProcess('xmessage hello'):
img = disp.waitgrab()
-
-
+
+
img.show()
#-#
-
+
Image:
.. #-- screenshot('python -m
pyvirtualdisplay.examples.screenshot3','screenshot3.png') --#
@@ -166,7 +164,6 @@
``pyvirtualdisplay.xauth.NotFoundError`` is raised.
- .. _setuptools: http://peak.telecommunity.com/DevCenter/EasyInstall
.. _pip: http://pip.openplans.org/
.. _Xvfb: http://en.wikipedia.org/wiki/Xvfb
.. _Xephyr: http://en.wikipedia.org/wiki/Xephyr
@@ -185,8 +182,6 @@
:target: https://pypi.python.org/pypi/PyVirtualDisplay/
.. |License| image:: https://img.shields.io/pypi/l/PyVirtualDisplay.svg
:target: https://pypi.python.org/pypi/PyVirtualDisplay/
- .. |Downloads| image::
https://img.shields.io/pypi/dm/PyVirtualDisplay.svg
- :target: https://pypi.python.org/pypi/PyVirtualDisplay/
.. |Code Health| image::
https://landscape.io/github/ponty/PyVirtualDisplay/master/landscape.svg?style=flat
:target: https://landscape.io/github/ponty/PyVirtualDisplay/master
.. |Documentation| image::
https://readthedocs.org/projects/pyvirtualdisplay/badge/?version=latest
@@ -199,9 +194,9 @@
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyVirtualDisplay-0.2.1/PyVirtualDisplay.egg-info/SOURCES.txt
new/PyVirtualDisplay-0.2.5/PyVirtualDisplay.egg-info/SOURCES.txt
--- old/PyVirtualDisplay-0.2.1/PyVirtualDisplay.egg-info/SOURCES.txt
2016-10-03 19:10:29.000000000 +0200
+++ new/PyVirtualDisplay-0.2.5/PyVirtualDisplay.egg-info/SOURCES.txt
2019-12-18 18:19:39.000000000 +0100
@@ -11,10 +11,12 @@
PyVirtualDisplay.egg-info/top_level.txt
docs/.gitignore
docs/__init__.py
+docs/__init__.pyc
docs/api.rst
docs/conf.py
docs/index.rst
docs/screenshot.py
+docs/screenshot.pyc
docs/struct.rst
docs/_img/lowres.png
docs/_img/screenshot3.png
@@ -22,6 +24,7 @@
pyvirtualdisplay/about.py
pyvirtualdisplay/abstractdisplay.py
pyvirtualdisplay/display.py
+pyvirtualdisplay/randomize.py
pyvirtualdisplay/smartdisplay.py
pyvirtualdisplay/xauth.py
pyvirtualdisplay/xephyr.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.2.1/README.rst
new/PyVirtualDisplay-0.2.5/README.rst
--- old/PyVirtualDisplay-0.2.1/README.rst 2016-10-03 19:06:46.000000000
+0200
+++ new/PyVirtualDisplay-0.2.5/README.rst 2019-12-18 18:00:14.000000000
+0100
@@ -5,15 +5,13 @@
* documentation: http://pyvirtualdisplay.readthedocs.org
* PYPI: https://pypi.python.org/pypi/pyvirtualdisplay
-|Travis| |Coveralls| |Latest Version| |Supported Python versions| |License|
|Downloads| |Code Health| |Documentation|
+|Travis| |Coveralls| |Latest Version| |Supported Python versions| |License|
|Code Health| |Documentation|
Features:
- python wrapper
- - supported python versions: 2.6, 2.7, 3.3, 3.4, 3.5
+ - supported python versions: 2.7, 3.5, 3.6, 3.7, 3.8
- back-ends: Xvfb_, Xephyr_, Xvnc_
-.. warning:: at least one back-end should be installed
-
Known problems:
- only a few back-end options are supported
@@ -49,7 +47,6 @@
* optional: pyscreenshot_ and PIL_ should be installed for ``smartdisplay``
submodule
* install the program::
- # as root
pip install pyvirtualdisplay
Ubuntu 14.04
@@ -71,7 +68,6 @@
::
- # as root
pip uninstall pyvirtualdisplay
@@ -91,7 +87,9 @@
from pyvirtualdisplay import Display
if __name__ == "__main__":
+ # start Xephyr
Display(visible=1, size=(320, 240)).start()
+ # start Gnumeric
EasyProcess('gnumeric').start()
#-#
@@ -117,12 +115,12 @@
with SmartDisplay(visible=0, bgcolor='black') as disp:
with EasyProcess('xmessage hello'):
img = disp.waitgrab()
-
-
+
+
img.show()
#-#
-
+
Image:
.. #-- screenshot('python -m
pyvirtualdisplay.examples.screenshot3','screenshot3.png') --#
@@ -158,7 +156,6 @@
``pyvirtualdisplay.xauth.NotFoundError`` is raised.
-.. _setuptools: http://peak.telecommunity.com/DevCenter/EasyInstall
.. _pip: http://pip.openplans.org/
.. _Xvfb: http://en.wikipedia.org/wiki/Xvfb
.. _Xephyr: http://en.wikipedia.org/wiki/Xephyr
@@ -177,8 +174,6 @@
:target: https://pypi.python.org/pypi/PyVirtualDisplay/
.. |License| image:: https://img.shields.io/pypi/l/PyVirtualDisplay.svg
:target: https://pypi.python.org/pypi/PyVirtualDisplay/
-.. |Downloads| image:: https://img.shields.io/pypi/dm/PyVirtualDisplay.svg
- :target: https://pypi.python.org/pypi/PyVirtualDisplay/
.. |Code Health| image::
https://landscape.io/github/ponty/PyVirtualDisplay/master/landscape.svg?style=flat
:target: https://landscape.io/github/ponty/PyVirtualDisplay/master
.. |Documentation| image::
https://readthedocs.org/projects/pyvirtualdisplay/badge/?version=latest
Binary files old/PyVirtualDisplay-0.2.1/docs/__init__.pyc and
new/PyVirtualDisplay-0.2.5/docs/__init__.pyc differ
Binary files old/PyVirtualDisplay-0.2.1/docs/screenshot.pyc and
new/PyVirtualDisplay-0.2.5/docs/screenshot.pyc differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/about.py
new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/about.py
--- old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/about.py 2016-10-03
19:08:57.000000000 +0200
+++ new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/about.py 2019-12-18
18:03:16.000000000 +0100
@@ -1 +1 @@
-__version__ = '0.2.1'
+__version__ = '0.2.5'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/abstractdisplay.py
new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/abstractdisplay.py
--- old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/abstractdisplay.py
2016-10-03 19:06:46.000000000 +0200
+++ new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/abstractdisplay.py
2019-12-18 18:00:14.000000000 +0100
@@ -1,10 +1,15 @@
-from easyprocess import EasyProcess
+from easyprocess import EasyProcess, EasyProcessError
import fnmatch
import logging
import os
import time
import tempfile
from threading import Lock
+import select
+try:
+ import fcntl
+except ImportError:
+ fcntl = None
from pyvirtualdisplay import xauth
@@ -12,35 +17,47 @@
log = logging.getLogger(__name__)
-# TODO: not perfect
-# randomize to avoid possible conflicts
-RANDOMIZE_DISPLAY_NR = False
-if RANDOMIZE_DISPLAY_NR:
- import random
- random.seed()
-
MIN_DISPLAY_NR = 1000
USED_DISPLAY_NR_LIST=[]
+X_START_TIMEOUT = 10
+X_START_TIME_STEP = 0.1
+X_START_WAIT = 0.1
+
+class XStartTimeoutError(Exception):
+ pass
+
class AbstractDisplay(EasyProcess):
'''
Common parent for Xvfb and Xephyr
'''
-
- def __init__(self, use_xauth=False):
- mutex.acquire()
- try:
- self.display = self.search_for_display()
+ def __init__(self, use_xauth=False, check_startup=False, randomizer=None):
+ with mutex:
+ self.display = self.search_for_display(randomizer=randomizer)
while self.display in USED_DISPLAY_NR_LIST:
self.display+=1
+
USED_DISPLAY_NR_LIST.append(self.display)
- finally:
- mutex.release()
- if xauth and not xauth.is_installed():
+
+ if use_xauth and not xauth.is_installed():
raise xauth.NotFoundError()
+
self.use_xauth = use_xauth
self._old_xauth = None
self._xauth_filename = None
+ self.check_startup = check_startup
+ if check_startup and not fcntl:
+ self.check_startup = False
+ log.warning("fcntl module can't be imported, 'check_startup'
parameter has been disabled")
+ log.warning("fnctl module does not exist on Windows")
+ if self.check_startup:
+ rp, wp = os.pipe()
+ fcntl.fcntl(rp, fcntl.F_SETFD, fcntl.FD_CLOEXEC)
+ #to properly allow to inherit fds to subprocess on
+ #python 3.2+ the easyprocess needs small fix..
+ fcntl.fcntl(wp, fcntl.F_SETFD, 0)
+ self.check_startup_fd = wp
+ self._check_startup_fd = rp
EasyProcess.__init__(self, self._cmd)
@property
@@ -61,17 +78,18 @@
ls = [p for p in ls if os.path.isfile(p)]
return ls
- def search_for_display(self):
+ def search_for_display(self, randomizer=None):
# search for free display
- ls = map(
- lambda x: int(x.split('X')[1].split('-')[0]), self.lock_files())
+ ls = list(map(
+ lambda x: int(x.split('X')[1].split('-')[0]), self.lock_files()))
if len(ls):
display = max(MIN_DISPLAY_NR, max(ls) + 3)
else:
display = MIN_DISPLAY_NR
- if RANDOMIZE_DISPLAY_NR:
- display += random.randint(0, 100)
+ if randomizer:
+ display = randomizer.generate()
+
return display
def redirect_display(self, on):
@@ -105,9 +123,52 @@
self.old_display_var = os.environ.get('DISPLAY', None)
self.redirect_display(True)
+
# wait until X server is active
- # TODO: better method
- time.sleep(0.1)
+ start_time = time.time()
+ if self.check_startup:
+ rp = self._check_startup_fd
+ display_check = None
+ rlist, wlist, xlist = select.select((rp,), (), (), X_START_TIMEOUT)
+ if rlist:
+ display_check = os.read(rp, 10).rstrip()
+ else:
+ msg = 'No display number returned by X server'
+ raise XStartTimeoutError(msg)
+ dnbs = str(self.display)
+ if bytes != str:
+ dnbs = bytes(dnbs, 'ascii')
+ if display_check != dnbs:
+ msg = 'Display number "%s" not returned by X server' +
str(display_check)
+ raise XStartTimeoutError(msg % self.display)
+
+ d = self.new_display_var
+ ok = False
+ while True:
+ try:
+ xdpyinfo = EasyProcess('xdpyinfo')
+ xdpyinfo.enable_stdout_log = False
+ xdpyinfo.enable_stderr_log = False
+ exit_code = xdpyinfo.call().return_code
+ except EasyProcessError:
+ log.warning('xdpyinfo was not found, X start can not be
checked! Please install xdpyinfo!')
+ time.sleep(X_START_WAIT) # old method
+ ok = True
+ break
+
+ if exit_code != 0:
+ pass
+ else:
+ log.info('Successfully started X with display "%s".', d)
+ ok = True
+ break
+
+ if time.time() - start_time >= X_START_TIMEOUT:
+ break
+ time.sleep(X_START_TIME_STEP)
+ if not ok:
+ msg = 'Failed to start X on display "%s" (xdpyinfo check failed).'
+ raise XStartTimeoutError(msg % d)
return self
def stop(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/display.py
new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/display.py
--- old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/display.py 2016-10-03
19:06:46.000000000 +0200
+++ new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/display.py 2019-06-23
18:16:23.000000000 +0200
@@ -15,7 +15,7 @@
:param backend: 'xvfb', 'xvnc' or 'xephyr', ignores ``visible``
:param xauth: If a Xauthority file should be created.
'''
- def __init__(self, backend=None, visible=False, size=(1024, 768),
color_depth=24, bgcolor='black', use_xauth=False, **kwargs):
+ def __init__(self, backend=None, visible=False, size=(1024, 768),
color_depth=24, bgcolor='black', use_xauth=False, check_startup=False,
randomizer=None, **kwargs):
self.color_depth = color_depth
self.size = size
self.bgcolor = bgcolor
@@ -35,8 +35,9 @@
size=size,
color_depth=color_depth,
bgcolor=bgcolor,
+ randomizer=randomizer,
**kwargs)
- AbstractDisplay.__init__(self, use_xauth=use_xauth)
+ AbstractDisplay.__init__(self, use_xauth=use_xauth,
check_startup=check_startup, randomizer=randomizer)
@property
def display_class(self):
@@ -56,4 +57,7 @@
@property
def _cmd(self):
self._obj.display = self.display
+ self._obj.check_startup = self.check_startup
+ if self.check_startup:
+ self._obj.check_startup_fd = self.check_startup_fd
return self._obj._cmd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/examples/lowres.py
new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/examples/lowres.py
--- old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/examples/lowres.py
2016-03-04 06:52:36.000000000 +0100
+++ new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/examples/lowres.py
2018-10-09 20:46:52.000000000 +0200
@@ -2,5 +2,7 @@
from pyvirtualdisplay import Display
if __name__ == "__main__":
+ # start Xephyr
Display(visible=1, size=(320, 240)).start()
+ # start Gnumeric
EasyProcess('gnumeric').start()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/randomize.py
new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/randomize.py
--- old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/randomize.py 1970-01-01
01:00:00.000000000 +0100
+++ new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/randomize.py 2019-05-26
20:43:56.000000000 +0200
@@ -0,0 +1,22 @@
+import random
+
+class Randomizer():
+ '''
+ Class to generate random display numbers between a minimum and maximum
+ value. Note that the maximum value can be exceeded if every value between
+ the generated and maximum value is already in use.
+ '''
+ def __init__(self, min_display_nr=1000, max_display_nr=1100):
+ self.min = min_display_nr
+ self.delta = max_display_nr - min_display_nr
+
+ random.seed()
+
+ def generate(self):
+ '''
+ Generate a random display number
+
+ :rtype: int
+ '''
+
+ return self.min + random.randint(0, self.delta)
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/xauth.py
new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/xauth.py
--- old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/xauth.py 2016-10-03
19:06:46.000000000 +0200
+++ new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/xauth.py 2019-12-18
18:00:14.000000000 +0100
@@ -2,7 +2,7 @@
import os
import hashlib
-import easyprocess
+from easyprocess import EasyProcess
class NotFoundError(Exception):
@@ -15,8 +15,11 @@
Return whether or not xauth is installed.
'''
try:
- easyprocess.EasyProcess(['xauth', '-h']).check_installed()
- except easyprocess.EasyProcessCheckInstalledError:
+ p = EasyProcess(['xauth', '-V'])
+ p.enable_stdout_log = False
+ p.enable_stderr_log = False
+ p.call()
+ except Exception:
return False
else:
return True
@@ -34,4 +37,4 @@
'''
Call xauth with the given args.
'''
- easyprocess.EasyProcess(['xauth'] + list(args)).call()
+ EasyProcess(['xauth'] + list(args)).call()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/xephyr.py
new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/xephyr.py
--- old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/xephyr.py 2014-04-09
15:00:04.000000000 +0200
+++ new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/xephyr.py 2019-12-18
18:00:14.000000000 +0100
@@ -2,8 +2,6 @@
from pyvirtualdisplay.abstractdisplay import AbstractDisplay
PROGRAM = 'Xephyr'
-URL = None
-PACKAGE = 'xephyr'
class XephyrDisplay(AbstractDisplay):
@@ -12,7 +10,7 @@
Xephyr is an X server outputting to a window on a pre-existing X display
'''
- def __init__(self, size=(1024, 768), color_depth=24, bgcolor='black'):
+ def __init__(self, size=(1024, 768), color_depth=24, bgcolor='black',
randomizer=None):
'''
:param bgcolor: 'black' or 'white'
'''
@@ -22,12 +20,14 @@
self.screen = 0
self.process = None
self.display = None
- AbstractDisplay.__init__(self)
+ AbstractDisplay.__init__(self, randomizer=randomizer)
@classmethod
def check_installed(cls):
- EasyProcess([PROGRAM, '-help'], url=URL,
- ubuntu_package=PACKAGE).check_installed()
+ p = EasyProcess([PROGRAM, '-help'])
+ p.enable_stdout_log = False
+ p.enable_stderr_log = False
+ p.call()
@property
def _cmd(self):
@@ -35,6 +35,9 @@
dict(black='-br', white='-wr')[self.bgcolor],
'-screen',
'x'.join(map(str, list(self.size) + [self.color_depth])),
+ '-resizeable',
self.new_display_var,
]
+ if self.check_startup:
+ cmd += ['-displayfd', str(self.check_startup_fd)]
return cmd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/xvfb.py
new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/xvfb.py
--- old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/xvfb.py 2016-03-04
06:52:36.000000000 +0100
+++ new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/xvfb.py 2019-12-18
18:00:14.000000000 +0100
@@ -5,8 +5,6 @@
log = logging.getLogger(__name__)
PROGRAM = 'Xvfb'
-URL = None
-PACKAGE = 'xvfb'
class XvfbDisplay(AbstractDisplay):
@@ -17,11 +15,12 @@
hardware and no physical input devices. It emulates a dumb
framebuffer using virtual memory.
'''
- def __init__(self, size=(1024, 768), color_depth=24, bgcolor='black',
fbdir=None):
+ def __init__(self, size=(1024, 768), color_depth=24, bgcolor='black',
fbdir=None, dpi=None, randomizer=None):
'''
:param bgcolor: 'black' or 'white'
:param fbdir: If non-null, the virtual screen is memory-mapped
to a file in the given directory ('-fbdir' option)
+ :param dpi: screen resolution in dots per inch if not None
'''
self.screen = 0
self.size = size
@@ -30,12 +29,15 @@
self.bgcolor = bgcolor
self.display = None
self.fbdir = fbdir
- AbstractDisplay.__init__(self)
+ self.dpi = dpi
+ AbstractDisplay.__init__(self, randomizer=randomizer)
@classmethod
def check_installed(cls):
- EasyProcess([PROGRAM, '-help'], url=URL,
- ubuntu_package=PACKAGE).check_installed()
+ p = EasyProcess([PROGRAM, '-help'])
+ p.enable_stdout_log = False
+ p.enable_stderr_log = False
+ p.call()
@property
def _cmd(self):
@@ -50,4 +52,8 @@
]
if self.fbdir:
cmd += ['-fbdir', self.fbdir]
+ if self.dpi is not None:
+ cmd += ['-dpi', str(self.dpi)]
+ if self.check_startup:
+ cmd += ['-displayfd', str(self.check_startup_fd)]
return [PROGRAM] + cmd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/xvnc.py
new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/xvnc.py
--- old/PyVirtualDisplay-0.2.1/pyvirtualdisplay/xvnc.py 2014-04-09
15:00:04.000000000 +0200
+++ new/PyVirtualDisplay-0.2.5/pyvirtualdisplay/xvnc.py 2019-12-18
18:00:14.000000000 +0100
@@ -5,18 +5,17 @@
log = logging.getLogger(__name__)
PROGRAM = 'Xvnc'
-URL = None
-PACKAGE = 'tightvncserver'
class XvncDisplay(AbstractDisplay):
'''
Xvnc wrapper
'''
- def __init__(self, size=(1024, 768), color_depth=24, bgcolor='black',
rfbport=5900):
+ def __init__(self, size=(1024, 768), color_depth=24, bgcolor='black',
rfbport=5900, rfbauth=None, randomizer=None):
'''
:param bgcolor: 'black' or 'white'
:param rfbport: Specifies the TCP port on which Xvnc listens for
connections from viewers (the protocol used in VNC is called RFB - "remote
framebuffer"). The default is 5900 plus the display number.
+ :param rfbauth: Specifies the file containing the password used to
authenticate viewers.
'''
self.screen = 0
self.size = size
@@ -25,19 +24,28 @@
self.bgcolor = bgcolor
self.display = None
self.rfbport = rfbport
- AbstractDisplay.__init__(self)
+ self.rfbauth = rfbauth
+ AbstractDisplay.__init__(self, randomizer=randomizer)
@classmethod
def check_installed(cls):
- EasyProcess([PROGRAM, '-help'], url=URL,
- ubuntu_package=PACKAGE).check_installed()
+ p = EasyProcess([PROGRAM, '-help'])
+ p.enable_stdout_log = False
+ p.enable_stderr_log = False
+ p.call()
@property
def _cmd(self):
cmd = [PROGRAM,
'-depth', str(self.color_depth),
'-geometry', '%dx%d' % (self.size[0], self.size[1]),
- '-rfbport', str(self.rfbport),
- self.new_display_var,
- ]
+ '-rfbport', str(self.rfbport)]
+
+ if self.rfbauth:
+ cmd += ['-rfbauth', str(self.rfbauth)]
+
+ cmd += [self.new_display_var,]
+
+ if self.check_startup:
+ cmd += ['-displayfd', str(self.check_startup_fd)]
return cmd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.2.1/setup.cfg
new/PyVirtualDisplay-0.2.5/setup.cfg
--- old/PyVirtualDisplay-0.2.1/setup.cfg 2016-10-03 19:10:29.000000000
+0200
+++ new/PyVirtualDisplay-0.2.5/setup.cfg 2019-12-18 18:19:39.000000000
+0100
@@ -1,5 +1,4 @@
[egg_info]
tag_build =
tag_date = 0
-tag_svn_revision = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.2.1/setup.py
new/PyVirtualDisplay-0.2.5/setup.py
--- old/PyVirtualDisplay-0.2.1/setup.py 2016-03-04 06:52:36.000000000 +0100
+++ new/PyVirtualDisplay-0.2.5/setup.py 2019-12-18 18:00:14.000000000 +0100
@@ -35,19 +35,12 @@
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 2',
- # "Programming Language :: Python :: 2.3",
- # "Programming Language :: Python :: 2.4",
- #"Programming Language :: Python :: 2.5",
- 'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
- # "Programming Language :: Python :: 2 :: Only",
- "Programming Language :: Python :: 3",
-# 'Programming Language :: Python :: 3.0',
- # "Programming Language :: Python :: 3.1",
-# 'Programming Language :: Python :: 3.2',
- 'Programming Language :: Python :: 3.3',
- 'Programming Language :: Python :: 3.4',
+ "Programming Language :: Python :: 3",
'Programming Language :: Python :: 3.5',
+ 'Programming Language :: Python :: 3.6',
+ 'Programming Language :: Python :: 3.7',
+ 'Programming Language :: Python :: 3.8',
]
install_requires = ['EasyProcess']