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

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

fixing user when getting info from ps aux

  • Property svn:executable set to *
File size: 2.4 KB
RevLine 
[5407]1#!/usr/bin/env python
2
3import subprocess
4import os
[5426]5import time
[5407]6
[7588]7is_server=os.system("lliurex-version -t server")
8is_thin=os.system("lliurex-version -x thin")
[8147]9is_semi=os.system("lliurex-version -x semi")
[7588]10
[5541]11thinclient_cron_file="/etc/cron.d/lliurex-shutdowner-thinclients"
12
[7616]13#in minutes
14client_wait_time=1
15server_wait_time=2
[5407]16
[7616]17
[5426]18t=time.localtime()
19
[7621]20if is_server==0:
21        tmp_wait_time=server_wait_time
22else:
23        tmp_wait_time=client_wait_time
[7588]24
[7621]25shutdown_date="%s:%s"%(t.tm_hour,t.tm_min+tmp_wait_time)
26
27
[5541]28if is_thin!=0:
[5548]29       
[8147]30        if not os.path.exists(thinclient_cron_file) and is_semi!=0:
[5541]31               
[7588]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
[8147]34                # semi clients don't show tty information, thin_client logic is enough
[7588]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:
[5548]46                                continue
[6944]47                               
[7588]48                        display=display.lstrip("(").rstrip(")")
[7616]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)
[7588]56                        os.system(command)
57                       
[8147]58        if is_server==0 or is_semi==0:
[5541]59               
[7588]60                # whether thinclient_cron_file exists or not, server HAS to handle thinclients notifications
[5541]61               
[7616]62                tmp_wait_time=1
[7588]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(" ")
[8148]69                                user=tmp[29]
[7588]70                                for item in tmp:
71                                        if "DISPLAY=" in item:
72                                                display=item.split("=")[1]
[7616]73                                                command="su -c 'DISPLAY=%s /usr/sbin/shutdown-lliurex-dialog %s' %s &"%(display,tmp_wait_time,user)
[7588]74                                                os.system(command)
75                                                break
[5407]76
77
[5541]78if is_thin!=0 and not os.path.exists(thinclient_cron_file):
[7616]79        if is_server==0:
80                tmp_wait_time=server_wait_time
81        else:
82                tmp_wait_time=client_wait_time
[7621]83        command="/sbin/shutdown -h +%s"%tmp_wait_time
84        os.system(command)
[5407]85
[5541]86if is_thin==0 and not os.path.exists(thinclient_cron_file):
[7616]87        time.sleep(60*client_wait_time)
[7621]88        command="n4d-client -r -m shutdown -c ShutdownerClient"
89        os.system(command)
Note: See TracBrowser for help on using the repository browser.