Простой:
users = read(users.txt)
foreach user in users
if get_consumed_quota(user) >= get_allowed_quota(user)
print user
До того, как пользователь afshar
войдет в систему, /home/afshar/.Xauthority
не будет содержать действительный файл cookie сеанса X для дисплея X. Он может содержать старый файл cookie от предыдущего входа в систему, но он становится недействительным, как только X-сервер перезагружается при выходе из системы и создает новый файл cookie сеанса.
Вероятно, невозможно предоставить не -привилегированному пользователю доступ к X-серверу перед входом в систему, не предоставив также достаточных разрешений для кражи паролей других пользователей путем рисования фальшивого диалогового окна входа поверх настоящего или других уловок..
Другими словами, все, что может каким-либо образом повлиять на экран входа в систему, будет -чувствительным к безопасности компонентом и потребует настройки на уровне системного администратора -, чтобы присутствовать на экране входа в систему. Вы не должны быть в состоянии сделать это только с правами обычного пользователя, иначе возникнет большая уязвимость в системе безопасности :, тогда целостность диалогового окна входа будет под вопросом, и система не сможет полностью защитить пользователей друг от друга..
Аналогичным образом, молчаливое разрешение процессу пользователя afshar
получить копию нового файла cookie сеанса X, пока пользователь not_afshar
вошел в систему с помощью графического интерфейса, было бы нарушением безопасности этого пользователя.
Вероятно, вам следует реализовать часть, которая нуждается в функциях X, в виде отдельного компонента, который использует шину D -или какой-либо другой механизм для связи с основной частью службы. Затем вы можете запустить один экземпляр этого компонента перед входом в систему в сценарии инициализации X-сервера, чтобы он мог выполнять свою работу на экране входа в систему (, работающем от имени пользователя root или какого-либо специального пользователя приложения ), а затем, когда пользователь входит в систему.,пусть он умрет, и сеанс пользователя запустит другой экземпляр этого компонента (, работающий как зарегистрированный -в пользователе ).
Для этого, очевидно, потребуется, чтобы основная служба могла справляться с отключением и перезапуском функционального компонента X, чтобы при необходимости можно было -повторно установить соединение.