.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
섹션 에 다음을 추가하여
Service
Xauthority에 환경 변수를 추가하려고 시도했지만 도움이 되지 않았습니다.
나는 또한 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
읽어야 합니다 .enabled
Loaded:
644
물론 보안상의 이유로 스크립트 자체는 - 권한을 가진 루트가 소유해야 합니다. 가장 좋은 방법은 /etc/my_scripts
또는 와 같은 새 디렉토리에 저장하는 것입니다 /etc/systemd/my_scripts
.
다시 시작한 후 서비스 상태를 사용하여 종료 코드를 확인할 수 있습니다.
답변2
Kindly add the script in /etc/profile.d
사용자별로 지정하려면 사용자가 로그인할 때 실행되도록 다음을 추가하세요.
/home/username/.profile