우분투(또는 모든 Linux 배포판)를 사전 설치한 후 처음 부팅하는 동안 일부 설치 또는 구성이 발생한다는 메시지/경고를 사용자에게 표시하고 싶습니다. 불행하게도 보안 제한으로 인해 x11과 관련된 어떤 것도 작동하지 않습니다(사용자에게 루트가 표시될 수 없음).
이러한 이유로 나는 대화 상자와 자체 파괴 서비스(지금까지 찾은 최고의 방법)를 사용하기로 결정했습니다.
서비스는 다음 스크립트를 실행하려고 합니다(관련이 없으므로 sleep으로 대체됨). 대화 상자 표시, 드라이버 설치(프로비저닝 중에 컴파일할 수 없음), 프린터 추가 등을 수행하기 위해 tty2로 변경하려고 합니다.
가상 머신 내에서 가상 머신을 사용하면 정상적으로 작동합니다. 불행하게도 기계에서는 이것이 작동하지 않습니다. tty2로 변경되지만 로그인 관리자로 전환하기 전에 검은색 화면만 표시됩니다(이 경우 절전 모드 중).
이는 Before
-Statement의 XDM/SDDM에서는 작동하지만 GDM3 및에서는 작동하지 않습니다.후자와 함께 작동해야 합니다..
-Statement에 Before
나열된 디스플레이 관리자와 몇 가지 서비스를 추가하려고 시도했지만 display-manager.service
성공하지 못했습니다. 이는 gdm3 바이너리 자체의 특성 때문일 수 있습니다.
질문: 서비스가 완료될 때까지 gdm/display-manager.service 시작을 어떻게 지연할 수 있나요? 아니면 스크립트가 완료될 때까지 경고를 표시하는 더 좋은 방법이 있습니까?
제공하다
[Unit]
Description=FirstBoot
Wants=network-online.target
[email protected] plymouth-quit.service network.target network-online.target
Before=gdm3.service
Requires=cups.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]}")"
if ! chvt 2 &>/dev/null; then
break
fi
(
sleep 30s
) | 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 --
rm -rf $ABSOLUTE_PATH
답변1
Type=oneshot
귀하의 서비스에서 이를 설정 및 해제 할 수 있습니다 RemainAfterExit=yes
.
Type=oneshot
"준비 완료" 신호는 서비스가 완료된 후에만(막 시작되지는 않음) 전송되고 서비스의 명령문 gdm3
으로 인해 기다려야 하는지 확인하세요. (뿐만 아니라) 이후에 서비스가 실행되도록 설정하려면 - 문이 Before=
필요합니다 .RemainAfterExit
active
dead
Type=
자세한 내용은 -설명을 참조하세요.여기
참고 사항: 기본값 Type
(설정되지 않은 경우)은 simple
프로세스가 시작되면 다음 프로세스/서비스가 릴리스되는 것입니다.
답변2
나는 그것을 시도해보기로 결정했고 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
[email protected] 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