ラップトップに2枚のグラフィックカードがあります。 1つはIGPで、もう1つはディスクリートです。
ディスクリートグラフィックカードをオフにするシェルスクリプトを作成しました。
起動時に実行するためにsystemdスクリプトに変換するにはどうすればよいですか?
承認された回答:
これを行うには、主に2つのアプローチがあります。
- スクリプトを実行する必要がある場合は、スクリプトを変換するのではなく、
systemd
を介してスクリプトを実行します。 サービス。
したがって、スクリプトと.service
の2つのファイルが必要です。 ファイル(ユニット構成ファイル)。
スクリプトが実行可能であり、最初の行( shebang )が実行可能であることを確認します。 )は#!/bin/sh
です 。次に、.service
を作成します /etc/systemd/system
内のファイル (プレーンテキストファイル。vgaoff.service
と呼びましょう。 )。
例:
- スクリプト:
/usr/bin/vgaoff
- ユニットファイル:
/etc/systemd/system/vgaoff.service
次に、ユニットファイルを編集します。その内容は、スクリプトがどのように機能するかによって異なります:
vgaoff
の場合 GPUの電源を切るだけです。例:
exec blah-blah pwrOFF etc
次に、vgaoff.service
のコンテンツ する必要があります:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff
[Install]
WantedBy=multi-user.target
vgaoff
の場合 GPUの電源をオフにし、再びオンにするために使用されます。例:
start() {
exec blah-blah pwrOFF etc
}
stop() {
exec blah-blah pwrON etc
}
case $1 in
start|stop) "$1" ;;
esac
次に、vgaoff.service
のコンテンツ する必要があります:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff start
ExecStop=/usr/bin/vgaoff stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
- 最も些細なケースでは、スクリプトなしで実行し、特定のコマンドを直接実行できます。
電源を切るには:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
[Install]
WantedBy=multi-user.target
電源をオフにしてからオンにするには:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
ExecStop=/bin/sh -c "echo ON > /whatever/vga_pwr_gadget/switch"
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
ファイルの処理が完了したら、サービスを有効にします。
systemctl enable vgaoff.service
次回の起動時に自動的に起動します。一度にサービスを有効にして開始することもできます
systemctl enable --now vgaoff.service
systemd v.220
現在 (古いセットアップでは、手動で開始する必要があります。)
詳細については、systemd.service
を参照してください。 マニュアルページ。
トラブルシューティング 。
ここから開始:
systemd
の完全なログを表示する方法 サービス?
systemd
サービス終了コードとステータス情報の説明