Просят автоматически заполнять имя последнего залогиненного пользователя в поле ввода и при greeter-hide-users=true.
Последний пользователь сохраняется в параметре last-user в файле /var/lib/ldm/.cache/lightdm-gtk-greeter/state # cat /var/lib/ldm/.cache/lightdm-gtk-greeter/state [greeter] last-user=ho last-session=mate
Хорошо. Там ещё по-моему такая проблема, что при самом первом входе и выборе списком выбор по умолчанию пуст. Я думаю стоит сразу выбирать первого пользователя из списка.
(Ответ для manowar@altlinux.org на комментарий #2) > Хорошо. Там ещё по-моему такая проблема, что при самом первом входе и выборе > списком выбор по умолчанию пуст. Я думаю стоит сразу выбирать первого > пользователя из списка. Да, хорошая идея.
(Ответ для manowar@altlinux.org на комментарий #2) > Хорошо. Там ещё по-моему такая проблема, что при самом первом входе и выборе > списком выбор по умолчанию пуст. Я думаю стоит сразу выбирать первого > пользователя из списка. Когда потестить можно будет?
Завтра, наверное. Я тут ещё вот эту изучаю: https://bugzilla.altlinux.org/show_bug.cgi?id=38363 . Я про неё забыл, а вчера сам натолкнулся.
Требование получается несколько противоречивым. Поясняю. lightdm-gtk-greeter переписывался для того, чтобы поддерживать любые схемы аутентификации, а не только типичную пару логин/пароль. Например, при использовании смарт-карт карта опознаётся автоматически и необходимость запрашивать имя пользователя отпадает. Гипотетически могут быть иные схемы, в которых первым делом у пользователя запрашивается не имя пользователя, а что-то иное. Хотя ясно, что это экзотика. Так вот, для обработки всех таких случаев сеанс аутентификации начинается без указания имени пользователя — start_authentication(NULL) и дальше всё решает PAM: если ему требуется Username, то пользователю будет отправлен соответствующий запрос на ввод. На мой взгляд, такое поведение нужно сохранить — по крайней мере в виде опции. Теперь о том, как всё-таки можно реализовать требование. Самый простой способ, это предварительно вставить в поле ввода имя пользователя. И надеяться на то, что первое, о чём спросит PAM, будет "Enter username:" или что-то в этом роде. Ясно, что в 99% случаев это будет выглядеть адекватно. Второй вариант — не начинать с start_authentication(NULL), а честно выводить поле ввода имени пользователя перед началом процедуры аутентификации и после ввода вызывать уже start_authentication(username). Это несколько сложнее по реализации, но органичнее вписывается в устройство lightdm-gtk-greeter и не противоречит логике PAM (который предусматривает начало сеанса для конкретного пользователя).
(Ответ для manowar@altlinux.org на комментарий #6) > Требование получается несколько противоречивым. Поясняю. lightdm-gtk-greeter > переписывался для того, чтобы поддерживать любые схемы аутентификации, а не > только типичную пару логин/пароль. Например, при использовании смарт-карт > карта опознаётся автоматически и необходимость запрашивать имя пользователя > отпадает. Гипотетически могут быть иные схемы, в которых первым делом у > пользователя запрашивается не имя пользователя, а что-то иное. Хотя ясно, > что это экзотика. Так вот, для обработки всех таких случаев сеанс > аутентификации начинается без указания имени пользователя — > start_authentication(NULL) и дальше всё решает PAM: если ему требуется > Username, то пользователю будет отправлен соответствующий запрос на ввод. На > мой взгляд, такое поведение нужно сохранить — по крайней мере в виде опции. > > Теперь о том, как всё-таки можно реализовать требование. Самый простой > способ, это предварительно вставить в поле ввода имя пользователя. И > надеяться на то, что первое, о чём спросит PAM, будет "Enter username:" или > что-то в этом роде. Ясно, что в 99% случаев это будет выглядеть адекватно. > > Второй вариант — не начинать с start_authentication(NULL), а честно выводить > поле ввода имени пользователя перед началом процедуры аутентификации и после > ввода вызывать уже start_authentication(username). Это несколько сложнее по > реализации, но органичнее вписывается в устройство lightdm-gtk-greeter и не > противоречит логике PAM (который предусматривает начало сеанса для > конкретного пользователя). Если запросили имя пользователя (и под полем показывается локализованное название поля - "Имя пользователя"), то именно при известной подписи поля и надо вставлять. Так что второй вариант - заполнять при триггере username.
lightdm-gtk-greeter-2.0.7-alt2 -> sisyphus: Thu Feb 25 2021 Paul Wolneykien <manowar@altlinux> 2.0.7-alt2 - Added "enter-username" config param to explicitly ask for a username before authentication starts (closes: 38544).
Если будете тестировать: там новый параметр добавился "enter-password" в /etc/lightdm/lightdm-gtk-greeter.conf. И там же есть ещё один "restart-on-cancel". Он старый, но имеет смысл с ним тоже проверить, что всё адекватно. Напоминаю, что "greeter-hide-users" находится в другом конфиге — /etc/lightdm/lightdm.conf.
Проверяю пакет в р9, обновленный до таска #267018 (lightdm-gtk-greeter.git=v2.0.7-alt2), выполняю следующие шаги: 1. Ставлю в /etc/lightdm/lightdm.conf greeter-hide-users=true 2. # lightdm-gtk-greeter 3. # reboot 4. Начинаю сессию под пользователем test, завершаю сеанс. 5. Попадаю на поле "Учетная запись". Но в результате поле "Учетная запись" пустое. Аналогичное поведение и в предыдущей версии пакета. Просьба уточнить, какое ожидаемое поведение.
/etc/lightdm/lightdm-gtk-greeter.conf: enter-username=true ? Если не включить этот режим, то разницы не будет.
(Ответ для manowar@altlinux.org на комментарий #11) > /etc/lightdm/lightdm-gtk-greeter.conf: enter-username=true ? > > Если не включить этот режим, то разницы не будет. С этим параметром выводит имя последнего пользователя корректно. Поняла свой промах. Спасибо.