Wie kann ich Unity neu starten, nachdem ich den Ruhezustand beendet habe?

Wie kann ich Unity neu starten, nachdem ich den Ruhezustand beendet habe?

Das mag wie eine dumme Idee klingen, aber ich hätte gern ein transparentes oberes Panel, das im Compiz Config Settings Manager konfiguriert werden kann. Wenn ich aber aus einem Suspend fortfahre, ist es nicht mehr transparent und es tritt ein grafischer Fehler auf, wenn ich das Dashboard aufrufe. Dies verschwindet, wenn ich Unity neu starte, indem ich den Befehl „unity“ ausführe. Ich habe mich also gefragt, ob es möglich ist, dies zu erreichen. Ich habe versucht, ein Skript /etc/pm/sleep.d/wie in beschrieben einzurichten.wie führe ich einen Befehl nach der Wiederaufnahme aus dem Ruhezustand aus?aber es hat nicht funktioniert. Ich schätze, es wird ausgeführt, bevor ich mich erneut anmelden kann und Unity fortgesetzt wird.

Gibt es eine Möglichkeit, meine Wünsche zu erfüllen, oder sollte ich einfach aufgeben?

Antwort1

Gehe zuSystemeinstellungen > Tastatur > Tastenkombinationen > Benutzerdefinierte Tastenkombinationen

und erstelle ein Neues:

Bildbeschreibung hier eingeben

Legen Sie dann eine einfache Tastenkombination wie Alt+ fest R, um nach dem Anhalten problemlos einen schnellen Neustart von Unity durchzuführen.

Ich leide nicht unter Ihrem Fehler, muss diesen Befehl aber bei jeder neuen Sitzung ausführen, da Unity sich bei neuen Sitzungen keine Edge-Bindungen merkt.

Antwort2

Direkt vondas Handbuch für systemd-suspend.service:

Immediately before entering system suspend and/or hibernation systemd-suspend.service (and the other mentioned units, respectively) will run all executables in /usr/lib/systemd/system-sleep/ and pass two arguments to them. The first argument will be "pre", the second either "suspend", "hibernate", or "hybrid-sleep" depending on the chosen action. Immediately after leaving system suspend and/or hibernation the same executables are run, but the first argument is now "post". All executables in this directory are executed in parallel, and execution of the action is not continued until all executables have finished.

Ich habe einige Tests durchgeführt und festgestellt, dass, wenn Sie ein Skript (das als von allen ausführbar markiert ist, was mit erreicht werden kann chmod a+x) in/lib/systemd/system-sleep,ohne /usr, wird es wie erwähnt ausgeführt.

Jedoch, es gibt einen Nachteil, der Sie glauben lässt, dass es nicht funktioniert: die Umgebung ist anders. Grafische Befehlearbeite nicht. Es gibt wahrscheinlich einen Weg, dies zu umgehen, aber standardmäßigunity --replace wird versagenweil keine Verbindung zum X-Server hergestellt werden kann (und daher keine Befehle funktionieren, die nicht funktionieren, wenn Sie STRG-ALT-F1 drücken und ohne Manipulation in eine echte Konsole gehen).

Okay, ich habe gerade mit dem Tippen aufgehört, um ein wenig zu recherchieren: nach einem Blick auf diegrundlegendes Chroot-Wiki(weil ich das gleiche Problem in Chroots hatte), habe ich festgestellt, dass wenn Sie manuell aufrufenxhost + Voranhalten, grafische Befehle (in meinem Fall zenity --info --text "1:$1 2:$1") funktionieren einwandfrei. Sie können jedoch nicht xhost +aus dem Skript aufrufen. Was SiedürfenSie müssen lediglich ein Programm zu den „Startanwendungen“ hinzufügen, das automatisch aufgerufen wird, xhost +wenn Sie sich anmelden (fügen Sie es dort hinzu und nicht zu, .bashrcda es, wenn es zu hinzugefügt wird, .bashrcjedes Mal ausgeführt wird, wenn Sie einen Terminalemulator öffnen). Bei Unity ist das möglicherweise anders, aber bei Ubuntu MATE kann ich zu „Hinzufügen“ gehen System → Preferences → Personal → Startup Applicationsund auf „Hinzufügen“ klicken, um dies zu tun.

Erstellen Sie dann eine Datei /lib/systemd/system-sleep/restart-unitymit folgendem Inhalt:

#!/bin/bash
export DISPLAY=:0
if [[ "$1" == "post" && "$2" == "suspend" ]]
then
    sleep 5
    unity --replace
fi

und führen Sie es aus sudo chmod a+x /lib/systemd/system-sleep/restart-unity(stellen Sie sicher, dass die Datei root gehört und nur von root geschrieben werden kann).

Beachten Sie, dass esmussverwenden bash. Das liegt an der „if“-Anweisung. Als ich die Anweisung manuell in ausprobiert habe sh, habe ich verschiedene Fehler von dem &&Teil erhalten.

Es sleepist vorhanden, weil ohne es unity --replacedie Verbindung zum X-Server fehlschlagen würde (oder so scheint es).

Basierend auf meinen eigenen Tests mit Zesty sollte dies funktionieren.

Ich habe gerade 15 Minuten damit verbracht, herauszufinden, warum es nicht funktionierte, nur um festzustellen, dass ich die export DISPLAY=:0Zeile vergessen hatte.

Antwort3

Diese scheinen nützlich:

Ist das der Fehler, den Sie sehen?

schlechte_Transparenz_nach_Schlaf.png

verwandte Informationen