|
|
|
@ -261,6 +261,37 @@ class Desktop(MethodsInterface):
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
def userLogout(self, urLogin):
|
|
|
|
|
if self.clVars.GetBool('cl_desktop_elogind_set'):
|
|
|
|
|
return self.userLogoutByElogind(urLogin)
|
|
|
|
|
else:
|
|
|
|
|
return self.userLogoutBySession(urLogin)
|
|
|
|
|
|
|
|
|
|
def getElogindSessionId(self, urLogin):
|
|
|
|
|
loginctl = getProgPath("/bin/loginctl")
|
|
|
|
|
p = process(loginctl, "--no-legend")
|
|
|
|
|
try:
|
|
|
|
|
for line in p:
|
|
|
|
|
cols = [x.strip() for x in line.split()]
|
|
|
|
|
if len(cols) >= 3:
|
|
|
|
|
sessionid, uid, username = cols[:3]
|
|
|
|
|
if username = urLogin:
|
|
|
|
|
return sessionid
|
|
|
|
|
finally:
|
|
|
|
|
p.close()
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
def terminateUserSession(self, session_id):
|
|
|
|
|
loginctl = getProgPath("/bin/loginctl")
|
|
|
|
|
p = process(loginctl, "--terminate-session", session_id)
|
|
|
|
|
return p.success()
|
|
|
|
|
|
|
|
|
|
def userLogoutByElogind(self, urLogin):
|
|
|
|
|
elogin_session_id = self.getElogindSessionId(urLogin)
|
|
|
|
|
if not elogin_session_id:
|
|
|
|
|
raise DesktopError(_("Unable to detect user session id"))
|
|
|
|
|
return self.terminateUserSession(elogin_session_id)
|
|
|
|
|
|
|
|
|
|
def userLogoutBySession(self, urLogin):
|
|
|
|
|
"""
|
|
|
|
|
Выполнить logout пользователя через dbus
|
|
|
|
|
"""
|
|
|
|
|