Как я могу получить скрипт, который всегда будет запускаться при возобновлении работы в Lubuntu?

Я столкнулся с раздражением на Lubuntu 11.10, описанным здесь:

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

Я придумал обходной путь, описанный здесь:

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

Мой обходной путь заключается в помещении сценария в /etc/pm/sleep.d для возобновления работы.

Тем не менее, обходной путь, кажется, работает только тогда, когда я приостановил использование pm-suspend. Когда я приостановил работу, закрыв крышку ноутбука, мой обходной путь не удался. Как заставить скрипт работать, когда я возобновляю сон, и этот сон был вызван закрытием крышки?

Подробности:

Я подозреваю, что это может быть связано с тем, что сценарии в /etc/pm/sleep.d не выполняются, когда я приостанавливаю работу, закрывая крышку. Приостановка с помощью pm-suspend, затем возобновление при закрытии / открытии крышки работает нормально. Я считаю, что Lubuntu использует xfce4-power-manager для управления подвеской из-за закрытия крышки, возможно, это важно? Я предпочитаю приостановить работу, закрыв крышку ноутбука, а не набирать команду терминала.

РЕДАКТИРОВАТЬ:

Изучив /var/log/pm-suspend.log в соответствии с предложением andrewsomething, мы увидим, что скрипт reset_panel запускается при каждом возобновлении, он просто завершается ошибкой при возобновлении, которое следует за приостановкой, вызываемой крышкой. Я последовал его дальнейшему предложению добавить оператор экспорта в свой сценарий, и теперь все работает. Сценарий срабатывает слишком рано в процессе пробуждения, но это не сложно исправить. Текущая версия скрипта:

#!/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, если вы хотите опубликовать ответ, я приму. Спасибо за помощь!

1 ответ

Решение

Тот факт, что журнал содержит /etc/pm/sleep.d/reset_panel resume suspend: Cant connect to display: означает, что дисплей не установлен, и вы пытаетесь запустить графическую программу. Когда ты бежишь pm-suspend с вашей сессии, правильный дисплей был установлен, вероятно, LightDM или каким-либо другим дисплеем. Когда он запускается автоматически при возобновлении, я предполагаю, что он запускается от имени пользователя root и не подключен к дисплею. Поэтому вам нужно установить переменную отображения самостоятельно, например, так:

#!/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

Единственным недостатком является то, что это не будет работать, если вы не отображаете на самом деле :0 Это значение по умолчанию, но оно может измениться, особенно в многопользовательском режиме.

Другие вопросы по тегам