Tengo 2 tarjetas gráficas en mi portátil. Uno es IGP y otro discreto.
Escribí un script de shell para apagar la tarjeta gráfica discreta.
¿Cómo puedo convertirlo a script systemd para ejecutarlo al inicio?
Respuesta aceptada:
Existen principalmente dos enfoques para hacerlo:
- Si tiene que ejecutar un script, no lo convierta, sino que ejecute el script a través de un
systemd
servicio.
Por lo tanto, necesita dos archivos:el script y el .service
(archivo de configuración de la unidad).
Asegúrese de que su secuencia de comandos sea ejecutable y que la primera línea (el shebang ) es #!/bin/sh
. Luego crea el .service
archivo en /etc/systemd/system
(un archivo de texto sin formato, llamémoslo vgaoff.service
).
Por ejemplo:
- el guión:
/usr/bin/vgaoff
- el archivo de la unidad:
/etc/systemd/system/vgaoff.service
Ahora, edite el archivo de la unidad. Su contenido depende de cómo funcione tu script:
Si vgaoff
simplemente apaga la gpu, por ejemplo:
exec blah-blah pwrOFF etc
luego 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 utiliza 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
luego 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 los casos más triviales, puede prescindir del script y ejecutar un determinado comando directamente:
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 más antiguas tendrá que iniciarlo manualmente).
Para obtener más detalles, consulte systemd.service
página de manual.
Resolución de problemas .
Comience aquí:
Cómo ver el registro completo de un systemd
servicio?systemd
códigos de salida del servicio y explicación de la información de estado