V notebooku mám 2 grafické karty. Jeden je IGP a druhý diskrétní.
Napsal jsem skript shellu pro vypnutí samostatné grafické karty.
Jak jej mohu převést na skript systemd, aby se spustil při spuštění?
Přijatá odpověď:
Existují dva způsoby, jak toho dosáhnout:
- Pokud musíte spustit skript, nepřevádíte jej, ale spouštíte skript prostřednictvím
systemd
služby.
Proto potřebujete dva soubory:skript a .service
soubor (soubor konfigurace jednotky).
Ujistěte se, že váš skript je spustitelný a první řádek (shebang ) je #!/bin/sh
. Poté vytvořte .service
soubor v /etc/systemd/system
(soubor ve formátu prostého textu, říkejme mu vgaoff.service
).
Například:
- skript:
/usr/bin/vgaoff
- soubor jednotky:
/etc/systemd/system/vgaoff.service
Nyní upravte soubor jednotky. Jeho obsah závisí na tom, jak váš skript funguje:
Pokud vgaoff
pouze vypne gpu, např.:
exec blah-blah pwrOFF etc
pak obsah vgaoff.service
by mělo být:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff
[Install]
WantedBy=multi-user.target
Pokud vgaoff
se používá k vypnutí GPU a také k jeho opětovnému zapnutí, např.:
start() {
exec blah-blah pwrOFF etc
}
stop() {
exec blah-blah pwrON etc
}
case $1 in
start|stop) "$1" ;;
esac
pak obsah vgaoff.service
by mělo být:
[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
- V nejtriviálnějších případech se můžete obejít bez skriptu a provést určitý příkaz přímo:
Vypnutí:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
[Install]
WantedBy=multi-user.target
Vypnutí a zapnutí:
[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
Až budete se soubory hotovi, povolte službu:
systemctl enable vgaoff.service
Spustí se automaticky při příštím spuštění. Službu můžete dokonce povolit a spustit najednou pomocí
systemctl enable --now vgaoff.service
od systemd v.220
(u starších nastavení jej budete muset spustit ručně).
Další podrobnosti viz systemd.service
manuálová stránka.
Odstraňování problémů .
Začněte zde:
Jak zobrazit úplný protokol systemd
služby?systemd
kódy ukončení služby a vysvětlení stavových informací