source: admin-center/trunk/fuentes/admin-center.install/usr/share/n4d/python-plugins/RemoteWebGui.py @ 3064

Last change on this file since 3064 was 3064, checked in by joamuran, 3 years ago

wip

File size: 2.9 KB
Line 
1import os
2import subprocess
3import socket
4from time import sleep
5
6class RemoteWebGui:
7       
8        def __init__(self):
9               
10                pass
11               
12        #def init
13       
14        # CAl un get_first_xpra_port_free
15       
16        def get_first_display_free(self):
17                '''
18                Returns first Display free from 42
19                '''
20               
21                try:
22                        display=42
23                        while(os.path.isfile('/tmp/.X'+str(display)+'-lock')):
24                                display+=1
25                               
26                        return ":"+str(display)
27                except Exception as e:
28                        print "Captured: "+str(e)
29                        return {'status': False, 'msg':'[RemoteGuiManager] '+str(e)}
30                return ":42"
31               
32        #def get_first_display
33       
34        def get_first_free_port(self):
35                '''
36                Returns first opened port, starting by 10013
37                '''
38                port=10013;
39                sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM);
40               
41                while (port<99999):
42                        status=sock.connect_ex(('127.0.0.1', port));
43                        print "chechking port "+str(port)+" is "+str(status);
44                        if status!=0:
45                                return port;
46                        port=port+1;
47                       
48                return -1
49               
50               
51
52        def create_connection(self,  username, xephyr_options=" -ac -terminate -screen 1024x768 -dpi 96 "):
53                # Cal afegir com a parametre el username i que retorne el port....
54                try:
55                        os.environ["HOME"]="/home/"+username;
56                        os.environ["XAUTHORITY"]="/home/"+username+"/.Xauthority";
57
58                        display=self.get_first_display_free()
59                        port=self.get_first_free_port();
60                       
61                        print "PORT: ",port," DISPLAY: ",display
62
63                        xephyr_cmd="Xephyr "+xephyr_options+" "+display;
64                        #xephyr_cmd="Xnest -ac -geometry 800x600+24 "+display;
65                        xpra_cmd="xpra start --bind-tcp=0.0.0.0:"+str(port);
66                        xpra_cmd=xpra_cmd+" --html=on --no-pulseaudio --exit-with-children --start-child='"+xephyr_cmd+"'";
67                        print "Exec: "+xpra_cmd;
68                        p=subprocess.call([xpra_cmd], shell=True);                     
69                       
70                        # PROVAR ASO EN ALTRE LLOC O MIRAR X Q NO VA
71                        #  https://xpra.org/trac/wiki/Usage
72                        #xpra_cmd2="xpra attach tcp:0.0.0.0:"+str(port)+" --border=black,0 --window-close=ignore --desktop-scaling=auto";
73                        #print "bbbbbbbbbb"
74                        #p2=subprocess.call([xpra_cmd2], shell=True);
75                        #print "cccccccccccccc"
76                       
77                       
78                        # wait for port is listening
79                                               
80                        sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM);
81                        status=111;
82                        while (status!=0):
83                                status=sock.connect_ex(('127.0.0.1', port));
84                       
85                        print "port "+str(port)+" is available with status: "+str(status);
86                        #sleep (2)
87                        return {"status":True, "msg":{"port":str(port), "display":display}};
88                       
89                except Exception as e:
90                        print "[RemoteWebGui] create_connection Exception: ",e
91                        return {'status':False, 'msg': str(e)}
92               
93                return {'status':False, 'msg': 'unknown'}
94               
95        #def remote_execute
96       
97        def close_connection(self, port):
98                try:
99                        cmd='xpra stop tcp:0.0.0.0:'+str(port);
100                        subprocess.call([cmd], shell=True);
101                except Exception as e:
102                        print e
103                        return -1
104               
105                return 0
106
107
108        def run_into_connection(self, command, display):
109                try:
110                        cmd='export DISPLAY='+display+";"+command;
111                        #//p=subprocess.call([cmd], shell=True);
112                        p=subprocess.Popen([cmd], shell=True);
113                        return p
114                except Exception as e:
115                        print e
116                        return -1
117
118                return 0
119
120       
121#class RemoteGuiManager
Note: See TracBrowser for help on using the repository browser.