私のラップトップには2つのグラフィックカードがあります。 1つはIGP、もう1つは離散型です。
個々のグラフィックカードをオフにするシェルスクリプトを作成しました。
起動時に実行するためにこれをシステムスクリプトに変換する方法は?
答え1
これを行う方法は主に2つあります。
スクリプトを含める
スクリプトを実行する必要がある場合は、変換する必要はありません。代わりに、サービスを介してスクリプトを実行してくださいsystemd
。
したがって、スクリプトと.service
ファイル(ユニット構成ファイル)の2つのファイルが必要です。
スクリプトが実行可能で最初の行(シェルボーン)はい#!/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の電源を切って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
マンページ。
トラブルシューティング
答え2
systemdに開始項目を追加するのは複雑で面倒です。これをより便利にするためにツールを作成しました。サービスの追加systemdに開始項目をすばやく追加する簡単な方法を提供します。
取付ける:
pip3 install add_service
使用法:
python -m add_service [shell_file/cmd] [user (default `whoami`)]
例:
python -m add_service ssh_nat.sh # by default user is `whoami`
python -m add_service "`which python3` -m http.server 80" root