Добрый день, коллеги.
Пара вопросов, связанных с управлением процессами в терминальных сессиях.
Имеет смысл сразу сделать оговорку — разработкой системных приложений под линкус занят относительно недавно и нет хорошего уровня понимания работы системы. Только общие принципы, разработка прикладного софта. Поэтому иногда буду сбиваться в терминологию Windows и примеры оттуда же.
Имеется некая служба (демон systemd), которая слушает сокет и принимает определенные команды по сети. Задача — в каждой терминальной сессии (как это правильно называется в Линкус, так до конца и не понял) запускать некий "агент", от имени пользователя этой сессии. Данный Агент отображает GUI и коммуницирует через IPC с демоном. Отсюда возникает несколько вопросов:
1. Как отслеживать logon/logoff, блокировку сессии и т.д. из демона?
В Windows для этого есть понятный код SERVICE_CONTROL_SESSIONCHANGE в главном обработчике службы.
В macOS тоже есть понятный алгоритм действий
https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html
Как это реализовать в linux?
2. Каким образом запустить процесс в нужной/указанной терминальной сессии? Допустим, нам необходимо после логона пользователя запустить из Демона в его сессии "агент".
В Windows это делается через связку WTSQueryUserToken — CreateProcessAsUser
Какой подход нужно использовать в linux?
По обоим вопросам перелопатил очень много ресурсов, однако, безрезультатно, хотя, есть подозрение, что вопросы простые.
Также важная оговорка, — речь идет исключительно про GUI варианты оболочек.
Спасибо.