Wie debugge ich ein Suspend-Problem?

10

Ich hatte Fedora 14 auf diesem HP Compaq 610 installiert, und die Suspend-Funktion funktionierte einwandfrei. Nachdem ich Scientific Linux 6.1 suspend installiert habe, funktioniert suspend nicht mehr. Wie debugge / behebe ich es?

LanceBaynes
quelle
Ist dies das Shell-Suspend (<kbd> Cntl-z </ kbd>) oder das Betriebssystem (Ruhezustand oder Ruhezustand)?
Arcege
@Arcege: Ich würde annehmen, dass er ACPI Suspend meinte, da es heutzutage ein so häufiges Problem ist.
JM Becker

Antworten:

9

Es gibt viele Möglichkeiten, mit Suspend- und Hibernate-Funktionen umzugehen. Viele der alten Methoden sind veraltet. Dies hat die Suche nach Lösungen schwierig gemacht, da anscheinend jede Lösung völlig unabhängig von der nächsten ist. Nachdem das gesagt worden ist...

Die derzeit empfohlene Methode, die von http://pm-utils.freedesktop.org/wiki/ empfohlen wird , sollte für die neuesten Distributionen verfügbar sein. Ich würde zuerst prüfen, ob Sie pm-utilsinstalliert haben und ob die enthaltenen Befehle wie erwartet funktionieren.

Um anzuzeigen, ob das Paket installiert ist, geben Sie diesen Befehl im Terminal ein

rpm -qa | grep pm-utils

Dies sollte die von Ihnen installierte Version ausgeben. Wenn Sie nicht die erwartete Ausgabe erhalten, müssen Sie das Paket installieren.

sudo yum install pm-utils

Sobald Sie dies überprüft haben, testen Sie Ihre Fähigkeit zum Suspendieren.

sudo pm-suspend

Wenn Sie nicht anhalten und keine Ausgabe erhalten, überprüfen Sie die aktuelle dmesg-Ausgabe

dmesg | tail -50

Dies sollte Ihnen den Einstieg erleichtern. Sobald Sie einige Hinweise erhalten haben, ist es viel einfacher, den Weg weiter hinunterzugehen. Poste zurück mit Kommentaren zu deinen Ergebnissen, ich kann dich durch den Rest bringen.

JM Becker
quelle
Ich habe sogar pm-utils-devel installiert. pm-suspend mit Root-Benutzer macht dasselbe wie mit einem normalen Benutzer, wenn er auf GNOME / menu-> suspend-> nothing klickt. Der Computer sagt nur "Netzwerk ist ausgeschaltet", dann wartet er nur und wartet usw. Ich kann Ich fange nichts an, nachdem ich versucht habe zu suspendieren. Ich werde das dmesg später sehen, danke!
LanceBaynes
Die dmesgAusgabe zeigt Ihnen, was sich hinter den Kulissen abspielt. Noch wichtiger ist, was insbesondere scheitern könnte. Übrigens, Sie brauchen das Entwicklungspaket nicht. Sie benötigen sie nur beim Kompilieren von Code. Sie können sie also löschen. Von hier aus gibt es viele Richtungen, ich möchte Sie nur nicht dazu bringen, den falschen Baum zu bellen.
JM Becker
1
@LanceBaynes Haben Sie versucht, die pm-suspendBefehle über eine Shell und nicht über das GNOME-Menü auszuführen? Versuchen Sie es echo -n "mem" >/sys/power/stateals root. Auch wenn Sie verwenden acpi, können Sie acpi_listensehen, welche Ereignisse generiert werden, z. B. beim Schließen des Deckels.
WOW, wtf? Ich "echo -n" mem "> / sys / power / state" mit dem Root-Benutzer, und mein tatsächlich suspendiert !!!! BEEINDRUCKEND. Das einzige Problem ist jetzt, dass wenn ich diese Art von Suspend mache, der Gnome-Bildschirmschoner nicht startet und mir einen entsperrten PC hinterlässt. Wie kann man das umgehen? Wie kann ich ein Skript / irgendetwas erstellen, damit ein normaler Benutzer diese Art von Suspend auch verwenden kann? nicht nur der Root-Benutzer? - und noch etwas: DANKE!
LanceBaynes
2
@ LanceBaynes: Es funktioniert jetzt? ... Ich habe diese Art von "Überraschung" geglaubt, dass Break / Repair nur bei Widoze passiert ist. Leider habe ich für eine Weile aufgehört, das zu glauben. Aber ... auf der positiven Seite, es kommt seltener vor! Und dein Suspend funktioniert, das sind großartige Neuigkeiten!
JM Becker
8

