Tengo 2 tarjetas gráficas en mi computadora portátil. Uno es IGP y otro discreto.
He escrito un script de shell para apagar la tarjeta gráfica discreta.
¿Cómo puedo convertirlo a script systemd para ejecutarlo al inicio?
fuente
Tengo 2 tarjetas gráficas en mi computadora portátil. Uno es IGP y otro discreto.
He escrito un script de shell para apagar la tarjeta gráfica discreta.
¿Cómo puedo convertirlo a script systemd para ejecutarlo al inicio?
Hay principalmente dos enfoques para hacer eso:
systemd
servicio.Por lo tanto, necesita dos archivos: el script y el .service
archivo (archivo de configuración de la unidad).
Asegúrese de que su script sea ejecutable y que la primera línea ( shebang ) lo sea #!/bin/sh
. Luego cree el .service
archivo en /etc/systemd/system
(un archivo de texto plano, llamémoslo vgaoff.service
).
Por ejemplo:
/usr/bin/vgaoff
/etc/systemd/system/vgaoff.service
Ahora, edite el archivo de la unidad. Su contenido depende de cómo funciona su script:
Si vgaoff
solo apaga el gpu, por ejemplo:
exec blah-blah pwrOFF etc
entonces el contenido de vgaoff.service
debería ser:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff
[Install]
WantedBy=multi-user.target
Si vgaoff
se usa para apagar la GPU y también para volver a encenderla, por ejemplo:
start() {
exec blah-blah pwrOFF etc
}
stop() {
exec blah-blah pwrON etc
}
case $1 in
start|stop) "$1" ;;
esac
entonces el contenido de vgaoff.service
debería 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 apagar:
[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 apagar y encender:
[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 vez que haya terminado con los archivos, habilite el servicio:
systemctl enable vgaoff.service
Se iniciará automáticamente en el próximo arranque. Incluso podría habilitar e iniciar el servicio de una vez con
systemctl enable --now vgaoff.service
a partir de systemd v.220
(en configuraciones anteriores, deberá iniciarlo manualmente).
Para más detalles ver systemd.service
la página del manual.
Solución de problemas .
Comience aquí:
¿Cómo ver el registro completo de un systemd
servicio?
systemd
códigos de salida de servicio y explicación de información de estado
echo SOMETHING > /some/file
hace (o cualquier otro comando de hecho) deben familiarizarse con los conceptos básicos de CLI antes de intentar ejecutar cosas en sus sistemas. Aparte de eso, para su información, lea cómo desactivar dGPU en varios modelos de computadoras portátiles, vea si los comandos utilizados allí podrían reemplazarse con algo como lo que sugiere. Además, para restaurar el archivo original, generalmente reinstala el paquete que lo posee.