Диалог/приложение перед входом в систему/диспетчером рабочего стола

Вы неплохо обработали свой сервер. Самый быстрый способ восстановиться — переустановить ОС и восстановить резервные копии. У вас есть резервные копии, верно?

1
04.08.2019, 23:09
2 ответа

Вы можете установить Type=oneshotв своем сервисе и установить RemainAfterExit=yes.

Type=oneshotгарантирует, что сигнал «Я готов» -отправляется только после того, как служба завершена (, а не только запущена ), и это должно заставить gdm3ждать из-за оператораBefore=-в вашем оказание услуг. Вам нужен оператор RemainAfterExit-, чтобы служба была установлена ​​​​на activeпосле запуска (, а не толькоdead).

См.Type=-подробное описание здесь

Дополнительное примечание :Значение по умолчанию Type, если оно не установлено, равно simple, т. е. следующий процесс/служба будет спущен с поводка после запуска вашего процесса.

0
28.01.2020, 00:04

Я решил попробовать это с After=gdm.service, и это, кажется, работает. Вероятно, при загрузке с помощью gdm запускаются/изменяются некоторые вещи, которые я не смог понять. Поэтому я пошел с заявлением After-.

Чтобы это работало правильно, мне пришлось добавить еще один chvtв конец скрипта, чтобы вернуться к tty1 для менеджера входа.

Может быть полезно добавить немного сна ExecStartPre. Тестирование этого с виртуальной машиной параллельно, это слишком быстро, и в противном случае он сразу же вернется к диспетчеру входа в систему. Я думаю, это зависит от используемой машины.

Сервис

# Using gdm/lightdm/lxdm, the dialog script needs to be started After=gdm.service, else you receive a blank screen
# With sddm/xdm you can start the dialog script i.e. Before=sddm.service

[Unit]
Description=FirstBoot
Wants=network-online.target cups.service
After=getty@tty2.service plymouth-quit.service network.target network-online.target cups.service gdm.service

[Service]
Type=oneshot
ExecStart=/bin/bash /home/admin00/firstboot.sh
ExecStop=/bin/systemctl disable firstboot.service
ExecStopPost=/bin/sh -c 'rm /etc/systemd/system/firstboot.service'
StandardInput=tty
TTYPath=/dev/tty2
TTYReset=yes
TTYVHangup=yes

[Install]
WantedBy=multi-user.target

Сценарий

#!/bin/bash
ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")"

#Change to tty2 to display the dialog
if ! chvt 2 &>/dev/null; then
    break
fi

(
script stuff
) | dialog --title "IT Afterconfiguration" --infobox "\n           P L E A S E\n             W A I T\n\n  Your system is being configured" 8 40

dialog --no-cancel --no-ok --pause '   Continuing in...' 6 27 5 --
clear

rm -rf $ABSOLUTE_PATH

#Change back to tty1 / login manager
if ! chvt 1 &>/dev/null; then
        break
fi
0
28.01.2020, 00:04

Теги

Похожие вопросы