En Ubuntu 12.04 LTS, me gustaría ejecutar scripts después de reanudar la suspensión y después de desbloquear mi escritorio. Estos deben ejecutarse como mi usuario y con acceso a mi $DISPLAY
.
En particular, me gustaría
- reiniciar
nm-applet
para evitar el error 985028 - mostrar una notificación personalizada usando
notify-send
- posiblemente otras cosas cuando empiece a funcionar
Cuando reanudo, los scripts /etc/pm/sleep.d/
se ejecutan, pero se ejecutan como root, sin conocer mi pantalla y nombre de usuario. Podría funcionar si codifico mi nombre de usuario y export
el valor predeterminado DISPLAY :0
en estos scripts, pero eso se siente como un truco muy feo.
Scripts en ~/.config/autostart/xyz.desktop
ejecución después de iniciar sesión, pero no se ejecutan después de simplemente desbloquear la pantalla después de reanudar.
¿Hay alguna manera de ejecutar scripts después de desbloquear la pantalla después de un currículum?
users
, suponiendo que nadie más haya iniciado sesión. (O no importa)Respuestas:
Parece que de todos modos tiene que codificar el nombre de usuario en la respuesta anterior, así que aquí hay un script simple para /etc/pm/sleep.d si alguien está buscando una solución rápida:
fuente
Esta pregunta en el sitio de Unix y Linux documenta un enfoque alternativo utilizando mensajes dbus:
(Reemplace SCREEN_LOCKED y SCREEN_UNLOCKED con las acciones que desea realizar).
El uso de
xrandr 1>/dev/null 2>1
la acción de desbloqueo solucionó mi problema de que las resoluciones / posiciones del monitor no se restauraban correctamente al desbloquear la pantalla (xrandr parece causar una nueva lectura de la configuración de la pantalla). Agregué esta línea como una tarea en segundo plano en mi .bash_profile (estrictamente podría ser mejor como un archivo de escritorio en ~ / .config / autostart, ya que eso solo se ejecuta cuando inicia gnome):Puede encontrar más información sobre la API de gnome-screensaver en este sitio y en el monitor dbus aquí .
fuente
Una solución es un script que se ejecuta al iniciar sesión en el escritorio y que capta los mensajes dbus. Después de reanudar la suspensión, la pantalla se bloquea y luego de ingresar la contraseña, hay un evento de desbloqueo en dbus.
(Gracias a Kim SJ por ponerme en el camino correcto. No tengo señales de ScreenSaver, pero encontré otra interfaz para usar).
En
~/.config/autostart/
, tengo un archivo .desktop que inicia un script bash:La
unlock_monitor
secuencia de comandos del monitor lee los mensajes de dbuscom.canonical.Unity.Session
y hace cosas en lasUnlocked
señales:Al iniciar sesión, no hay señal de "Desbloqueado", pero hay una señal de "Nombre adquirido" cuando se
dbus-monitor
inicia.fuente
Puede ejecutar un script usando start-stop-daemon. start-stop-daemon puede bifurcar el hilo ejecutándose como uid y gid diferentes, resolviendo así su problema.
Lo que debe hacer es escribir un script de trabajo colocado en la RUTA del sistema como
/usr/bin
, y crear un script de demonio adicional en/etc/pm/sleep.d
.pm-suspend
Acción coincidente comoresume
othaw
el script daemon confirma el script de trabajo a través dedonde
ARGs
podría ser--chuid 1001:1001
o simplemente--user your_username
.Y para mayor integridad, es posible que también desee que el script daemon detenga el damon nombrado
nm-rtvt
antes de suspenderlo a través depm-suspend
acciones coincidentes comosuspend
ohibernate
.Para más detalles
man start-stop-daemon
,. Y hay muchos otros ejemplos/etc/init.d
de scripts de daemon.fuente