Bug 38363 - В окне для разблокировки отсутствует кнопка 'Переключить пользователя'
Summary: В окне для разблокировки отсутствует кнопка 'Переключить пользователя'
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: xfce4-session (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: manowar@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-04-17 18:17 MSK by Vera Blagoveschenskaya
Modified: 2021-03-18 13:10 MSK (History)
6 users (show)

See Also:


Attachments
screen1 (400.84 KB, image/png)
2020-04-17 18:17 MSK, Vera Blagoveschenskaya
no flags Details
screen2 (276.73 KB, image/png)
2020-04-17 18:17 MSK, Vera Blagoveschenskaya
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
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. Я бэкпортирую туда фиксы.