web-dev-qa-db-fra.com

Comment puis-je faire en sorte qu'un script soit toujours exécuté sur CV dans Lubuntu?

J'ai rencontré un ennui sur Lubuntu 11.10, décrit ici:

http://ubuntuforums.org/showthread.php?t=1869357

Je suis venu avec une solution de contournement, décrite ici:

http://ubuntuforums.org/showpost.php?p=11714061&postcount=

Ma solution consiste à placer un script dans /etc/pm/sleep.d pour l’exécuter.

Cependant, la solution de contournement ne semble fonctionner que lorsque je suspends avec pm-suspend. Lorsque je suspends en fermant le couvercle de mon ordinateur portable, ma solution de contournement échoue. Comment puis-je exécuter un script lorsque je quitte le mode veille et que ce sommeil a été déclenché par la fermeture du couvercle?

Détails:

Je soupçonne que cet échec pourrait être dû au fait que les scripts de /etc/pm/sleep.d ne sont pas exécutés lorsque je suspends en fermant le couvercle. La suspension avec pm-suspend, puis la reprise en fermant/ouvrant le couvercle fonctionnent bien. Je pense que Lubuntu utilise xfce4-power-manager pour gérer la suspension en raison de la fermeture du couvercle. Peut-être est-ce important? Je préfère suspendre en fermant le couvercle de mon ordinateur portable plutôt que de taper une commande de terminal.

MODIFIER:

En inspectant /var/log/pm-suspend.log comme suggéré par andrewsomething, nous pouvons constater que le script reset_panel s'exécute à chaque reprise, il échoue simplement sur les curriculum vitae qui suivent des suspensions déclenchées par le couvercle. J'ai suivi sa suggestion supplémentaire d'ajouter une déclaration d'exportation à mon script, et les choses fonctionnent maintenant. Le script se déclenche trop tôt dans le processus de réveil, mais ce n'est pas difficile à corriger. La version actuelle du script:

#!/bin/bash
case "$1" in
   suspend|hibernate)
      #do nothing
   ;;
   resume|thaw)
      export DISPLAY=:0 #What does this do? Are there side effects?
      sleep 5 && lxpanelctl restart & #Delayed so the battery icon can finish wrecking shop.
   ;;
   *)
      exit 1
   ;;
esac
exit 0

andrewsomething, si vous voulez poster une réponse, j'accepte. Merci pour l'aide!

4
Andrew

Le fait que le journal contienne /etc/pm/sleep.d/reset_panel resume suspend: Cant connect to display: indique qu'aucun affichage n'est défini et que vous essayez d'exécuter un programme graphique. Lorsque vous exécutez pm-suspend à partir de votre session, l'affichage correct a probablement été défini par LightDM ou par votre gestionnaire d'affichage. Lorsqu'il est exécuté automatiquement lors de la reprise, je suppose qu'il est exécuté en tant qu'utilisateur root et n'est pas associé à un écran. Vous devez donc définir vous-même la variable display, comme suit:

#!/bin/bash
case "$1" in
   suspend|hibernate)
      #do nothing
   ;;
   resume|thaw)
      export DISPLAY=:0
      sleep 5 && lxpanelctl restart & #Delayed so the battery icon can finish wrecking shop.
   ;;
   *)
      exit 1
   ;;
esac
exit 0

Le seul inconvénient est que cela ne fonctionnera pas si vous affichez n'est pas réellement :0 C'est la valeur par défaut, mais cela pourrait changer en particulier dans un paramètre multi-utilisateur.

2
andrewsomething