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

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

modified remotewebgui

File size: 3.3 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 800x600 -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_xkbmap=" -keybd ephyr,,,xkbmodel=pc105,xkblayout=es,xkbrules=evdev,xkboption=grp:alts_toogle "
64                        xephyr_cmd="Xephyr "+xephyr_xkbmap+xephyr_options+" "+display;
65                        #xephyr_cmd="Xnest -ac -geometry 800x600+24 "+display;
66                       
67                        xpra_cmd="xpra start --bind-tcp=0.0.0.0:"+str(port);
68                        ## El -d es per a depurar.. mirar a vore qu+e es aixo dels filtered_modifiers, handle_key, etc.
69                        xpra_cmd=xpra_cmd+" --html=on --no-pulseaudio --exit-with-children --encoding=png --input-method=uim -d keyboard --start-child='"+xephyr_cmd+"'";
70                        #xpra_cmd=xpra_cmd+" --html=on --no-pulseaudio --readonly=yes --start='"+xephyr_cmd+"'";
71                        print "Exec: "+xpra_cmd;
72                        p=subprocess.call([xpra_cmd], shell=True);                     
73                       
74                        # PROVAR ASO EN ALTRE LLOC O MIRAR X Q NO VA
75                        #  https://xpra.org/trac/wiki/Usage
76                        #xpra_cmd2="xpra attach tcp:0.0.0.0:"+str(port)+" --border=black,0 --window-close=ignore --desktop-scaling=auto";
77                        #print "bbbbbbbbbb"
78                        #p2=subprocess.call([xpra_cmd2], shell=True);
79                        #print "cccccccccccccc"
80                       
81                       
82                        # wait for port is listening
83                                               
84                        sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM);
85                        status=111;
86                        while (status!=0):
87                                status=sock.connect_ex(('127.0.0.1', port));
88                       
89                        print "port "+str(port)+" is available with status: "+str(status);
90                        #sleep (2)
91                        return {"status":True, "msg":{"port":str(port), "display":display}};
92                       
93                except Exception as e:
94                        print "[RemoteWebGui] create_connection Exception: ",e
95                        return {'status':False, 'msg': str(e)}
96               
97                return {'status':False, 'msg': 'unknown'}
98               
99        #def remote_execute
100       
101        def close_connection(self, port):
102                try:
103                        cmd='xpra stop tcp:0.0.0.0:'+str(port);
104                        subprocess.call([cmd], shell=True);
105                except Exception as e:
106                        print e
107                        return -1
108               
109                return 0
110
111
112        def run_into_connection(self, command, display):
113                try:
114                        cmd='export DISPLAY='+display+";"+command;
115                        #//p=subprocess.call([cmd], shell=True);
116                        p=subprocess.Popen([cmd], shell=True);
117                        return p
118                except Exception as e:
119                        print e
120                        return -1
121
122                return 0
123
124       
125#class RemoteGuiManager
Note: See TracBrowser for help on using the repository browser.