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

Last change on this file since 2748 was 2748, checked in by kbut, 3 years ago

add needed arg to call lock screen

  • 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.cinnamon.ScreenSaver","/org/cinnamon/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               
140                GObject.threads_init()
141                Gtk.main()
142               
143               
144        #def start_gui
145
146       
147        def shutdown(self):
148               
149                print "Shutting down..."
150               
151                t=threading.Thread(target=self.sessman.RequestShutdown)
152                t.daemon=True
153                t.start()
154               
155        #def
156       
157        def reboot(self):
158               
159                print "Rebooting..."
160               
161                t=threading.Thread(target=self.sessman.RequestReboot)
162                t.daemon=True
163                t.start()
164               
165        #def
166       
167       
168        def suspend(self):
169               
170                print "Suspending..."
171               
172                t=threading.Thread(target=self.sysman.Suspend,args=(dbus.Boolean(True),))
173                t.daemon=True
174                t.start()
175               
176        #def suspend
177       
178        def hibernate(self):
179               
180                print "Hibernating..."
181               
182                t=threading.Thread(target=self.sysman.Hibernate,args=(dbus.Boolean(True),))
183                t.daemon=True
184                t.start()
185               
186        #def hibernating
187       
188       
189        def switch_user(self):
190               
191                print "Going back to lightdm..."
192                t=threading.Thread(target=self.displayman.SwitchToGreeter)
193                t.daemon=True
194                t.start()
195               
196        #def switch_user
197       
198        def lock(self):
199               
200                print "Locking screen..."
201                t=threading.Thread(target=self.lockman.Lock,args=('',))
202                t.daemon=True
203                t.start()
204       
205        #def lock
206       
207       
208        def logout(self):
209               
210                print "Logging out..."
211               
212                t=threading.Thread(target=self.sessman.Logout,args=(dbus.UInt32(1),))
213                t.daemon=True
214                t.start()
215               
216        #def logout
217       
218
219        def execute_now(self,widget,callback):
220
221                callback()
222                self.exit(None)
223               
224        #def execute_now
225
226        def back_clicked(self,widget):
227               
228                self.current_second=0
229                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
230                self.stack.set_visible_child_name("options")
231                self.back_button.hide()
232                self.cancel_button.show()
233                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
234       
235        #def back_clicked
236               
237               
238        def lock_clicked(self,widget):
239               
240                self.lock()
241                self.exit(None)
242               
243        #def lock_clicked
244       
245        def logout_clicked(self,widget):
246               
247                self.stack.set_visible_child_name("action")
248                self.current_action_image.set_from_file(LOGOUT_RSRC)
249                self.current_action_label.set_text(_("Log out now"))
250                self.execute_now_button.connect("clicked",self.execute_now,self.logout)
251                GLib.timeout_add(10,self.wait_to_execute,_("Session will close in %s seconds..."),self.logout)
252                self.cancel_button.set_visible(False)
253                self.back_button.set_visible(True)
254               
255        #def logout_clicked
256       
257       
258        def switch_clicked(self,widget):
259               
260                self.switch_user()
261                self.exit(None)
262               
263               
264        #def switch_clicked
265       
266        def suspend_clicked(self,widget):
267               
268                self.stack.set_visible_child_name("action")
269                self.current_action_image.set_from_file(SUSPEND_RSRC)
270                self.current_action_label.set_text(_("Suspend now"))
271                self.execute_now_button.connect("clicked",self.execute_now,self.suspend)
272                GLib.timeout_add(10,self.wait_to_execute,_("System will suspend in %s seconds..."),self.suspend)
273                self.cancel_button.set_visible(False)
274                self.back_button.set_visible(True)
275               
276        #def suspend_clicked
277       
278        def hibernate_clicked(self,widget):
279               
280                self.stack.set_visible_child_name("action")
281                self.current_action_image.set_from_file(HIBERNATE_RSRC)
282                self.current_action_label.set_text(_("Hibernate now"))
283                self.execute_now_button.connect("clicked",self.execute_now,self.hibernate)
284                GLib.timeout_add(10,self.wait_to_execute,_("System will hibernate in %s seconds..."),self.hibernate)
285                self.cancel_button.set_visible(False)
286                self.back_button.set_visible(True)
287               
288        #def hibernate_clicked
289       
290       
291        def reboot_clicked(self,widget):
292               
293                self.stack.set_visible_child_name("action")
294                self.current_action_image.set_from_file(REBOOT_RSRC)
295                self.current_action_label.set_text(_("Reboot now"))
296                self.execute_now_button.connect("clicked",self.execute_now,self.reboot)
297                GLib.timeout_add(10,self.wait_to_execute,_("System will reboot in %s seconds..."),self.reboot)
298                self.cancel_button.set_visible(False)
299                self.back_button.set_visible(True)
300               
301        #def reboot_clicked
302       
303        def shutdown_clicked(self,widget):
304               
305                self.stack.set_visible_child_name("action")
306                self.current_action_image.set_from_file(SHUTDOWN_RSRC)
307                self.current_action_label.set_text(_("Shutdown now"))
308                self.execute_now_button.connect("clicked",self.execute_now,self.shutdown)
309                GLib.timeout_add(10,self.wait_to_execute,_("System will shutdown in %s seconds..."),self.shutdown)
310                self.cancel_button.set_visible(False)
311                self.back_button.set_visible(True)
312               
313        #def shutdown_clicked
314       
315        def wait_to_execute(self,txt,callback):
316               
317                if self.stack.get_visible_child_name()=="options":
318                        return False
319               
320                csecond=int(self.max_seconds+1-self.current_second)
321                self.progressbar.set_text(txt%(csecond))
322                self.progressbar.set_fraction(self.current_second/self.max_seconds)
323                self.current_second+=0.01
324               
325                if self.current_second>=self.max_seconds:
326                        print "Executing callback..."
327                        self.progressbar.set_text(txt%(0))
328                        callback()
329                        self.exit(None)
330                        return False
331               
332                return True
333               
334        #def wait_to_execute
335       
336        def exit(self,widget):
337               
338                if widget==None:
339                        time.sleep(1)
340                Gtk.main_quit()
341               
342        #def exit
343       
344#class LSM
345
346
347if __name__=="__main__":
348       
349        lsm=LliurexSessionManager()
350
351
Note: See TracBrowser for help on using the repository browser.