[gelöst] suspend2ram außer Programm X ist gestartet
- Patsche
- Beiträge: 3262
- Registriert: 21.06.2013 01:47:54
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home/10001101001
[gelöst] suspend2ram außer Programm X ist gestartet
Hi,
ich muss mich mal wieder an euch wenden. Ich nutze hier Jessie mit Xfce und ärgere mich jedesmal über mich selbst, dass ich den Laptop zuklappe, obwohl gerade ein ein großer Download läuft. Jetzt gibt es ja mehrere Möglichkeiten, wobei mir ein Script am liebsten wäre, welches überprüft, ob beispielsweise unison gerade aktiv ist, wenn ja, dann kein suspend nach dem zuklappen, wenn nicht -> ab in den standby. Das Skript sollte für erfahrene Skripter wohl nicht schwer sein, da ja nur eine if-Anweisung gebraucht wird. Ob ein Programm läuft könnte man ja beispielsweise mit "ps -A" und "grep" in Erfahrung bringen. Aber ich weiß nicht, wie ich das ganze nun zusammenschustere und wie ich dem System klar mache, dass beim zuklappen dieses Skript benutzt wird. Das ganze muss natürlich ohne Eingabe des Passwortes funktionieren, sonst wäre es ja sinnlos. Ich weiß absolut nicht wie ich da ansetzten soll. Könnt ihr mir helfen? Am besten wie ne Anleitung, wenn es ginge. Ich danke euch vielmals.
ich muss mich mal wieder an euch wenden. Ich nutze hier Jessie mit Xfce und ärgere mich jedesmal über mich selbst, dass ich den Laptop zuklappe, obwohl gerade ein ein großer Download läuft. Jetzt gibt es ja mehrere Möglichkeiten, wobei mir ein Script am liebsten wäre, welches überprüft, ob beispielsweise unison gerade aktiv ist, wenn ja, dann kein suspend nach dem zuklappen, wenn nicht -> ab in den standby. Das Skript sollte für erfahrene Skripter wohl nicht schwer sein, da ja nur eine if-Anweisung gebraucht wird. Ob ein Programm läuft könnte man ja beispielsweise mit "ps -A" und "grep" in Erfahrung bringen. Aber ich weiß nicht, wie ich das ganze nun zusammenschustere und wie ich dem System klar mache, dass beim zuklappen dieses Skript benutzt wird. Das ganze muss natürlich ohne Eingabe des Passwortes funktionieren, sonst wäre es ja sinnlos. Ich weiß absolut nicht wie ich da ansetzten soll. Könnt ihr mir helfen? Am besten wie ne Anleitung, wenn es ginge. Ich danke euch vielmals.
Zuletzt geändert von Patsche am 19.06.2014 17:54:58, insgesamt 1-mal geändert.
- frodo
- Beiträge: 342
- Registriert: 08.06.2007 09:16:15
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: Burnley
-
Kontaktdaten:
Re: suspend2ram außer Programm X ist gestartet
Moin,
bin ja auch nicht so der Bash Profil..... vielleicht hilft dir das weiter:)
Statt den echo könnte eine Abfrage helfen
Ohne Passwort Eingabe..... würde ich das mit sudo machen
Frank
bin ja auch nicht so der Bash Profil..... vielleicht hilft dir das weiter:)
Code: Alles auswählen
ps -A | grep -q -w unison && echo "running" || echo "not running"
Ohne Passwort Eingabe..... würde ich das mit sudo machen
Code: Alles auswählen
%sudo ALL = NOPASSWD: ALL
VDR: MSI C847MS-E33 onboard. Intel® Celeron® 847 | GT520 | VDR 2.1.6 | Stable | Kernel 3.15.7
Notebook: Lenovo G530 | Wheezy| icewm | Kernel 3.2.0-4-686
Notebook: Lenovo G530 | Wheezy| icewm | Kernel 3.2.0-4-686
- Patsche
- Beiträge: 3262
- Registriert: 21.06.2013 01:47:54
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home/10001101001
Re: suspend2ram außer Programm X ist gestartet
Das Problem ist, dass der Befehl für das Wechseln in den Standbymodus in der Konsole root Rechte braucht:
Oder gibt es noch was anderes? Im Menü von Xfce, also in der GUI, kann ich ja als Benutzer über "Abmelden" -> "Bereitschaft" in den Ruhezustand wechseln. Auf welchen Befehl greift denn die GUI zu? Ich muss ja am besten da irgendwie ansetzten und die if-Anweisung einbauen, aber wo und vorallem wie?
Code: Alles auswählen
pm-suspend
- frodo
- Beiträge: 342
- Registriert: 08.06.2007 09:16:15
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: Burnley
-
Kontaktdaten:
Re: suspend2ram außer Programm X ist gestartet
Moin,
In die Abfrage könnte man sicher auch gtkdialog einbauen.... keine Ahnung wie da Syntax ist.
Frank
Das sollte ja mit sudo kein Problem sein..... wenn es mal eingerichtet ist.Das Problem ist, dass der Befehl für das Wechseln in den Standbymodus in der Konsole root Rechte braucht:
Code: Alles auswählen
sudo pm-suspend
Code: Alles auswählen
#!/bin/bash
prozess=`ps -A | grep -q -w unison`
if [ $prozess -eq 0 ] ; then
kdialog --msgbox "Download ist Aktiv"
else
sudo pm-suspend
fi
exit 0
Frank
VDR: MSI C847MS-E33 onboard. Intel® Celeron® 847 | GT520 | VDR 2.1.6 | Stable | Kernel 3.15.7
Notebook: Lenovo G530 | Wheezy| icewm | Kernel 3.2.0-4-686
Notebook: Lenovo G530 | Wheezy| icewm | Kernel 3.2.0-4-686
- Patsche
- Beiträge: 3262
- Registriert: 21.06.2013 01:47:54
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home/10001101001
Re: suspend2ram außer Programm X ist gestartet
Und wie baue ich das Skript ein? Es soll ja beim Zuklappen abgearbeitet werden. sudo habe ich nicht eingerichtet, aber wenn ich deinen Ansatz nehme:
Werden dann alle Befehle mit vorangestelltem sudo ohne Passwortabfrage abgearbeitet. Natürlüch muss man in der sudoers sein, dass ist mir klar. Aber damit geht ja ein Sicherheitsaspekt flöten, oder?
Danke für die Hilfe!
Code: Alles auswählen
%sudo ALL = NOPASSWD: ALL
Danke für die Hilfe!
Re: suspend2ram außer Programm X ist gestartet
Die DE macht das wohl über dbus oder ähnliche Mechanismen, die eigentliche Arbeit erledigt dann upower.Patsche hat geschrieben:[…]Auf welchen Befehl greift denn die GUI zu? Ich muss ja am besten da irgendwie ansetzten und die if-Anweisung einbauen, aber wo und vorallem wie?
Code: Alles auswählen
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
Wäre nicht vielleicht auch ein Ansatz denkbar, der die Stromsparmodi unterbindet solange ein Download läuft. Für Videoplayer (und Bildschirmschoner?) gibt es solche Programme ja schon. Konkrete Idee habe ich in dieser Richtung zwar keine, aber es würde mir besser gefallen, als ein Skript, das jedes Mal beim Zuklappen ausgeführt wird.
- Patsche
- Beiträge: 3262
- Registriert: 21.06.2013 01:47:54
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home/10001101001
Re: suspend2ram außer Programm X ist gestartet
Also würde das komplizierter werden, was?
Hört sich auch gut an. Mal sehen, ob ich was finde. Vielleicht hat ja noch jemand eine Idee.smutbert hat geschrieben:Wäre nicht vielleicht auch ein Ansatz denkbar, der die Stromsparmodi unterbindet solange ein Download läuft. Für Videoplayer (und Bildschirmschoner?) gibt es solche Programme ja schon. Konkrete Idee habe ich in dieser Richtung zwar keine, aber es würde mir besser gefallen, als ein Skript, das jedes Mal beim Zuklappen ausgeführt wird.
Re: suspend2ram außer Programm X ist gestartet
nicht notwendigerweise. Hast du eine Idee wie bzw. wovon das Skript gestartet werden könnte?Patsche hat geschrieben:Also würde das komplizierter werden, was? […]
Ich habe gerade etwas entdeckt
/proc/acpi/wakeup enthält eine Liste von Geräten, die den Computer aufwecken können (bzw. das Einschlafen verhindern), wobei man dieses Verhalten für jedes einzelne Gerät ein- und ausschalten kann. Bei mir hält die Ethernetschnittstelle (GLAN) das Gerät standardmäßig wach, während das WLAN (die PXSX-Zeile darüber) das nicht tut:
Code: Alles auswählen
Device S-state Status Sysfs node
PS2K S3 *disabled
PS2M S3 *disabled
RP01 S4 *disabled pci:0000:00:1c.0
PXSX S4 *disabled
RP02 S4 *disabled
PXSX S4 *disabled
RP03 S4 *disabled
PXSX S4 *disabled
RP04 S4 *disabled
PXSX S4 *disabled
RP05 S4 *disabled
PXSX S4 *disabled
RP06 S4 *disabled
PXSX S4 *disabled
RP07 S4 *disabled
PXSX S4 *disabled
RP08 S4 *disabled pci:0000:00:1c.7
PXSX S4 *disabled pci:0000:02:00.0
GLAN S4 *enabled pci:0000:00:19.0
EHC1 S4 *enabled pci:0000:00:1d.0
EHC2 S4 *enabled pci:0000:00:1a.0
XHC S4 *enabled pci:0000:00:14.0
HDEF S4 *disabled pci:0000:00:1b.0
PEG0 S4 *disabled
PEGP S4 *disabled
PWRB S3 *enabled
und noch etwas: systemd-inhibit
Damit sollte sich der Standby/Suspend, wenn du systemd verwendest vorübergehend deaktivieren oder das Zuklappen ignorieren lassen (siehe manpage ). So könnte zB ein cron Skript so eine Sperre einrichten, wenn unison läuft/etwas tut — etwas beunruhigend finde ich dabei nur, dass ich in der Manpage auf Anhieb keine Möglichkeit gefunden habe diese Sperre wieder aufzuheben.
und gerade ist mir noch etwas einfacheres gekommen!
Ein Skript, das checkt, ob der Standby erlaubt ist (also unison nicht läuft oder idle ist) und sich andernfalls mit einem exit-Status ungleich 0 beendet. Dieses Skript plazierst du in /etc/pm/sleep.d/ und sorgst durch eine Abfrage dafür, dass es nur beim Versuch einen Suspend auszulösen ausgeführt wird.
Ich denke das sollte den Suspend ebenfalls verhindern. Grundgerüste für die Abfragen solche Skripte findet man relativ leicht:
Code: Alles auswählen
#!/bin/sh
case "$1" in
hibernate|suspend)
#hier kommt die Abfrage nach unison und gegebenenfalls das exit 1 oä hin.
;;
esac
- Patsche
- Beiträge: 3262
- Registriert: 21.06.2013 01:47:54
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home/10001101001
Re: suspend2ram außer Programm X ist gestartet
Vielen Dank für deine Hilfe, aber ich bekomme das alleine nicht hin
Ich habe jetzt eine Datei namens suspend_unison.sh in /etc/pm/sleep.d erstellt und abgespeichet. Das Skript sieht wie folgt aus:
Die Option -w von grep habe ich in keiner man von grep gesehen, deswegen habe ich das mal lit der Option und ohne probiert, aber keine Änderung.
Ich habe jetzt eine Datei namens suspend_unison.sh in /etc/pm/sleep.d erstellt und abgespeichet. Das Skript sieht wie folgt aus:
Code: Alles auswählen
#!/bin/sh
case "$1" in
hibernate|suspend)
prozess=`ps -A | grep -q unison`
if [ $prozess -eq 0 ] ; then
exit 1
;;
esac
Die Option -w von grep habe ich in keiner man von grep gesehen, deswegen habe ich das mal lit der Option und ohne probiert, aber keine Änderung.
Re: suspend2ram außer Programm X ist gestartet
Ja, dein Skript ist etwas „verunglückt“ Erstens fehlt das fi und zweitens kann imho die Abfrage nach dem Prozess so nicht funktionieren. Eigentlich scheue ich davor zurück anderen shellskript-Bruchstücke vorzuschlagen, weil es da wesentlich geübtere Leute gibt als mich, aber ich würde es eher so versuchen:
(das ist zweifelsohne häßlich, aber es könnte funktionieren)
Code: Alles auswählen
#!/bin/sh
case "$1" in
hibernate|suspend)
ps -A | grep -q unison && exit 1
exit 0
;;
esac
- Patsche
- Beiträge: 3262
- Registriert: 21.06.2013 01:47:54
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home/10001101001
Re: suspend2ram außer Programm X ist gestartet
Leider nicht, ich weiß da auch nicht weiter. Habe auch mal den Tip mit dem WLAN in der /proc/acpi/wakeup ausprobiert, also die WLAN Karte ermittelt und von disabled* auf enabled* geändert. Hat aber auch keine Änderung gebracht...Dabei scheint meine Problematik doch garnicht so exotisch, oder? Ich bin weiterhin für jede Hilfe dankbar.
Re: suspend2ram außer Programm X ist gestartet
Hast du auch daran gedacht, das Skript ausführbar zu machen?
(das Skript selbst hat bei mir funktioniert, ich konnte nur noch nicht testen, ob es auch wie gedacht den Suspend zuverlässig verhindert)
EDIT:
Bei der Benennung wäre es vielleicht dieses Schema besser: https://wiki.archlinux.org/index.php/pm ... _own_hooks
also etwa /etc/pm/sleep.d/00unison
(das Skript selbst hat bei mir funktioniert, ich konnte nur noch nicht testen, ob es auch wie gedacht den Suspend zuverlässig verhindert)
EDIT:
Bei der Benennung wäre es vielleicht dieses Schema besser: https://wiki.archlinux.org/index.php/pm ... _own_hooks
also etwa /etc/pm/sleep.d/00unison
- Patsche
- Beiträge: 3262
- Registriert: 21.06.2013 01:47:54
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home/10001101001
Re: suspend2ram außer Programm X ist gestartet
Das hab ich vergessen. Super, jetzt klappt es Das ist ja gut. Was passiert denn jetzt, wenn ich den zuklappe und dann unison beendet wird? Geht er dann in den Standby? Werde das mal ausprobieren. Das Thema ist somit gelöst, wenn ich jetzt noch ein weiteres Programm nehme, sollte ich lieber ein 2. Skript nehmen, oder dem Vorhandenem ein case2 spendieren?smutbert hat geschrieben:Hast du auch daran gedacht, das Skript ausführbar zu machen?
Danke
Code: Alles auswählen
smutbert
OT:
Nehmen wir mal an, dass ich unsion ausführe und nach der Synchronisation soll er herunterfahren oder in den Standby gehen. Wie stell ich das ohne root-Rechte an?
Re: suspend2ram außer Programm X ist gestartet
mit mehreren Programmen sollte es eigentlich so funktionieren:
Nach dem Beenden von unison wird der PC nicht mehr automatisch in den Suspend gehen, zumindest nicht deswegen weil der PC zugekplappt ist. Nach einem Timeout (wenn der xfce-power-manager so konfiguriert ist) sollte es schon passieren.
Wenn du unison als normaler Benutzer ausführst und es sich hinterher beendet könntest du so einen dbus-Befehl verwenden, wie ich ihn vorher gepostet habe, um den Computer hinterher schlafenzulegen
(weiß aber nicht ob das jetzt suspend to ram oder disk ist)
Code: Alles auswählen
#!/bin/sh
case "$1" in
hibernate|suspend)
ps -A | grep -q unison && exit 1
ps -A | grep -q anderesProgramm && exit 1
exit 0
;;
esac
Nach dem Beenden von unison wird der PC nicht mehr automatisch in den Suspend gehen, zumindest nicht deswegen weil der PC zugekplappt ist. Nach einem Timeout (wenn der xfce-power-manager so konfiguriert ist) sollte es schon passieren.
Wenn du unison als normaler Benutzer ausführst und es sich hinterher beendet könntest du so einen dbus-Befehl verwenden, wie ich ihn vorher gepostet habe, um den Computer hinterher schlafenzulegen
Code: Alles auswählen
unison ; dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
Re: suspend2ram außer Programm X ist gestartet
Ah, was den dbus Befehl angeht (http://upower.freedesktop.org/docs/UPower.html):
- org.freedesktop.UPower.Suspend ist suspend2ram
- org.freedesktop.UPower.Hibernate ist suspend2disk
- org.freedesktop.UPower.Suspend ist suspend2ram
- org.freedesktop.UPower.Hibernate ist suspend2disk