
Esto puede parecer una idea estúpida, pero me gusta tener un panel superior transparente que se puede configurar en el Administrador de configuración de Compiz Config, pero cuando reanudo desde una suspensión ya no es transparente y da un error gráfico al invocar el guión. Esto desaparece si reinicio Unity ejecutando el comando "unity". Entonces me preguntaba si era posible lograr esto. Intenté configurar un script /etc/pm/sleep.d/
como se indica en¿Cómo ejecutar un comando después de reanudar desde la suspensión?pero no funcionó, supongo que se ejecuta antes de que pueda iniciar sesión nuevamente y Unity se reanude.
¿Hay alguna manera de lograr lo que quiero o simplemente debería rendirme?
Respuesta1
Ir aConfiguración del sistema > Teclado > Atajos > Atajos personalizados
y crea uno nuevo:
luego configure un método abreviado de teclado sencillo como Alt+ Rpara ejecutar fácilmente un reinicio rápido de Unity después de la suspensión.
No sufro su error, pero necesito ejecutar este comando en cada nueva sesión porque Unity no recuerda los enlaces de borde en las nuevas sesiones.
Respuesta2
Directamente desdeel manual para 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.
Hice algunas pruebas y descubrí que si colocas un script (marcado como ejecutable por todos, que se logra con chmod a+x
) en/lib/systemd/system-sleep
,sin el /usr, se ejecutará como se mencionó.
Sin embargo, hay un inconveniente que es lo que te hace pensar que no funciona: el entorno es diferente. Comandos gráficosNo funcionan. Probablemente haya una manera de evitar esto, pero de forma predeterminada,unity --replace
fallaráporque no puede conectarse al servidor X (por lo que no funcionará ningún comando que no funcione si presiona CTRL-ALT-F1 y accede a una consola real sin manipulación).
Bien, simplemente detuve mi escritura para investigar un poco: después de mirar elwiki básico de chroot(porque tuve el mismo problema en chroots), descubrí que si llamas manualmentexhost +
antesAl suspender, los comandos gráficos (en mi caso zenity --info --text "1:$1 2:$1"
) funcionan correctamente. Sin embargo, no puede llamar xhost +
desde el script. Lo que tupoderLo que debe hacer es agregar un programa a las "aplicaciones de inicio" para llamarlo automáticamente xhost +
cuando inicie sesión (agréguelo allí y no .bashrc
porque si lo agrega .bashrc
se ejecutará cada vez que abra un emulador de terminal). Puede que sea diferente en Unity, pero en Ubuntu MATE puedo ir System → Preferences → Personal → Startup Applications
y hacer clic en Agregar para hacer esto.
Luego, cree un archivo /lib/systemd/system-sleep/restart-unity
con el siguiente contenido:
#!/bin/bash
export DISPLAY=:0
if [[ "$1" == "post" && "$2" == "suspend" ]]
then
sleep 5
unity --replace
fi
y ejecútelo sudo chmod a+x /lib/systemd/system-sleep/restart-unity
(asegúrese de que el archivo sea propiedad de root y solo pueda ser escrito por root).
Tenga en cuenta quedebeusar bash
. Esto se debe a la declaración "si". Cuando probé la declaración manualmente en sh
, obtuve varios errores de la &&
parte.
Está sleep
ahí porque sin él, unity --replace
no podrá conectarse al servidor X (o eso parece).
Según mis propias pruebas con Zesty, esto debería funcionar.
Pasé 15 minutos tratando de descubrir por qué no funcionaba y me di cuenta de que había olvidado la export DISPLAY=:0
línea.
Respuesta3
Estos parecen útiles:
¿Es este el problema que estás viendo?