Bug 47204

Summary: Бесшовно гасить plymouth
Product: Sisyphus Reporter: Sergey V Turchin <zerg>
Component: lightdmAssignee: manowar <manowar>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: enhancement    
Priority: P5 CC: antohami, manowar, mcpain
Version: unstable   
Hardware: x86_64   
OS: Linux   
Bug Depends on:    
Bug Blocks: 29958    
Attachments:
Description Flags
Скрин systemd-analyze blame none

Description Sergey V Turchin 2023-08-11 16:17:07 MSK
В service-файл надо добавить
Conflicts=plymouth-quit.service plymouth-quit-wait.service
ExecStartPre=-/bin/plymouth quit --retain-splash
, чтоб плавнее переключалось на greeter. Так сделано в sddm.
Comment 1 Sergey V Turchin 2023-08-11 16:19:37 MSK
Ну и по `systemd-analyze blame` сервис plymouth-quit-wait у меня на современной машине сжирает 2 секунды.
Comment 2 Sergey V Turchin 2023-10-09 09:19:19 MSK
Ку-ку!
Comment 3 Sergey V Turchin 2023-10-09 15:51:51 MSK
Предлагаю обсудить.
sddm уже много лет проверен, недостатков не выявлено.

P.S.
Если только всё равно переключается на чёрный экран, но это уже где-то не в lightdm/sddm.
Comment 4 manowar@altlinux.org 2023-10-09 20:25:20 MSK
https://packages.altlinux.org/ru/tasks/search/?q=%23331311
Comment 5 Sergey V Turchin 2024-06-21 11:54:15 MSK
А зачем делать отдельный юнит, время запуска которого не будет когда точно надо?
Comment 6 manowar@altlinux.org 2024-06-21 14:19:51 MSK
По хорошему, конечно, нужно чтобы загрузкой и переключением графики дережировал какой-то вышестоящий сервис, а участники процесса ничего друг о друге не знали.
Comment 7 Sergey V Turchin 2024-06-21 14:50:52 MSK
По хорошему да, но пока этого не сделано, есть рабочее проверенное решение.
Comment 8 Sergey V Turchin 2024-06-21 14:54:24 MSK
Created attachment 16301 [details]
Скрин systemd-analyze blame

