로그인 화면 전에 스크립트 실행

로그인 화면 전에 스크립트 실행

.NET 로그인 화면 전에 스크립트를 실행하려고 합니다 Ubuntu 19.04. 스크립트는 내 노트북에 외부 모니터가 연결되어 있는지 확인하고, 그렇다면 해상도를 3440x1440@44로 변경하고 내부 노트북 디스플레이를 끕니다. 이것은 내 스크립트입니다.

#!/bin/bash

EXTERNAL_OUTPUT="HDMI-1-1"
INTERNAL_OUTPUT="eDP-1-1"

xrandr |grep $EXTERNAL_OUTPUT | grep " connected "
if [ $? -eq 0 ]; then
    xrandr --output $INTERNAL_OUTPUT --off
    xrandr --newmode "3440x1440_44.00"  299.75  3440 3664 4024 4608  1440 1443 1453 1479 -hsync +vsync
    xrandr --addmode HDMI-1-1 "3440x1440_44.00"
    xrandr --output HDMI-1-1 --mode "3440x1440_44.00"
else
    xrandr --output $INTERNAL_OUTPUT --auto --output $EXTERNAL_OUTPUT --off
fi

이 스크립트를 시작 응용 프로그램에 넣으려고 했지만 ~/.profile내 GDM 로그인 정보는 여전히 내 노트북 ​​화면에만 나타납니다. 나는 이 스크립트가 그 전에 실행되어 컴퓨터를 시작할 때 검은 화면이 나타나지 않기를 원합니다.

[업데이트]: 제안된 솔루션을 모두 시도했지만 둘 다 작동하지 않았습니다. 먼저 Fiximan의 솔루션을 사용해 보았습니다. Monitor-check.service를 생성 /etc/systemd/system하고 실행을 시도했는데 /bin/bash /home/user/monitor-check.service노트북 해상도가 3440x1440으로 성공적으로 변경되었습니다. 그런 다음 실행을 시도합니다. sudo systemctl start monitor-check.sh상태 메시지는 다음과 같습니다.

monitor-check.service - Service to check for external monitors during boot.
   Loaded: loaded (/etc/systemd/system/monitor-check.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Tue 2019-07-09 19:27:17 CEST; 5s ago
  Process: 4177 ExecStart=/bin/bash /home/user/Documents/scripts/display_setup.sh (code=exited, status=1/FAILURE)
 Main PID: 4177 (code=exited, status=1/FAILURE)

Jul 09 19:27:17 acer systemd[1]: Started Service to check for external monitors during boot..
Jul 09 19:27:17 acer bash[4177]: Can't open display
Jul 09 19:27:17 acer bash[4177]: Can't open display
Jul 09 19:27:17 acer systemd[1]: monitor-check.service: Main process exited, code=exited, status=1/FAILURE
Jul 09 19:27:17 acer systemd[1]: monitor-check.service: Failed with result 'exit-code'.

Environment=XAUTHORITY=/run/user/1000/gdm/Xauthority섹션 에 다음을 추가하여 ServiceXauthority에 환경 변수를 추가하려고 시도했지만 도움이 되지 않았습니다.

나는 또한 Praveen이 제안한 솔루션을 시도했지만 작동하지 않았습니다. 사실, 디렉토리에 스크립트를 추가했지만 /etc/profile.d실행되지 않아서 내 해결 방법은 여전히 ​​​​낡은 것입니다.

요약하자면, 작동한 유일한 두 가지 솔루션은 시작 응용 프로그램에 스크립트를 추가하거나 ~/.profile시작 응용 프로그램에 수동으로 추가하는 것이었지만 두 솔루션 모두 시스템에 로그인한 후 해상도를 변경하고 내부 노트북 디스플레이를 껐습니다.

답변1

Ubuntu 19.04에서 systemd이러한 스크립트를 사용하는 가장 좋은 방법 은 sysd-service를 사용하는 것입니다.

이를 위해서는 두 개의 파일이 필요합니다. 1) script.sh이미 작성한 파일(테스트를 거쳤으며 작동한다고 가정함)과 2) systemd 서비스를 정의하는 유닛 파일입니다.

후자의 예는 다음과 같습니다.

[Unit]
Description=Service to check for external monitors during boot.

[Service]
Type=Simple
ExecStart=/bin/bash /path/to/your/monitor/script.sh

[Install]
WantedBy=multi-user.target

Description그리고 ExecStart설명이 필요합니다. Type=Simple즉, 스크립트는 한 번만 실행되고(X초마다 실행되지 않음) WantedBy=multi-user.target"정상" 시작 시(종료 아님, 복구 모드 아님, 그래픽 옵션) 실행됩니다. 물론 -line 을 추가하지 않고도 스크립트를 실행 가능하게 만들 수 /bin/bash있습니다 ExecStart.

스크립트 /etc/systemd/system이름은 예를 들어 monitor-check.service지정됩니다. .service접미사는 필수입니다! 소유권 root과 권한을 으로 설정합니다 644.

다음을 통해 서비스를 테스트할 수 있습니다.

systemctl start monitor-check

또는

service monitor-check start

위 명령에서 로 바꿔서 start상태를 확인합니다 .status

부팅 서비스로 활성화하려면 다음을 사용하십시오.

systemctl enable monitor-check.service

지금 보면 - line을 service monitor-check status읽어야 합니다 .enabledLoaded:

644물론 보안상의 이유로 스크립트 자체는 - 권한을 가진 루트가 소유해야 합니다. 가장 좋은 방법은 /etc/my_scripts또는 와 같은 새 디렉토리에 저장하는 것입니다 /etc/systemd/my_scripts.

다시 시작한 후 서비스 상태를 사용하여 종료 코드를 확인할 수 있습니다.

답변2

Kindly add the script in /etc/profile.d

사용자별로 지정하려면 사용자가 로그인할 때 실행되도록 다음을 추가하세요.

/home/username/.profile

관련 정보