Ich habe 2 Grafikkarten in meinem Laptop. Eines ist IGP und ein anderes diskret.
Ich habe ein Shell-Skript geschrieben, um die diskrete Grafikkarte auszuschalten.
Wie kann ich es in ein systemd-Skript konvertieren, um es beim Start auszuführen?
Akzeptierte Antwort:
Dafür gibt es hauptsächlich zwei Ansätze:
- Wenn Sie ein Skript ausführen müssen, konvertieren Sie es nicht, sondern führen das Skript über ein
systemd
aus Dienst.
Dazu benötigen Sie zwei Dateien:das Skript und den .service
Datei (Unit-Konfigurationsdatei).
Stellen Sie sicher, dass Ihr Skript ausführbar ist und die erste Zeile (die shebang ) ist #!/bin/sh
. Erstellen Sie dann den .service
Datei in /etc/systemd/system
(eine reine Textdatei, nennen wir sie vgaoff.service
).
Zum Beispiel:
- das Skript:
/usr/bin/vgaoff
- die Unit-Datei:
/etc/systemd/system/vgaoff.service
Bearbeiten Sie nun die Unit-Datei. Sein Inhalt hängt davon ab, wie Ihr Skript funktioniert:
Wenn vgaoff
schaltet nur die GPU aus, z. B.:
exec blah-blah pwrOFF etc
dann den Inhalt von vgaoff.service
sollte sein:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff
[Install]
WantedBy=multi-user.target
Wenn vgaoff
wird verwendet, um die GPU auszuschalten und auch wieder einzuschalten, z. B.:
start() {
exec blah-blah pwrOFF etc
}
stop() {
exec blah-blah pwrON etc
}
case $1 in
start|stop) "$1" ;;
esac
dann den Inhalt von vgaoff.service
sollte sein:
[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
- Für die trivialsten Fälle kann man auf das Skript verzichten und direkt einen bestimmten Befehl ausführen:
Ausschalten:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
[Install]
WantedBy=multi-user.target
Zum Aus- und Einschalten:
[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
Wenn Sie mit den Dateien fertig sind, aktivieren Sie den Dienst:
systemctl enable vgaoff.service
Es startet automatisch beim nächsten Booten. Mit
können Sie den Dienst sogar in einem Rutsch aktivieren und startensystemctl enable --now vgaoff.service
ab systemd v.220
(bei älteren Setups müssen Sie es manuell starten).
Weitere Details finden Sie unter systemd.service
Handbuchseite.
Fehlerbehebung .
Beginnen Sie hier:
So sehen Sie das vollständige Protokoll eines systemd
service?systemd
Service-Exit-Codes und Erklärung der Statusinformationen