J'ai 2 cartes graphiques sur mon ordinateur portable. L'un est IGP et un autre discret.
J'ai écrit un script Shell pour désactiver la carte graphique discrète.
Comment puis-je le convertir en script systemd pour l'exécuter au démarrage?
Pour ce faire, il existe principalement deux approches:
systemd
.Vous avez donc besoin de deux fichiers: le script et le .service
fichier (fichier de configuration de l'unité).
Assurez-vous que votre script est exécutable et que la première ligne (le Shebang ) est #!/bin/sh
. Créez ensuite le .service
fichier dans /etc/systemd/system
(un fichier texte, appelons-le vgaoff.service
).
Par exemple:
/usr/bin/vgaoff
/etc/systemd/system/vgaoff.service
Maintenant, éditez le fichier d'unité. Son contenu dépend du fonctionnement de votre script:
Si vgaoff
éteint simplement le GPU, par exemple:
exec blah-blah pwrOFF etc
alors le contenu de vgaoff.service
devrait être:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff
[Install]
WantedBy=multi-user.target
Si vgaoff
est utilisé pour éteindre le GPU et aussi pour le rallumer, par exemple:
start() {
exec blah-blah pwrOFF etc
}
stop() {
exec blah-blah pwrON etc
}
case $1 in
start|stop) "$1" ;;
esac
alors le contenu de vgaoff.service
devrait être:
[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
Pour éteindre:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
[Install]
WantedBy=multi-user.target
Pour éteindre et rallumer:
[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
Une fois que vous avez terminé avec les fichiers, activez le service:
systemctl enable vgaoff.service
Il démarrera automatiquement au prochain démarrage. Vous pouvez même activer et démarrer le service en une seule fois avec
systemctl enable --now vgaoff.service
à partir du systemd v.220
(sur les anciennes configurations, vous devrez le démarrer manuellement).
Pour plus de détails, voir systemd.service
page de manuel.
Dépannage .
Commencer ici:
Comment voir le journal complet d'un service systemd
?systemd
codes de sortie de service et explication des informations d'état