ログイン画面の前にスクリプトを実行する

ログイン画面の前にスクリプトを実行する

.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実行されていないので、私の解決策はまだ古いです。

要約すると、動作する唯一の2つのソリューションは、スタートアップアプリケーションにスクリプトを追加するか、スタートアップアプリケーションに手動で追加することでしたが、両方のソリューションが~/.profileシステムにログインした後、解像度を変更して内部ノートブックディスプレイをオフにしました。

答え1

Ubuntu 19.04でsystemdこれらのスクリプトを使用する最善の方法はsysd-serviceを使用することです。

これには2つのファイルが必要です。 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

関連情報