Имеется проблема с временем отображения оповещений при входе в учетную запись после авторизации (lightdm/pam) в домене. После ввода пароля и подтверждения оповещение появляется на ~1 миллисекунду. Данного временного интервала крайне недостаточно.
Created attachment 16862 [details] пример всплывающего оповещения
Created attachment 16895 [details] delay patch Эта штука сработает?
(Ответ для Олег Соловьев на комментарий #2) > delay patch > Эта штука сработает? Да, пригодится.
А секунда ожидания сообщения это не долго? Т.е. даже если сообщения не предвидится, мы висим одну секунду.
долго, надо полсекунды дать. А можно выводить паузу только тогда, когда есть таймаут ?
(Ответ для Anton Farygin на комментарий #5) > долго, надо полсекунды дать. +1 > А можно выводить паузу только тогда, когда есть таймаут ? Сделано, если в 1-й таймаут пришло сообщение для отображения, то 5 сек пауза.
А пам точно посылает сообщения _после_ сигнала об успешной аутентификации? Насколько я знаю, там всё происходит синхронно и можно попробовать доказать (или опровергнуть), что при вызове колбэка все необходимые сообщения уже пришли и первого таймаута не нужно.
(In reply to Anton Farygin from comment #5) > долго, надо полсекунды дать. > > А можно выводить паузу только тогда, когда есть таймаут ? Есть риск что сообщение ещё не пришло, а lightdm уже скрывает свой гритер, т.к. я не знаю в каком порядке идут события. Я рассматриваю вариант, когда сначала идёт loginSuccessful, а потом infoMessage
Надо бы проверить на относительно слабом железе и медленной сети(авторизация в домене). А то может и 0.3 сек хватит.
(Ответ для Sergey V Turchin на комментарий #9) > и медленной сети(авторизация в домене) Проверив, что кэширование в sssd выключено.
Created attachment 16922 [details] Стек вызовов при запуске сессии после аутентификации Поизучав взаимодействие между гритером и модулем PAM, а также работу самого модуля, с определённой уверенностью могу заключить, что по завершению аутентификации никаких сообщений приходить не должно, и можно не использовать первый таймаут. Разумеется, нужно это хорошо потестировать. Некоторые подробности: Модуль PAM является so, а значит просто компонуется в исполняемый бинарь и вызывается как часть программы, в нашем случае - демона lightdm. В модуле реализована функция pam_sm_authenticate [1], в которой и происходит вся аутентификация, в т.ч. отправляются сообщения пользователю, запросы на ввод данных и т.д. Аутентификация завершается при возвращении из этой функции. Таким образом, внутри lightdm завершение аутентификации гарантированно происходит после отправки любого сообщения. Чтоб передать сообщение, PAM-модуль вызывает колбэк, который передаёт это гритеру через pipe. При завершении аутентификации (когда PAM фактически уже завершил выполнение) lightdm также отправляет сообщение гритеру через pipe. Судя по всему внутри pipe не может произойти переупорядочивание. В гритер событие попадает через вызов ppoll в библиотеке Glib-2, и далее подаётся Qt-сигнал, к которому подключен qml компонент, с логикой на javascript. Всё это происходит в основном цикле приложения и выполняется последовательно. Прикладываю стек вызовов в момент, когда происходит запуск сессии по сигналу успешной аутентификации от PAM. Во фрейме 34 сработал колбэк, "следящий" за pipe, выше по стеку подаётся Glib-сигнал, который во фрейме 27 запускает Qt-сигнал, выше видна работа javascript интерпретатора, примерно 23..5 фрейм и далее из qml вызывается метод гритера для начала запуска сессии. Видно, что это всё происходит синхронно, в одном потоке. [1] https://www.man7.org/linux/man-pages/man3/pam_sm_authenticate.3.html
Если изменить передачу сообщения через функцию диалога PAM на отправку его через D-Bus как-то так: $ busctl --user --json=short call org.freedesktop.Notifications \ /org/freedesktop/Notifications org.freedesktop.Notifications Notify \ susssasa{sv}i "" 0 password "Ваш пароль истекает" "$(date --date=now +%c)" \ 2 "chpw" "изменить пароль" 0 10000 Было бы логично с точки зрения архитектуры PAM и его взаимодействия с greeter'ами. Сообщение будет появляться в области уведомлений уже после успешного логина пользователя.
(Ответ для Leonid Krivoshein на комментарий #12) > Если изменить передачу сообщения через функцию диалога PAM на отправку его > через D-Bus как-то так: > ... > Было бы логично с точки зрения архитектуры PAM и его взаимодействия с > greeter'ами. Сообщение будет появляться в области уведомлений уже после > успешного логина пользователя. Да, это было бы удобно для пользователя, но мне пока непонятно, как это может быть в общем случае. Ведь только сам модуль pam осведомлён о таких деталях как сроки действия паролей и т.п., гритер просто выводит сообщения и запросы на ввод, как ему понять, какое именно сообщение отправить пользователю в качестве оповещения? С другой стороны, кажется, pam модуль не знает, он в графическую сессию аутентифицирует или в текстовую, в последнем случае такое оповещение наверное не нужно.
(Ответ для Anton Golubev на комментарий #13) > или в текстовую, в последнем > случае такое оповещение наверное не нужно. Нужно, но там достаточно просто не удалять оповещение с экрана.
Created attachment 16945 [details] Всплывающее уведомление Secret Net LSP сразу после логина
(In reply to Anton Golubev from comment #13) > Да, это было бы удобно для пользователя, но мне пока непонятно, как это > может быть в общем случае. Ведь только сам модуль pam осведомлён о таких > деталях как сроки действия паролей и т.п., гритер просто выводит сообщения и > запросы на ввод, как ему понять, какое именно сообщение отправить > пользователю в качестве оповещения? Отправить через D-Bus, а не через PAM conversation, как это делает Secret Net LSP: см. прикреплённый скрин из нашей инструкции. Сообщение должен увидеть залогинившийся пользователь, его можно отправить даже с отсрочкой в несколько секунд, чтобы дать время сначала прогрузиться рабочему столу. Это может быть и скрипт с указанной командой, например, запускаемый в фоновом режиме из модуля PAM через: $SHELL -c "nohup /path/to/script.sh $EXPIRATIONDATE >/dev/null 2>&1 &"
(Ответ для Leonid Krivoshein на комментарий #16) > Отправить через D-Bus, а не через PAM conversation Видимо, надо подружить соотв. модуль PAM и krb5-ticket-watcher, который может сразу предложить и сделать смену пароля.
(In reply to Sergey V Turchin from comment #17) > Видимо, надо подружить соотв. модуль PAM и krb5-ticket-watcher, который > может сразу предложить и сделать смену пароля. То есть, действительно можно вообще перенести место проверки из гритера во что-то, что запускается под юзверем всегда, и krb5-ticket-watcher прекрасный кандидат. И тогда даже необязательно дружить с PAM-модулем, так как есть: https://packages.altlinux.org/ru/sisyphus/files/?q=%2Fusr%2Fbin%2Fchage LC_ALL=C chage -l $USER |sed -n -E 's/^Password expires\s+: //p'
(Ответ для Leonid Krivoshein на комментарий #18) > LC_ALL=C chage -l $USER |sed -n -E 's/^Password expires\s+: //p' Локального пользователя достаточно в DM предупредить. Полагаю, доменного он не умеет, а через krb нужен пароль, чтоб узнать что-то.
(In reply to Sergey V Turchin from comment #19) > Локального пользователя достаточно в DM предупредить. Полагаю, доменного он > не умеет, а через krb нужен пароль, чтоб узнать что-то. Какие-то зависимости на PAM у chage уже есть: https://packages.altlinux.org/en/p10/binary/shadow-change/x86_64/depends/3066919505232134099 , можно это просто проверить, т.е. в теории он вполне может работать и с доменом, иначе для каждого домена пришлось бы вытаскивать из атрибутов Samba или через какой-нибудь samba-tool domain passwordsettings [pso show-user $USER].
lightdm-kde-greeter-0.4.23-alt10 -> sisyphus: Fri Oct 18 2024 Anton Golubev <golubevan@altlinux> 0.4.23-alt10 - provide some time to read messages from PAM (Closes: 51493)
Добрый день,я так понимаю решение найдено? Подскажите пожалуйста, как проверить исправление lightdm "Срок действия пароля истекает через 5 days" в 1 миллисекунду отображается при авторизации pam в домене ActiveDirectory (sssd).
Created attachment 17029 [details] Пример отображения сообщения lightdm после ввода логина и пароля
(Ответ для Антон Медведев на комментарий #23) > Добрый день,я так понимаю решение найдено? > Подскажите пожалуйста, как проверить исправление lightdm "Срок действия > пароля истекает через 5 days" в 1 миллисекунду отображается при авторизации > pam в домене ActiveDirectory (sssd). Завтра версия 0.4.23-alt10 будет в Сизифе, если у вас Сизиф - обновитесь. Если нет, боюсь, что практически никак.
в ветке p10 будет же?
В p10 потребуется сделать "бэкпорт", что займёт ещё некоторое время.
Сделал бэкпорт для p10, версия 0.4.23-alt1.p10.1. Собрал в тестовом задании 360278.
(Ответ для Антон Медведев на комментарий #26) > в ветке p10 будет же? Добрый день. Попробуйте обновленную версию пакета lightdm-kde-greeter из задания 360278. Можно обновить пакет командой: # apt-repo upgrade 360278
Добрый вечер, протестировал, подтверждаю. Теперь уведомление после ввода логина/пароля появляется примерно секунд на 5. Спасибо большое.
(Ответ для Антон Медведев на комментарий #31) > Добрый вечер, протестировал, подтверждаю. Теперь уведомление после ввода > логина/пароля появляется примерно секунд на 5. Спасибо большое. Отлично. Попадание обновления в репозиторий займет какое-то время. До этого момента, пожалуйста, используйте обновление lightdm-kde-greeter из задания 360278.
(Ответ для Антон Медведев на комментарий #31) > Добрый вечер, протестировал, подтверждаю. Теперь уведомление после ввода > логина/пароля появляется примерно секунд на 5. Спасибо большое. Исправление уже дошло до репозитория p10.
*** Bug 34368 has been marked as a duplicate of this bug. ***