No Ubuntu 12.04 LTS, eu gostaria de executar scripts depois de retomar a suspensão e depois de desbloquear minha área de trabalho. Eles precisam ser executados como meu usuário e com acesso ao meu $DISPLAY
.
Em particular, eu gostaria de
- reinicie
nm-applet
para solucionar o bug 985028 - mostrar uma notificação personalizada usando
notify-send
- possivelmente outras coisas quando eu conseguir esses trabalhando
Quando reinicio, os scripts /etc/pm/sleep.d/
são executados, mas são executados como raiz, sem o conhecimento da minha tela e nome de usuário. Pode funcionar se eu codificar meu nome de usuário e export
o padrão DISPLAY :0
nesses scripts, mas isso parece um truque muito feio.
Os scripts são ~/.config/autostart/xyz.desktop
executados após o login, mas não são executados após apenas desbloquear a tela após o reinício.
Existe uma maneira de executar scripts após desbloquear a tela após um currículo?
users
, supondo que ninguém mais esteja logado. (Ou isso não importa) #Respostas:
Parece que você precisa codificar o nome de usuário na resposta anterior de qualquer maneira, então aqui está um script simples para /etc/pm/sleep.d se alguém estiver procurando uma solução rápida:
fonte
Esta pergunta no site Unix e Linux documenta uma abordagem alternativa usando mensagens dbus:
Substitua SCREEN_LOCKED e SCREEN_UNLOCKED pelas ações que você deseja executar.
Usar
xrandr 1>/dev/null 2>1
a ação de desbloqueio corrigiu meu problema de que as resoluções / posições do monitor não estavam sendo restauradas corretamente no desbloqueio da tela (o xrandr parece causar uma releitura das configurações da tela). Adicionei esta linha como uma tarefa em segundo plano no meu .bash_profile (estritamente pode ser melhor como um arquivo da área de trabalho em ~ / .config / autostart, pois isso só é executado quando você inicia o gnome):Informações adicionais sobre a API do gnome-screensaver podem ser encontradas neste site e no monitor dbus aqui .
fonte
Uma solução é um script que é executado ao fazer login na área de trabalho e que captura mensagens do dbus. Após a retomada da suspensão, a tela é bloqueada e, após digitar a senha, ocorre um evento Unlock no dbus.
(Obrigado a Kim SJ por me colocar no caminho certo. Não tenho sinais do ScreenSaver, mas encontrei outra interface para usar).
Em
~/.config/autostart/
, eu tenho um arquivo .desktop que inicia um script bash:O
unlock_monitor
script do monitor lê mensagens dbuscom.canonical.Unity.Session
e faz coisas comUnlocked
sinais:Ao efetuar login, não há sinal "Desbloqueado", mas há um sinal "NameAcquired" ao
dbus-monitor
iniciar.fonte
Você pode executar um script usando start-stop-daemon. O start-stop-daemon pode bifurcar o encadeamento em execução como uid e gid diferente, resolvendo seu problema.
O que você precisa fazer é escrever um script de tarefa colocado no PATH do sistema
/usr/bin
, e criar um script daemon extra no/etc/pm/sleep.d
.pm-suspend
Ação correspondente comoresume
outhaw
o script daemon confirma o script da tarefa viaonde
ARGs
poderia estar--chuid 1001:1001
ou apenas--user your_username
.E para integridade, você também pode querer que o script daemon pare o damon nomeado
nm-rtvt
antes de suspender viapm-suspend
ações correspondentes comosuspend
ouhibernate
.Para detalhes
man start-stop-daemon
,. E há muitos outros exemplos/etc/init.d
de scripts daemon.fonte