[sabayon] Find a free X display without using TCP sockets
- From: Federico Mena Quintero <federico src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [sabayon] Find a free X display without using TCP sockets
- Date: Fri, 21 Aug 2009 19:04:01 +0000 (UTC)
commit 2b059fcc8ae47cdd291050f6ee4ae3fb4f70dbf4
Author: Scott Balneaves <sbalneav alburg net>
Date: Fri Aug 21 14:03:08 2009 -0500
Find a free X display without using TCP sockets
X servers in some distributions don't have TCP enabled. We can simply try
to create a gtk.gdk.Display and see if it fails; this will use Unix sockets
automatically.
Signed-off-by: Federico Mena Quintero <federico novell com>
lib/protosession.py | 49 ++++++-------------------------------------------
1 files changed, 6 insertions(+), 43 deletions(-)
---
diff --git a/lib/protosession.py b/lib/protosession.py
index 899ed90..cd91a69 100644
--- a/lib/protosession.py
+++ b/lib/protosession.py
@@ -96,57 +96,20 @@ def clobber_user_processes (username):
def find_free_display ():
def is_display_free (display_number):
- # First make sure we get CONNREFUSED connecting
- # to port 6000 + display_number
- refused = False
- sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
try:
- sock.connect (("127.0.0.1", 6000 + display_number))
- except socket.error, (err, errstr):
- if err == errno.ECONNREFUSED:
- refused = True
-
- sock.close ()
- if not refused:
+ d = gtk.gdk.Display (":%d.0" % display_number)
+ d.close ()
return False
-
- # Now make sure either that the lock file doesn't exist or
- # that the server specified in the lock file isn't running
- lock_file = "/tmp/.X%d-lock" % display_number
- if os.path.exists (lock_file):
- f = file (lock_file, "r")
- try:
- pid = int (f.read ())
- except ValueError:
- return False
-
- process_exists = True
- try:
- os.kill (pid, 0)
- except os.error, (err, errstr):
- if err == errno.ESRCH:
- process_exists = False
- if process_exists:
- return False
-
- os.remove (lock_file)
-
- socket_file = "/tmp/.X11-unix/X%d" % display_number
- if os.path.exists (socket_file):
- os.remove (socket_file)
-
- return True
+ except RuntimeError, e:
+ return True
display_number = 1
while display_number < 100:
if is_display_free (display_number):
- break
+ return display_number
display_number += 1
- if display_number == 100:
- raise ProtoSessionError, _("Unable to find a free X display")
-
- return display_number
+ raise ProtoSessionError, _("Unable to find a free X display")
#
# Everything beyond here gets run from sabayon-session
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]