Bug 38363

Summary: В окне для разблокировки отсутствует кнопка 'Переключить пользователя'
Product: Sisyphus Reporter: Vera Blagoveschenskaya <vercha>
Component: xfce4-sessionAssignee: manowar <manowar>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: cas, manowar, oddity, sem, shaba, sotor
Version: unstable   
Hardware: x86_64   
OS: Linux   
Attachments:
Description Flags
screen1
none
screen2 none

Description Vera Blagoveschenskaya 2020-04-17 18:17:31 MSK
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 с тех пор не менялась).
Comment 1 Vera Blagoveschenskaya 2020-04-17 18:17:58 MSK
Created attachment 8727 [details]
screen2
Comment 2 manowar@altlinux.org 2021-02-19 13:38:33 MSK
А это точно lightdm? От скринсейвера часом не зависит?
Comment 3 manowar@altlinux.org 2021-02-20 19:19:48 MSK
Это проблема, специфичная для 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.
Comment 4 manowar@altlinux.org 2021-03-16 16:33:31 MSK
> Вывод 1: xfce4-secreensaver запускается при старте сеанса как-то так, что XDG_SEAT_PATH оказывается не определена, хотя дальше она у пользователя есть.

Я тут посмотрел на дерево процессов и всё понял: xfce4-session является потомком lightdm (который как раз и выставляет XDG_SEAT_PATH), в то время как xfce4-screensaver является потомком systemd --user, который растёт прямиком из systemd (PID=1). Я с этим делом совсем не знаком, но думаю, что а) управление ведётся через D-Bus, и что б) должен быть какой-то способ настроить окружение для тех программ, которые запускает systemd --user.
Comment 5 manowar@altlinux.org 2021-03-16 17:21:24 MSK
Нашёл вот такое:

# 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
Comment 6 manowar@altlinux.org 2021-03-16 18:34:45 MSK
http://git.altlinux.org/tasks/267925/
Comment 7 manowar@altlinux.org 2021-03-16 18:35:29 MSK
Только это в Сизифе пока.
Comment 8 Mikhail Efremov 2021-03-16 19:02:28 MSK
(Ответ для manowar@altlinux.org на комментарий #6)
> http://git.altlinux.org/tasks/267925/

Выглядит разумным. Только проверить бы, у меня сейчас нет под рукой системы на Сизифе с systemd.
Comment 9 manowar@altlinux.org 2021-03-17 13:48:29 MSK
Я проверил на regular-xfce-latest.iso. Заапрувишь задание?
Comment 10 Repository Robot 2021-03-17 15:59:28 MSK
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.
Comment 11 manowar@altlinux.org 2021-03-17 16:04:17 MSK
Задание для p9: http://git.altlinux.org/tasks/267948/ .
Comment 12 Mikhail Efremov 2021-03-18 13:10:18 MSK
(Ответ для manowar@altlinux.org на комментарий #11)
> Задание для p9: http://git.altlinux.org/tasks/267948/ .

В p9 xfce-4.14. Я бэкпортирую туда фиксы.