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の解決策を試しました。 /etc/systemd/system
でmonitor-check.serviceを作成し、/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'.
Service
セクションにEnvironment=XAUTHORITY=/run/user/1000/gdm/Xauthority
を追加して、環境変数をXauthorityに追加しようとしましたが、役に立ちませんでした。
Praveenが提案した解決策も試しましたが、うまくいきませんでした。実際、スクリプトを/etc/profile.d
ディレクトリに追加しましたが、スクリプトが実行されなかったため、解像度はまだ古いものでした。
結論として、機能した2つの解決策は、スクリプトを~/.profile
に追加するか、スタートアップアプリケーションに手動で追加することだけでしたが、どちらの解決策も解像度を変更し、システムにログオンした後にラップトップの内部ディスプレイをオフにします。
Ubuntu19.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
はスクリプトが1回だけ(X秒ごとではなく)実行されることを意味し、WantedBy=multi-user.target
はそれを実行します「通常の」起動が完了したら実行します(シャットダウンではなく、レスキューモードではなく、グラフィックはオプションです)。もちろん、スクリプトを実行可能にすることはできますが、ExecStart
-行に/bin/bash
を追加することはできません。
スクリプトは/etc/systemd/system
に移動します。例: monitor-check.service
という名前で、.service
-サフィックスは必須であることに注意してください。所有権をroot
に設定し、権限を644
に設定します。
あなたはによってサービスをテストすることができます
systemctl start monitor-check
または
service monitor-check start
上記のコマンドでstart
をstatus
に置き換えて、ステータスを確認します。
有効にするには、ブートサービスを使用します。
systemctl enable monitor-check.service
ここでservice monitor-check status
を見る場合は、Loaded:
行のenabled
を読む必要があります。
もちろん、スクリプト自体はrootが所有し、安全上の理由から644
-権限を持っている必要があります。最良の方法は、たとえば次のような新しいディレクトリに保存することです。 /etc/my_scripts
または/etc/systemd/my_scripts
。
再起動後、サービスのステータスを使用して終了コードを確認できます。
Kindly add the script in /etc/profile.d
ユーザー固有のものにしたい場合は、ユーザーがログインしたときに実行されるように、以下の場所に追加してください
/home/username/.profile