38 lines
1.0 KiB
Python
Executable File
38 lines
1.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- encoding: utf-8 -*-
|
|
import dbus
|
|
from os.path import basename
|
|
from xml.etree import ElementTree
|
|
#pid = 17821
|
|
IDLE_PROCESS = ["zsh", "bash"]
|
|
KONSOLE_PATH = 'org.kde.konsole'
|
|
|
|
def is_shell(foreground_process_pid):
|
|
|
|
with open('/proc/{pid}/cmdline'.format(pid=foreground_process_pid)) as file:
|
|
path = file.read()
|
|
process_name = basename(path)[:-1] # \x00 >:
|
|
return(process_name in IDLE_PROCESS)
|
|
|
|
|
|
def get_sessions_ids(sessions_xml):
|
|
root = ElementTree.fromstring(sessions_xml)
|
|
return [x.attrib['name'] for x in root if x.tag == 'node']
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
session_bus = dbus.SessionBus()
|
|
|
|
id_list = get_sessions_ids(
|
|
session_bus.get_object('org.kde.konsole', '/Sessions').Introspect()
|
|
)
|
|
|
|
for x in id_list:
|
|
object_path = "/Sessions/{id}".format(id=x)
|
|
session = session_bus.get_object('org.kde.konsole', object_path)
|
|
foreground_id = session.foregroundProcessId()
|
|
if is_shell(foreground_id):
|
|
session.runCommand("exit")
|
|
|