Ho 2 schede grafiche sul mio laptop. Uno è IGP e un altro discreto.
Ho scritto uno script di shell per disattivare la scheda grafica discreta.
Come posso convertirlo in script di sistema per eseguirlo all'avvio?
Risposta accettata:
Esistono principalmente due approcci per farlo:
- Se devi eseguire uno script, non lo converti ma esegui piuttosto lo script tramite un
systemd
servizio.
Quindi hai bisogno di due file:lo script e il .service
file (file di configurazione dell'unità).
Assicurati che lo script sia eseguibile e che la prima riga (shebang ) è #!/bin/sh
. Quindi crea il .service
file in /etc/systemd/system
(un semplice file di testo, chiamiamolo vgaoff.service
).
Ad esempio:
- lo script:
/usr/bin/vgaoff
- il file dell'unità:
/etc/systemd/system/vgaoff.service
Ora, modifica il file dell'unità. Il suo contenuto dipende da come funziona il tuo script:
Se vgaoff
spegne semplicemente la gpu, ad esempio:
exec blah-blah pwrOFF etc
quindi il contenuto di vgaoff.service
dovrebbe essere:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff
[Install]
WantedBy=multi-user.target
Se vgaoff
viene utilizzato per spegnere la GPU e anche per riaccenderla, ad esempio:
start() {
exec blah-blah pwrOFF etc
}
stop() {
exec blah-blah pwrON etc
}
case $1 in
start|stop) "$1" ;;
esac
quindi il contenuto di vgaoff.service
dovrebbe essere:
[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
- Per i casi più banali, puoi fare a meno dello script ed eseguire direttamente un determinato comando:
Per spegnere:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
[Install]
WantedBy=multi-user.target
Per spegnere e riaccendere:
[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
Una volta che hai finito con i file, abilita il servizio:
systemctl enable vgaoff.service
Si avvierà automaticamente al prossimo avvio. Puoi anche abilitare e avviare il servizio in una volta sola con
systemctl enable --now vgaoff.service
a partire da systemd v.220
(su configurazioni precedenti dovrai avviarlo manualmente).
Per maggiori dettagli, consulta systemd.service
pagina manuale.
Risoluzione dei problemi .
Inizia qui:
Come visualizzare il registro completo di un systemd
servizio?systemd
codici di uscita del servizio e spiegazione delle informazioni sullo stato