私のラップトップには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
サービス終了コードとステータス情報の説明