source: lliurex-shutdowner/trunk/fuentes/lliurex-shutdowner-common.install/usr/sbin/shutdown-lliurex

Last change on this file was 8148, checked in by hectorgh, 18 months ago

fixing user when getting info from ps aux

  • Property svn:executable set to *
File size: 2.4 KB
Line 
1#!/usr/bin/env python
2
3import subprocess
4import os
5import time
6
7is_server=os.system("lliurex-version -t server")
8is_thin=os.system("lliurex-version -x thin")
9is_semi=os.system("lliurex-version -x semi")
10
11thinclient_cron_file="/etc/cron.d/lliurex-shutdowner-thinclients"
12
13#in minutes
14client_wait_time=1
15server_wait_time=2
16
17
18t=time.localtime()
19
20if is_server==0:
21        tmp_wait_time=server_wait_time
22else:
23        tmp_wait_time=client_wait_time
24
25shutdown_date="%s:%s"%(t.tm_hour,t.tm_min+tmp_wait_time)
26
27
28if is_thin!=0:
29       
30        if not os.path.exists(thinclient_cron_file) and is_semi!=0:
31               
32                # thinclient_cron_file shouldn't exist on fat clients, it may be located on server, which means if it's not there
33                # server also needs to be shutdown, and if so, local users have to be notified
34                # semi clients don't show tty information, thin_client logic is enough
35               
36                standalone=subprocess.Popen(["who | grep tty"],shell=True,stdout=subprocess.PIPE).communicate()[0]
37                displays=set()
38                for item in standalone.strip("\n").split("\n"):
39                       
40                        display=None           
41                        x=item.split(" ")
42                        user=x[0]
43                        display=x[-1]
44                       
45                        if "(" not in display or ")" not in display or ":" not in display:
46                                continue
47                               
48                        display=display.lstrip("(").rstrip(")")
49                       
50                        if is_server==0:
51                                tmp_wait_time=server_wait_time
52                        else:
53                                tmp_wait_time=client_wait_time
54                       
55                        command="su -c 'DISPLAY=%s /usr/sbin/shutdown-lliurex-dialog %s' %s &"%(display,tmp_wait_time,user)
56                        os.system(command)
57                       
58        if is_server==0 or is_semi==0:
59               
60                # whether thinclient_cron_file exists or not, server HAS to handle thinclients notifications
61               
62                tmp_wait_time=1
63                thinclients=subprocess.Popen(["ps aux| grep LTSP_CLIENT | grep DISPLAY"],shell=True,stdout=subprocess.PIPE).communicate()[0]
64                thinclients=thinclients.strip("\n").split("\n")
65                       
66                for tc in thinclients:
67                        if "DISPLAY=" in tc:
68                                tmp=tc.split(" ")
69                                user=tmp[29]
70                                for item in tmp:
71                                        if "DISPLAY=" in item:
72                                                display=item.split("=")[1]
73                                                command="su -c 'DISPLAY=%s /usr/sbin/shutdown-lliurex-dialog %s' %s &"%(display,tmp_wait_time,user)
74                                                os.system(command)
75                                                break
76
77
78if is_thin!=0 and not os.path.exists(thinclient_cron_file):
79        if is_server==0:
80                tmp_wait_time=server_wait_time
81        else:
82                tmp_wait_time=client_wait_time
83        command="/sbin/shutdown -h +%s"%tmp_wait_time
84        os.system(command)
85
86if is_thin==0 and not os.path.exists(thinclient_cron_file):
87        time.sleep(60*client_wait_time)
88        command="n4d-client -r -m shutdown -c ShutdownerClient"
89        os.system(command)
Note: See TracBrowser for help on using the repository browser.