source: lliurex-session-manager/trunk/fuentes/install-files/usr/bin/lliurex-session-manager @ 2256

Last change on this file since 2256 was 2256, checked in by hectorgh, 3 years ago

fixed typo

  • Property svn:executable set to *
File size: 8.5 KB
Line 
1#!/usr/bin/env python
2
3import gi
4gi.require_version('Gtk', '3.0')
5
6from gi.repository import Gtk, GObject,GLib
7import dbus
8
9import threading
10import time
11
12import signal
13signal.signal(signal.SIGINT,signal.SIG_DFL)
14
15
16RSRC_PATH="/usr/share/lliurex-session-manager/rsrc/"
17GLADE_FILE=RSRC_PATH+"lliurex-session-manager.ui"
18SUSPEND_RSRC=RSRC_PATH+"system-suspend.svg"
19HIBERNATE_RSRC=RSRC_PATH+"system-suspend-hibernate.svg"
20LOGOUT_RSRC=RSRC_PATH+"system-log-out.svg"
21REBOOT_RSRC=RSRC_PATH+"system-reboot.svg"
22SHUTDOWN_RSRC=RSRC_PATH+"system-shutdown.svg"
23
24
25class LliurexSessionManager:
26       
27        def __init__(self):
28               
29                self.max_seconds=15.0
30                self.current_second=0
31                self.progress_txt="%s will %s in %s seconds..."
32                self.can_suspend=True
33                self.can_hibernate=True
34               
35                #DBUS INIT
36                self.dbus_connections_init()
37                #GTK INIT
38                self.start_gui()
39               
40               
41        #def init
42       
43        def dbus_connections_init(self):
44               
45                self.session_bus=dbus.SessionBus()
46                self.system_bus=dbus.SystemBus()
47                self.sessman = self.session_bus.get_object("org.gnome.SessionManager","/org/gnome/SessionManager")
48                self.lockman = self.session_bus.get_object("org.mate.ScreenSaver","/org/mate/ScreenSaver")
49                display_obj = self.system_bus.get_object("org.freedesktop.DisplayManager","/org/freedesktop/DisplayManager/Seat0")
50                self.displayman = dbus.Interface(display_obj,"org.freedesktop.DisplayManager.Seat")
51                login_obj=self.system_bus.get_object("org.freedesktop.login1","/org/freedesktop/login1")
52                self.sysman=dbus.Interface(login_obj,"org.freedesktop.login1.Manager")
53                if self.sysman.CanSuspend()!="yes":
54                        self.can_suspend=False
55                if self.sysman.CanHibernate()!="yes":
56                        self.can_hibernate=False
57               
58               
59        #def dbus_connections_init
60       
61        def start_gui(self):
62               
63                builder=Gtk.Builder()
64                builder.add_from_file(GLADE_FILE)
65               
66                self.main_window=builder.get_object("window2")
67                self.main_box=builder.get_object("main_box")
68                self.session_box=builder.get_object("session_box")
69                self.action_box=builder.get_object("action_box")
70                self.progressbar=builder.get_object("progressbar")
71                self.progressbar.set_show_text(True)
72               
73                self.stack=Gtk.Stack()
74                self.stack.set_transition_duration(500)
75                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
76                self.stack.add_titled(self.session_box,"options","Session Options")
77                self.stack.add_titled(self.action_box,"action", "Execute option")
78                self.main_box.pack_start(self.stack,True,True,0)
79               
80               
81                self.lock_button=builder.get_object("lock_button")
82                self.logout_button=builder.get_object("logout_button")
83                self.switch_button=builder.get_object("switch_button")
84               
85                self.suspend_button=builder.get_object("suspend_button")
86                self.hibernate_button=builder.get_object("hibernate_button")
87                self.reboot_button=builder.get_object("reboot_button")
88                self.shutdown_button=builder.get_object("shutdown_button")
89                self.cancel_button=builder.get_object("cancel_button")
90                self.back_button=builder.get_object("back_button")
91               
92                self.current_action_image=builder.get_object("current_action_image")
93                self.current_action_label=builder.get_object("current_action_label")
94                self.execute_now_button=builder.get_object("execute_now_button")
95               
96               
97               
98               
99                self.lock_button.connect("clicked",self.lock_clicked)
100                self.logout_button.connect("clicked",self.logout_clicked)
101                self.switch_button.connect("clicked",self.switch_clicked)
102               
103                self.suspend_button.connect("clicked",self.suspend_clicked)
104                self.hibernate_button.connect("clicked",self.hibernate_clicked)
105                self.reboot_button.connect("clicked",self.reboot_clicked)
106                self.shutdown_button.connect("clicked",self.shutdown_clicked)
107               
108                self.cancel_button.connect("clicked",self.exit)
109                self.back_button.connect("clicked",self.back_clicked)
110               
111                self.main_window.connect("destroy",self.exit)
112               
113               
114                self.main_window.show_all()
115               
116                self.back_button.hide()
117                self.hibernate_button.set_visible(self.can_hibernate)
118                self.suspend_button.set_visible(self.can_suspend)
119               
120               
121                GObject.threads_init()
122                Gtk.main()
123               
124               
125        #def start_gui
126
127       
128        def shutdown(self):
129               
130                print "Shutting down..."
131               
132                t=threading.Thread(target=self.sessman.RequestShutdown)
133                t.daemon=True
134                t.start()
135               
136        #def
137       
138        def reboot(self):
139               
140                print "Rebooting..."
141               
142                t=threading.Thread(target=self.sessman.RequestReboot)
143                t.daemon=True
144                t.start()
145               
146        #def
147       
148       
149        def suspend(self):
150               
151                print "Suspending..."
152               
153                t=threading.Thread(target=self.sysman.Suspend,args=(dbus.Boolean(True),))
154                t.daemon=True
155                t.start()
156               
157        #def suspend
158       
159        def hibernate(self):
160               
161                print "Hibernating..."
162               
163                t=threading.Thread(target=self.sysman.Hibernate,args=(dbus.Boolean(True),))
164                t.daemon=True
165                t.start()
166               
167        #def hibernating
168       
169       
170        def switch_user(self):
171               
172                print "Going back to lightdm..."
173                t=threading.Thread(target=self.displayman.SwitchToGreeter)
174                t.daemon=True
175                t.start()
176               
177        #def switch_user
178       
179        def lock(self):
180               
181                print "Locking screen..."
182                t=threading.Thread(target=self.lockman.Lock)
183                t.daemon=True
184                t.start()
185       
186        #def lock
187       
188       
189        def logout(self):
190               
191                print "Logging out..."
192               
193                t=threading.Thread(target=self.sessman.Logout,args=(dbus.UInt32(1),))
194                t.daemon=True
195                t.start()
196               
197        #def logout
198       
199
200        def execute_now(self,widget,callback):
201
202                callback()
203                self.exit(None)
204               
205        #def execute_now
206
207        def back_clicked(self,widget):
208               
209                self.current_second=0
210                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
211                self.stack.set_visible_child_name("options")
212                self.back_button.hide()
213                self.cancel_button.show()
214                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
215       
216        #def back_clicked
217               
218               
219        def lock_clicked(self,widget):
220               
221                self.lock()
222                self.exit(None)
223               
224        #def lock_clicked
225       
226        def logout_clicked(self,widget):
227               
228                self.stack.set_visible_child_name("action")
229                self.current_action_image.set_from_file(LOGOUT_RSRC)
230                self.current_action_label.set_text("Log out now")
231                self.execute_now_button.connect("clicked",self.execute_now,self.logout)
232                GLib.timeout_add(10,self.wait_to_execute,"Session","close",self.logout)
233                self.cancel_button.set_visible(False)
234                self.back_button.set_visible(True)
235               
236        #def logout_clicked
237       
238       
239        def switch_clicked(self,widget):
240               
241                self.switch_user()
242                self.exit(None)
243               
244               
245        #def switch_clicked
246       
247        def suspend_clicked(self,widget):
248               
249                self.stack.set_visible_child_name("action")
250                self.current_action_image.set_from_file(SUSPEND_RSRC)
251                self.current_action_label.set_text("Suspend now")
252                self.execute_now_button.connect("clicked",self.execute_now,self.suspend)
253                GLib.timeout_add(10,self.wait_to_execute,"System","suspend",self.suspend)
254                self.cancel_button.set_visible(False)
255                self.back_button.set_visible(True)
256               
257        #def suspend_clicked
258       
259        def hibernate_clicked(self,widget):
260               
261                self.stack.set_visible_child_name("action")
262                self.current_action_image.set_from_file(HIBERNATE_RSRC)
263                self.current_action_label.set_text("Hibernate now")
264                self.execute_now_button.connect("clicked",self.execute_now,self.hibernate)
265                GLib.timeout_add(10,self.wait_to_execute,"System","hibernate",self.hibernate)
266                self.cancel_button.set_visible(False)
267                self.back_button.set_visible(True)
268               
269        #def hibernate_clicked
270       
271       
272        def reboot_clicked(self,widget):
273               
274                self.stack.set_visible_child_name("action")
275                self.current_action_image.set_from_file(REBOOT_RSRC)
276                self.current_action_label.set_text("Reboot now")
277                self.execute_now_button.connect("clicked",self.execute_now,self.reboot)
278                GLib.timeout_add(10,self.wait_to_execute,"System","reboot",self.reboot)
279                self.cancel_button.set_visible(False)
280                self.back_button.set_visible(True)
281               
282        #def reboot_clicked
283       
284        def shutdown_clicked(self,widget):
285               
286                self.stack.set_visible_child_name("action")
287                self.current_action_image.set_from_file(SHUTDOWN_RSRC)
288                self.current_action_label.set_text("Shutdown now")
289                self.execute_now_button.connect("clicked",self.execute_now,self.shutdown)
290                GLib.timeout_add(10,self.wait_to_execute,"System","shutdown",self.shutdown)
291                self.cancel_button.set_visible(False)
292                self.back_button.set_visible(True)
293               
294        #def shutdown_clicked
295       
296        def wait_to_execute(self,what,how,callback):
297               
298                if self.stack.get_visible_child_name()=="options":
299                        return False
300               
301                csecond=int(self.max_seconds+1-self.current_second)
302                self.progressbar.set_text(self.progress_txt%(what,how,csecond))
303                self.progressbar.set_fraction(self.current_second/self.max_seconds)
304                self.current_second+=0.01
305               
306                if self.current_second>=self.max_seconds:
307                        print "Executing callback..."
308                        self.progressbar.set_text(self.progress_txt%(what,how,0))
309                        callback()
310                        self.exit(None)
311                        return False
312               
313                return True
314               
315        #def wait_to_execute
316       
317        def exit(self,widget):
318               
319                if widget==None:
320                        time.sleep(1)
321                Gtk.main_quit()
322               
323        #def exit
324       
325#class LSM
326
327
328if __name__=="__main__":
329       
330        lsm=LliurexSessionManager()
331
332
Note: See TracBrowser for help on using the repository browser.