Программный выход из системы

mnemo

New member
Сообщения
20
#1
Здравствуйте!
Подскажите, пожалуйста, как можно программным способом (C++ и системные вызовы/fly-API) завершить текущую сессию пользователя (выйти из системы)?
Выход должен осуществляться с правами НЕсуперпользователя для сессии этого-же пользователя (варианты типа "service fly-dm restart' не подходят).

Всем откликнувшимся заранее спасибо!
 

Montfer

New member
Сообщения
2 364
#2
в файле ~/. fly/ru_RU. UTF-8.miscrc есть блок [ExitDialog], пробуйте оттуда брать ключи. что то типа
fly-wmfunc FLYWM_LOGOUT
 

mnemo

New member
Сообщения
20
#3
Это не совсем то, что нужно..
При этом варианте появляется диалог "Завершить работу? Да/Нет"
А мне необходимо, чтобы выполнялся безусловный выход из системы (не задавая вопрос пользователю).

Но за указание на файл - спасибо! Не знал, почитаю, возьму на вооружение.
 

mnemo

New member
Сообщения
20
#4
Не совсем по теме: а кто-нибудь знает, есть ли какое-нибудь описание FLY-API?
 

Montfer

New member
Сообщения
2 364
#5
вы уже опробовали это в вашей программе или просто в терминале набрали?
 

mnemo

New member
Сообщения
20
#7
В терминале набрал, он мне окно завершения сеанса выдал.
 

mnemo

New member
Сообщения
20
#8
Update:
При он сообщил о наличии незакрытых окон и спросил продолжать выход или нет...
Надо посмотреть, возможно в моём применении этот вариант подойдёт..
Спасибо!
 

mnemo

New member
Сообщения
20
#9
Всунул в программу - работает неустойчиво: у каких-то пользователей выходит, у каких-то вываливается ошибка "Для выполнения FLYWM_LOGOUT нет доступа к FIFO файлу /run/user/1001/fly-wm-:0. Обратитесь к администратору..."

Нужен механизм чёткого и безусловного завершения сессии текущего пользователя, а это к сожалению - костыли..
Но, всё равно спасибо! :)
 

Montfer

New member
Сообщения
2 364
#11
спросите в телеграм-канале астры, может быть там решение подскажут
 

oko

New member
Сообщения
1 257
#12
to mnemo
Пробуйте (без sudo, от имени залогиненного в графике пользователя): kill -9 $(ps -F -C fly-wm | grep fly-wm | awk '{ print $2 }')
Если не спутал синтаксис, будет полный выход из системы без каких-либо уведомлений (но и без сохранения открытых документов и проч.). Проверил на AstraLinux SpecialEdition 1.6 - вроде работает...
 

oko

New member
Сообщения
1 257
#13
В приведенной команде есть недостаток - если на одной машине в графике залогинено несколько юзеров (сессии Fly), то команда попробует убить первый попавшийся процесс из списка. Что не есть гуд - этот процесс может не принадлежать нужному юзеру и, если команду выполняет не root или не через sudo, результат будет 0...
Впрочем, понял, что можно и без лишних наворотов с grep и awk: killall fly-wm (опять-таки без sudo и не от root) тупо убьет процесс сессии Fly исключительно для залогиненного пользователя...
 

mnemo

New member
Сообщения
20
#14
Да лаконичный вариант работает! Всё очень здорово! Огромное спасибо! :)