Вот, у меня лвиную долю отжирает.
Comment 9 Антон Мидюков 2024-06-21 14:57:14 MSK
(Ответ для Sergey V Turchin на комментарий #7)
> По хорошему да, но пока этого не сделано, есть рабочее проверенное решение.

Так себе решение. Если lightdm не запустится, мы ничего не увидим. Такое было с sddm, и этим он мне не нравился.
Нужно чтобы lightdm вызывал plymouth --quit сам перед запуском иксов непосредственно.
Comment 10 manowar@altlinux.org 2024-06-21 15:00:52 MSK
Перед запуском иксов? Тогда, "если lightdm не запустится мы ничего не увидим"???
Может быть именно перед запуском _lightdm_?

А то я хотел спросить, может быть из /etc/X11/Xgreeter.lightdm не поздно запускать /bin/plymouth quit --retain-splash ? Но, наверное, поздно...
Comment 11 Антон Мидюков 2024-06-21 15:07:24 MSK
(Ответ для manowar@altlinux.org на комментарий #10)
> Перед запуском иксов? Тогда, "если lightdm не запустится мы ничего не
> увидим"???
> Может быть именно перед запуском _lightdm_?
> 
> А то я хотел спросить, может быть из /etc/X11/Xgreeter.lightdm не поздно
> запускать /bin/plymouth quit --retain-splash ? Но, наверное, поздно...

Если lightdm не запустится, отработает
OnFailure=plymouth-quit.service

Разумеется, эту строчку нужно обязательно добавить в lightdm.service
Comment 12 Sergey V Turchin 2024-06-21 15:09:38 MSK
(Ответ для manowar@altlinux.org на комментарий #10)
> /etc/X11/Xgreeter.lightdm
Wayland на носу.
Comment 13 manowar@altlinux.org 2024-06-21 15:19:49 MSK
Так что в итоге? Делаем как в https://git.altlinux.org/tasks/331311/ ?
Или я хотел предложить

ExecStartPre=run-parts /etc/lightdm/pre-start.d

И там уже любые plymouth, plymouth++, plymouth-ng и так далее. Я не хочу менять lightdm.service при каждом новом splash, который захочет поставить себе пользователь.
Comment 14 Антон Мидюков 2024-06-21 15:26:59 MSK
(Ответ для Антон Мидюков на комментарий #11)
> (Ответ для manowar@altlinux.org на комментарий #10)
> > Перед запуском иксов? Тогда, "если lightdm не запустится мы ничего не
> > увидим"???
> > Может быть именно перед запуском _lightdm_?
> > 
> > А то я хотел спросить, может быть из /etc/X11/Xgreeter.lightdm не поздно
> > запускать /bin/plymouth quit --retain-splash ? Но, наверное, поздно...
> 
> Если lightdm не запустится, отработает
> OnFailure=plymouth-quit.service
> 
> Разумеется, эту строчку нужно обязательно добавить в lightdm.service

В Fedora так и сделано.
# Replaces plymouth-quit since it quits plymouth on its own.
Conflicts=plymouth-quit.service
After=plymouth-quit.service

# LighDM takes responsibility for stopping plymouth, so if it fails
# for any reason, make sure plymouth still stops.
OnFailure=plymouth-quit.service

Надо проверить, может ничего больше делать и не нужно, всё уже умеет.
Comment 15 Sergey V Turchin 2024-06-21 15:29:35 MSK
(Ответ для manowar@altlinux.org на комментарий #13)
> Я не хочу
> менять lightdm.service при каждом новом splash
У нас ничего другого не было кроме gfxboot.

>, который захочет поставить себе пользователь.
Он и будет менять на свой plygfx## или что там у него. В любом случае, причём.
Comment 16 manowar@altlinux.org 2024-06-21 15:38:14 MSK
Не в любом. plymouth будет класть свой скрипт в /etc/lightdm/pre-start.d, plygfx## или как там его --- свой. И тогда не нужно редактировать lightdm.service.
Comment 17 Антон Мидюков 2024-06-21 15:38:23 MSK
(Ответ для Антон Мидюков на комментарий #14)
> (Ответ для Антон Мидюков на комментарий #11)
> > (Ответ для manowar@altlinux.org на комментарий #10)
> > > Перед запуском иксов? Тогда, "если lightdm не запустится мы ничего не
> > > увидим"???
> > > Может быть именно перед запуском _lightdm_?
> > > 
> > > А то я хотел спросить, может быть из /etc/X11/Xgreeter.lightdm не поздно
> > > запускать /bin/plymouth quit --retain-splash ? Но, наверное, поздно...
> > 
> > Если lightdm не запустится, отработает
> > OnFailure=plymouth-quit.service
> > 
> > Разумеется, эту строчку нужно обязательно добавить в lightdm.service
> 
> В Fedora так и сделано.
> # Replaces plymouth-quit since it quits plymouth on its own.
> Conflicts=plymouth-quit.service
> After=plymouth-quit.service
> 
> # LighDM takes responsibility for stopping plymouth, so if it fails
> # for any reason, make sure plymouth still stops.
> OnFailure=plymouth-quit.service
> 
> Надо проверить, может ничего больше делать и не нужно, всё уже умеет.

Проверил. В Conflicts уже есть plymouth-quit.service. Нужно добавить туда plymouth-quit-wait.service
И чтобы plymouth успешно выключался, когда что-то пошло не так, нужно добавить:
OnFailure=plymouth-quit.service

И всё будет работать.
Comment 18 Антон Мидюков 2024-06-21 15:42:42 MSK
diff --git a/lightdm/data/lightdm.service b/lightdm/data/lightdm.service
index e7f56bb7..e9bdeb19 100644
--- a/lightdm/data/lightdm.service
+++ b/lightdm/data/lightdm.service
@@ -1,9 +1,12 @@
 [Unit]
 Description=Light Display Manager
 Documentation=man:lightdm(1)
-Conflicts=getty@tty1.service plymouth-quit.service
+Conflicts=getty@tty1.service
+Conflicts=plymouth-quit.service plymouth-quit-wait.service
 Conflicts=xdm.service gdm.service kdm.service lxdm.service slim.service sddm.service
-After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service
+After=systemd-user-sessions.service getty@tty1.service
+After=plymouth-quit.service plymouth-quit-wait.service
+OnFailure=plymouth-quit.service
 
 [Service]
 ExecStart=/usr/sbin/lightdm
Comment 19 Sergey V Turchin 2024-06-21 15:56:53 MSK
(Ответ для manowar@altlinux.org на комментарий #16)
> Не в любом.
В любом. Ему будет без разницы, как называется файл, но ему придётся.
Мантейнер обязан что-то делать не будет в любом случае.
Comment 20 manowar@altlinux.org 2024-06-21 16:08:40 MSK
(Ответ для Антон Мидюков на комментарий #18)
> diff --git a/lightdm/data/lightdm.service b/lightdm/data/lightdm.service

https://git.altlinux.org/tasks/351280/
Comment 21 manowar@altlinux.org 2024-06-21 16:10:47 MSK
(Ответ для Sergey V Turchin на комментарий #19)
> (Ответ для manowar@altlinux.org на комментарий #16)
> > Не в любом.
> В любом. Ему будет без разницы, как называется файл, но ему придётся.
> Мантейнер обязан что-то делать не будет в любом случае.

Не понял, что ты хотел сказать. :)

Зачем было бы что-то менять в юните, если бы там запускалась целая директория с хуками?
Положил туда своё скрипт и вперёд, юнит трогать не нужно.
Comment 22 Sergey V Turchin 2024-06-21 16:22:46 MSK
(Ответ для manowar@altlinux.org на комментарий #21)
> > В любом. Ему будет без разницы, как называется файл, но ему придётся.
> > Мантейнер обязан что-то делать не будет в любом случае.
> Не понял, что ты хотел сказать. :)
Тем не менее, будет именно так.
 
> Зачем было бы что-то менять в юните, если бы там запускалась целая
> директория с хуками?
Потому, что в никому неизвестном месте никто ничего менять не полезет, а в документированное известное место полезет каждый.
Comment 23 Sergey V Turchin 2024-06-21 16:24:26 MSK
(Ответ для manowar@altlinux.org на комментарий #20)
> https://git.altlinux.org/tasks/351280/
Вроде, теперь норм.
Comment 24 Sergey V Turchin 2024-06-21 16:24:45 MSK
Осталось гасилку сделать.
Comment 25 Антон Мидюков 2024-06-21 16:31:04 MSK
(Ответ для Sergey V Turchin на комментарий #24)
> Осталось гасилку сделать.

Про какую гасилку речь?
Comment 26 Sergey V Turchin 2024-06-21 16:35:19 MSK
Ааа, да. Пользователь hzsplash всё равно полезет в lightdm.service, т.к. ему придётся там сделать подобие того, что там есть сейчас для plymouth.
Comment 27 Sergey V Turchin 2024-06-21 16:36:59 MSK
(Ответ для Антон Мидюков на комментарий #25)
> Про какую гасилку речь?
comment#0
Comment 28 Антон Мидюков 2024-06-21 16:53:35 MSK
(Ответ для Sergey V Turchin на комментарий #27)
> (Ответ для Антон Мидюков на комментарий #25)
> > Про какую гасилку речь?
> comment#0

Да вроде бы нормально сейчас. Чёрный экран при запуске иксов, не раньше.
Comment 29 Sergey V Turchin 2024-06-21 17:02:39 MSK
(Ответ для Антон Мидюков на комментарий #28)
> Да вроде бы нормально сейчас. Чёрный экран при запуске иксов, не раньше.
Это хорошо. А теперь убираем чёрный экран в баге #47907 . ;-)
Comment 30 Sergey V Turchin 2024-06-21 17:04:35 MSK
(Ответ для Антон Мидюков на комментарий #28)
> Да вроде бы нормально сейчас.
Главное, чтоб процесс plymouth в фоне не остался висеть.
Comment 31 Repository Robot 2024-06-21 20:30:56 MSK
lightdm-1.32.0-alt6 -> sisyphus:

 Fri Jun 21 2024 Paul Wolneykien <manowar@altlinux> 1.32.0-alt6
 - Output test-suite.log on test fail.
 - Fix build with new systemd (pass /usr/lib/systemd/system to make install).
 Fri Jun 21 2024 Paul Wolneykien <manowar@altlinux> 1.32.0-alt5
 - Start X11 with no background, thx Anton Midyukov (closes: 47907).
 - Integrate properly with Plymouth services, thx Anton Midyukov
   (closes: 47204).
Comment 32 Sergey V Turchin 2024-06-24 10:26:46 MSK
Уря! Теперь надо в p11.
Comment 33 Антон Мидюков 2024-06-24 10:33:19 MSK
(Ответ для Sergey V Turchin на комментарий #32)
> Уря! Теперь надо в p11.

https://git.altlinux.org/tasks/351365/