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

Last change on this file since 2869 was 2869, checked in by mabarracus, 4 years ago

changed screensaver dbus connection

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