Changeset 7588


Ignore:
Timestamp:
Jun 29, 2018, 8:47:44 AM (12 months ago)
Author:
hectorgh
Message:

improved client display detection

Location:
lliurex-shutdowner/trunk/fuentes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lliurex-shutdowner/trunk/fuentes/debian/changelog

    r7218 r7588  
     1lliurex-shutdowner (0.93) xenial; urgency=high
     2
     3  * Improved display detection
     4
     5 -- Hector Garcia Huerta <hectorgh@gmail.com>  Fri, 29 Jun 2018 08:47:10 +0200
     6
    17lliurex-shutdowner (0.92.5) xenial; urgency=medium
    28
  • lliurex-shutdowner/trunk/fuentes/lliurex-shutdowner-common.install/usr/sbin/shutdown-lliurex

    r6944 r7588  
    55import time
    66
     7is_server=os.system("lliurex-version -t server")
     8is_thin=os.system("lliurex-version -x thin")
     9
    710thinclient_cron_file="/etc/cron.d/lliurex-shutdowner-thinclients"
    811wait_time=1
    9 
    10 p=subprocess.Popen(["who"],shell=True,stdout=subprocess.PIPE).communicate()[0]
    11 is_server=os.system("lliurex-version -t server")
    12 is_thin=os.system("lliurex-version -x thin")
    1312
    1413if is_server==0:
     
    1918shutdown_date="%s:%s"%(t.tm_hour,t.tm_min+wait_time)
    2019
     20
    2121if is_thin!=0:
    2222       
    23         displays=set()
    24        
    25         for item in p.strip("\n").split("\n"):
     23        if not os.path.exists(thinclient_cron_file):
    2624               
    27                 tmp_wait_time=wait_time
    28                 display=None           
    29                 x=item.split(" ")
    30                 user=x[0]
    31                 print x[0],x[-1]       
    32                 if "(" not in x[-1] or ")" not in x[-1] or ":" not in x[-1]:
    33                         if is_server==0:
    34                                
    35                                 if "." in x[-1] and len(x[-1].split("."))==4:
    36                                         # let's try to guess displays
    37                                         display=x[-1].lstrip("(").rstrip(")")+":7.0"
    38                                 else:
    39                                         continue
    40                         else:   
     25                # thinclient_cron_file shouldn't exist on fat clients, it may be located on server, which means if it's not there
     26                # server also needs to be shutdown, and if so, local users have to be notified
     27               
     28                standalone=subprocess.Popen(["who | grep tty"],shell=True,stdout=subprocess.PIPE).communicate()[0]
     29                displays=set()
     30                for item in standalone.strip("\n").split("\n"):
     31                       
     32                        tmp_wait_time=wait_time
     33                        display=None           
     34                        x=item.split(" ")
     35                        user=x[0]
     36                        display=x[-1]
     37                       
     38                        if "(" not in display or ")" not in display or ":" not in display:
    4139                                continue
    4240                               
    43                 if not display:
    44                         display=x[-1].lstrip("(").rstrip(")")
     41                        display=display.lstrip("(").rstrip(")")
     42                                       
     43                        command="su -c 'DISPLAY=%s /usr/sbin/shutdown-lliurex-dialog %s' %s &"%(display,tmp_wait_time,user)
     44                        os.system(command)
     45                       
     46        if is_server==0:
    4547               
    46                 if os.path.exists(thinclient_cron_file):
    47                         if "." in display and len(display.split(":")[0].split("."))<4:
    48                                 continue
     48                # whether thinclient_cron_file exists or not, server HAS to handle thinclients notifications
    4949               
    50                 if display not in displays and display!=None:
    51                         displays.add(display)
    52                 else:
    53                         continue
    54                
    55                 if "." in display and len(display.split("."))>=4:
    56                         tmp_wait_time=1
    57                
    58                 command="su -c 'DISPLAY=%s /usr/sbin/shutdown-lliurex-dialog %s' %s &"%(display,tmp_wait_time,user)
    59                 os.system(command)
     50                wait_time=1
     51                thinclients=subprocess.Popen(["ps aux| grep LTSP_CLIENT | grep DISPLAY"],shell=True,stdout=subprocess.PIPE).communicate()[0]
     52                thinclients=thinclients.strip("\n").split("\n")
     53                       
     54                for tc in thinclients:
     55                        if "DISPLAY=" in tc:
     56                                tmp=tc.split(" ")
     57                                user=tmp[0]
     58                                for item in tmp:
     59                                        if "DISPLAY=" in item:
     60                                                display=item.split("=")[1]
     61                                                command="su -c 'DISPLAY=%s /usr/sbin/shutdown-lliurex-dialog %s' %s &"%(display,wait_time,user)
     62                                                os.system(command)
     63                                                break
    6064
    6165
Note: See TracChangeset for help on using the changeset viewer.