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
systemdaus 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