Eu tenho 2 placas gráficas no meu laptop. Um é IGP e outro discreto.
Eu escrevi um script de shell para desligar a placa gráfica discreta.
Como posso convertê-lo em script systemd para executá-lo na inicialização?
fonte
Eu tenho 2 placas gráficas no meu laptop. Um é IGP e outro discreto.
Eu escrevi um script de shell para desligar a placa gráfica discreta.
Como posso convertê-lo em script systemd para executá-lo na inicialização?
Existem principalmente duas abordagens para fazer isso:
systemd
serviço.Portanto, você precisa de dois arquivos: o script e o .service
arquivo (arquivo de configuração da unidade).
Verifique se o seu script é executável e a primeira linha (o shebang ) é #!/bin/sh
. Em seguida, crie o .service
arquivo /etc/systemd/system
(um arquivo de texto sem formatação, vamos chamá-lo vgaoff.service
).
Por exemplo:
/usr/bin/vgaoff
/etc/systemd/system/vgaoff.service
Agora, edite o arquivo da unidade. Seu conteúdo depende de como seu script funciona:
Se vgaoff
apenas desligar o gpu, por exemplo:
exec blah-blah pwrOFF etc
então o conteúdo de vgaoff.service
deve ser:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff
[Install]
WantedBy=multi-user.target
Se vgaoff
for usado para desligar a GPU e também para ligá-la novamente, por exemplo:
start() {
exec blah-blah pwrOFF etc
}
stop() {
exec blah-blah pwrON etc
}
case $1 in
start|stop) "$1" ;;
esac
então o conteúdo de vgaoff.service
deve ser:
[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
Para desligar:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
[Install]
WantedBy=multi-user.target
Para desligar e ligar:
[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
Depois de concluir os arquivos, ative o serviço:
systemctl enable vgaoff.service
Ele será iniciado automaticamente na próxima inicialização. Você pode até ativar e iniciar o serviço de uma só vez com
systemctl enable --now vgaoff.service
a partir de systemd v.220
(em configurações mais antigas, você terá que iniciá-lo manualmente).
Para mais detalhes, consulte systemd.service
a página do manual.
Solução de problemas .
Comece aqui:
Como ver o log completo de um systemd
serviço?
systemd
códigos de saída de serviço e explicação das informações de status
echo SOMETHING > /some/file
que (ou qualquer outro comando, de fato) devem se familiarizar com o básico da CLI antes de tentar executar coisas em seus sistemas. Além disso, FYI, leia como desativar a dGPU em vários modelos de laptops, veja se os comandos usados lá podem ser substituídos por algo como você sugere. Além disso, para restaurar o arquivo original, você geralmente reinstala o pacote que o possui.