Created attachment 8726 [details] screen1 education-9-x86-64-default ~ # rpm -qa | grep lightdm liblightdm-gobject-1.30.0-alt6.x86_64 lightdm-1.30.0-alt6.x86_64 lightdm-gtk-greeter-2.0.1-alt15.x86_64 Стенд - ALT Education x86_64 xfce 1) Создать двух пользователей test, test2. 2) Зайти как пользователь test. 3) Система -> Заблокировать. Результат: в окне для разблокировки отсутствует кнопка 'Переключить пользователя'. См. скрин 1. Раньше (сравнила с состоянием системы на 9 апреля) эта кнопка была - см. скрин 2 (причем версия lightdm с тех пор не менялась).
Created attachment 8727 [details] screen2
А это точно lightdm? От скринсейвера часом не зависит?
Это проблема, специфичная для xfce4-screensaver, а может быть для сценария запуска сеанса XFCE4. В xfce4-screensaver есть строчки } else if (g_getenv ("XDG_SEAT_PATH") != NULL) { /* LightDM */ gtk_widget_show (plug->priv->auth_switch_button); } То есть кнопка переключения будет выведена только тогда, когда в окружении процесса определена переменная "XDG_SEAT_PATH". В сеансе пользователя, если запустить X терминал и дать команду "env | grep XDG_SEAT_PATH", такая переменная действительно есть. Но если проверить, есть ли она в окружении процесса /usr/bin/xfce4-secreensaver, который стартует вместе с сеансом, то окажется, что такой переменной нет (grep XDG_SEAT_PATH /proc/номер_процесса_xfce4-screensaver/environ), хотя процесс работает от имени пользователя. Следовательно, проверка не проходит. Однако, если убить текущий процесс xfce4-screensaver и запустить новый, то при блокировке экрана (Ctrl+Alt+L или из меню) кнопка появляется (а в /proc/.../environ видно, что переменная определена). Вывод 1: xfce4-secreensaver запускается при старте сеанса как-то так, что XDG_SEAT_PATH оказывается не определена, хотя дальше она у пользователя есть. Вывод 2: Проблема XFCE4-специфичная, потому что в mate-screensaver, который является или предком, или клоном xfce4-secreensaver, аналогичный код срабатывает и кнопка видна, потому что XDG_SEAT_PATH оказывается определена в процессе mate-screensaver, который запускается автоматически. Видимо, сеанс XFCE4 запускается иначе, чем сеанс MATE.
> Вывод 1: xfce4-secreensaver запускается при старте сеанса как-то так, что XDG_SEAT_PATH оказывается не определена, хотя дальше она у пользователя есть. Я тут посмотрел на дерево процессов и всё понял: xfce4-session является потомком lightdm (который как раз и выставляет XDG_SEAT_PATH), в то время как xfce4-screensaver является потомком systemd --user, который растёт прямиком из systemd (PID=1). Я с этим делом совсем не знаком, но думаю, что а) управление ведётся через D-Bus, и что б) должен быть какой-то способ настроить окружение для тех программ, которые запускает systemd --user.
Нашёл вот такое: # if XAUTHLOCALHOSTNAME is not set in systemd user session, starting of xfce4-notifyd, DISPLAY etc. will fail SYSTEMCTL=systemctl if command -v sd_booted >/dev/null && \ command -v "$SYSTEMCTL" >/dev/null 2>&1 && "$SYSTEMCTL" --user list-jobs >/dev/null 2>&1; then # user session is running dbus-update-activation-environment --systemd XAUTHLOCALHOSTNAME=$XAUTHLOCALHOSTNAME fi
http://git.altlinux.org/tasks/267925/
Только это в Сизифе пока.
(Ответ для manowar@altlinux.org на комментарий #6) > http://git.altlinux.org/tasks/267925/ Выглядит разумным. Только проверить бы, у меня сейчас нет под рукой системы на Сизифе с systemd.
Я проверил на regular-xfce-latest.iso. Заапрувишь задание?
xfce4-session-4.16.0-alt2 -> sisyphus: Tue Mar 16 2021 Paul Wolneykien <manowar@altlinux> 4.16.0-alt2 - Set XDG_SEAT and XDG_SEAT_PATH in systemd user session (closes: 38363). - Use /sbin/sd_booted to check for systemd from the context of a user session.
Задание для p9: http://git.altlinux.org/tasks/267948/ .
(Ответ для manowar@altlinux.org на комментарий #11) > Задание для p9: http://git.altlinux.org/tasks/267948/ . В p9 xfce-4.14. Я бэкпортирую туда фиксы.