J'ai 2 cartes graphiques sur mon portable. L'un est IGP et l'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 ?
Réponse acceptée :
Il existe principalement deux approches pour le faire :
- Si vous devez exécuter un script, vous ne le convertissez pas mais exécutez plutôt le script via un
systemd
services.
Il vous faut donc deux fichiers :le script et le .service
file (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 brut, appelons-le vgaoff.service
).
Par exemple :
- le script :
/usr/bin/vgaoff
- le fichier unité :
/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
puis 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
puis 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 les cas les plus triviaux, vous pouvez vous passer du script et exécuter directement une certaine commande :
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
depuis 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 .
Commencez ici :
Comment voir le journal complet d'un systemd
service ?systemd
codes de sortie de service et explication des informations d'état