Как я могу получить скрипт, который всегда будет запускаться при возобновлении работы в 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
Это значение по умолчанию, но оно может измениться, особенно в многопользовательском режиме.