Versuchen Sie dies als root:

PM_DEBUG=true pm-suspend

Suchen Sie dann /var/log/pm-suspend.lognach Hinweisen darauf, was schief gehen könnte.

Wenn Sie anhalten, aber nicht fortsetzen können, gibt es im Ubuntu-Wiki einen guten Artikel zum Debuggen dieses Problems.

Mika Fischer
quelle
2

Wenn Sie nur erhalten möchten, wenn Sie das System angehalten / wieder aufgenommen haben, können Sie Folgendes versuchen:

cat /var/log/syslog | grep 'systemd-sleep' | grep "Suspending\|resumed";
Feb  7 10:44:23 dmatej-lenovo systemd-sleep[19900]: Suspending system...
Feb  7 10:44:33 dmatej-lenovo systemd-sleep[19900]: System resumed.
Feb  7 10:45:35 dmatej-lenovo systemd-sleep[20707]: Suspending system...
Feb  7 12:58:39 dmatej-lenovo systemd-sleep[20707]: System resumed.
Feb  7 14:42:55 dmatej-lenovo systemd-sleep[24690]: Suspending system...
Feb  7 16:31:57 dmatej-lenovo systemd-sleep[24690]: System resumed.
dmatej
quelle
1

Wie von Mika als Wurzel vorgeschlagen:

PM_DEBUG=true pm-suspend

Details innerhalb:

/var/log/pm-suspend.log

In diesem Fall suchen Sie wo

[...] service [servicename] suspend suspend success

endet und

[...] service [servicename] suspend resume success

beginnt. Irgendwo dazwischen finden Sie möglicherweise Anrufe, die einen Fehler zurückgeben. An diesem Punkt wird die Unterbrechung gesperrt. In diesem Fall können Änderungen ausgesetzt werden, die zurückgesetzt werden. Finden Sie heraus, welcher Serviceabruf den Fehler auslöst, öffnen Sie ihn in vi und sehen Sie ihn sich an.

Ich hatte das gleiche Problem, bei dem nach der Installation xboxdrvunter Ubuntu 12.04 in einer Regel /etc/pm/sleep.d/versucht wurde, einen Dienst zu stoppen, der in diesem Fall nie gestartet wurde oder nicht vorhanden war xboxdrv. Es stellte sich heraus, dass es überhaupt nicht gestartet werden konnte, da es kein /lib/modules/uinput.koModul gab, da dieses Modul mit dem Kernel zusammengeführt wurde. Dies führte dazu, dass die case-Anweisung /etc/pm/sleep.d/xboxdrveinen Fehler auslöste, wenn der Fall "suspend" mit dem Aufruf übereinstimmt service xboxdrv stop. Wenn Sie die Zeile mit #Bypass voranstellen, wird die Anweisung umgangen, und zwar auf Kosten des Trennens und erneuten Steckens Ihres Controllers beim Anhalten und Fortsetzen.

SYANiDE
quelle
Ich habe keine Fehler im Debug-Protokoll, nachdem ich dies ausgeführt habe, aber auf magische Weise hat es wieder funktioniert ;-) Ich frage mich, ob es eine dauerhafte Lösung ist ...
Wirone