
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:
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, .bashrc
da es, wenn es zu hinzugefügt wird, .bashrc
jedes 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 Applications
und auf „Hinzufügen“ klicken, um dies zu tun.
Erstellen Sie dann eine Datei /lib/systemd/system-sleep/restart-unity
mit 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 sleep
ist vorhanden, weil ohne es unity --replace
die 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=:0
Zeile vergessen hatte.
Antwort3
Diese scheinen nützlich:
Ist das der Fehler, den Sie sehen?