Dans Ubuntu 12.04 LTS, je voudrais exécuter des scripts après la reprise de la suspension et après avoir déverrouillé mon bureau. Ceux-ci doivent être exécutés en tant qu'utilisateur et avoir accès à mon $DISPLAY
.
En particulier, je voudrais
- redémarrer
nm-applet
pour contourner le bogue 985028 - afficher une notification personnalisée à l'aide
notify-send
- éventuellement d'autres choses quand je les fais travailler
Lorsque je reprends, les scripts /etc/pm/sleep.d/
sont exécutés, mais ils s'exécutent en tant que root, sans connaître mon écran et mon nom d'utilisateur. Cela pourrait fonctionner si je codais en dur mon nom d'utilisateur et export
la valeur DISPLAY :0
par défaut dans ces scripts, mais cela ressemble à un hack très laid.
Les scripts sont ~/.config/autostart/xyz.desktop
exécutés après la connexion, mais ils ne s'exécutent pas après avoir simplement déverrouillé l'écran après la reprise.
Existe-t-il un moyen d'exécuter des scripts après avoir déverrouillé l'écran après un CV?
users
, en supposant que personne d'autre n'est connecté. (Ou cela n'a pas d'importance)Réponses:
Il semble que vous devez coder en dur le nom d'utilisateur dans la réponse précédente, alors voici un script simple pour /etc/pm/sleep.d si quelqu'un cherche une solution rapide:
la source
Cette question sur le site Unix et Linux décrit une approche alternative utilisant des messages dbus:
(Remplacez SCREEN_LOCKED et SCREEN_UNLOCKED par les actions que vous souhaitez effectuer.)
L'utilisation
xrandr 1>/dev/null 2>1
de l'action sur le déverrouillage a résolu mon problème selon lequel les résolutions / positions du moniteur n'étaient pas correctement restaurées lors du déverrouillage de l'écran (xrandr semble provoquer une relecture des paramètres de l'écran). J'ai ajouté cette ligne comme tâche d'arrière-plan dans mon .bash_profile (strictement, cela pourrait être mieux comme fichier de bureau dans ~ / .config / autostart, car cela ne fonctionne que lorsque vous démarrez gnome):De plus amples informations sur l'API gnome-screensaver peuvent être trouvées sur ce site , et sur le moniteur dbus ici .
la source
Une solution est un script qui s'exécute lors de la connexion au bureau et qui capture les messages dbus. Après la reprise de la suspension, l'écran est verrouillé et après la saisie du mot de passe, il y a un événement de déverrouillage sur dbus.
(Merci à Kim SJ de m'avoir mis sur la bonne voie. Je n'ai pas de signaux ScreenSaver, mais j'ai trouvé une autre interface à utiliser).
Dans
~/.config/autostart/
, j'ai un fichier .desktop qui démarre un script bash:Le
unlock_monitor
script de contrôle lit les messages dbuscom.canonical.Unity.Session
et fait des trucs sur lesUnlocked
signaux:Lors de la connexion, il n'y a pas de signal "Déverrouillé", mais il y a un signal "NameAcquired" au
dbus-monitor
démarrage.la source
Vous pouvez exécuter un script en utilisant le démon start-stop. start-stop-daemon peut bifurquer le thread en cours d'exécution sous différents uid et gid, résolvant ainsi votre problème.
Ce que vous devez faire est d'écrire un script de travail placé dans le système comme PATH
/usr/bin
et de créer un script démon supplémentaire dans/etc/pm/sleep.d
. L'pm-suspend
action correspondante commeresume
outhaw
le script démon valide le script de travail viaoù
ARGs
pourrait être--chuid 1001:1001
ou tout simplement--user your_username
.Et pour l'intégrité, vous pourriez aussi bien vouloir que le script démon arrête le damon nommé
nm-rtvt
avant de suspendre viapm-suspend
actions correspondantes commesuspend
ouhibernate
.Pour plus de détails,
man start-stop-daemon
. Et il existe de nombreux autres exemples/etc/init.d
de scripts de démon.la source