Scripts para recuperar aplicativos que não retornam de forma correta da hibernação.
(Scripts to retrieve applications that don't return correctly from hibernation.)
hibernar, suspender, hibernate, suspend, em espera, resume, skype
Não sei se tem outra forma de fazer isso, se tiver uma forma mais simples gostaria de saber.
É que tem aplicativos que não retornam de forma correta da hibernação e suspend.
Então escrevi alguns scripts para solucionar este problema.
Como disse, caso haja alguma forma mais simples de fazer isso gostaria de saber.
Bem, vamos aos scripts...
(vou utilizar o aplicativo Skype como exemplo)
1)
[para quem instalou o sistema de controle remoto, este item foi abordado no post...
http://ubuntuforum-br.org/index.php/topic,50441.msg460320.html#msg460320
faça a correção por lá!
]
[Inicio Editado 21/01/2012 (bug)]Crie os scripts deste item de acordo com as instruções do
post #8Crie o seguinte script.
As instruções de como criar estão no início do script.
------ inicio script in_out_suspend
#!/bin/bash
# sudo su
# cd /etc/pm/sleep.d
# gedit in_out_suspend &
# e coloque isto... (depois salve e execute chmod 755 in_out_suspend)
# substitua as ocorrencias de username por seu nome do diretório home
. /usr/lib/pm-utils/functions
case "$1" in
hibernate|suspend)
# (roda ao suspender)
# crie o arquivo /home/username/.Xauthority
export DISPLAY=:0.0
export XAUTHORITY=/home/username/.Xauthority
# assim, roda aplicativo como usuário home
#sudo LANG=pt_BR.utf8 LANGUAGE=pt_BR:pt:en -u username -i aplicativo
# [Editado...
# Correção:
# Desta forma não hiberna se o processo não está rodando no momento da hibernação por causa do erro em pkill!
# A forma correta de finalizar os processos está colocada logo abaixo
## pkill -TERM skype
#pkill -TERM aplicativo 2
#pkill -TERM aplicativo 3 ...
# ]
# obs.: somente se o processo está rodando, dá um pkill no mesmo.
processes="utorrent.exe skype"
for i in $processes; do
if ps -C $i >&- 2>&-
then
pkill -TERM $i
fi
done
;;
thaw|resume)
# (roda ao voltar de suspend)
# crie o arquivo /home/username/.Xauthority
export DISPLAY=:0.0
export XAUTHORITY=/home/username/.Xauthority
# assim, roda aplicativo como usuário home
#sudo LANG=pt_BR.utf8 LANGUAGE=pt_BR:pt:en -u username -i aplicativo
;;
*)
;;
esac
exit
------ fim script in_out_suspend[Fim Editado 21/01/2012 (bug)]Referência:
http://ubuntuforums.org/showthread.php?t=11908942)
[para quem instalou o sistema de controle remoto, este item já está pronto]Para criar um novo arquivo .Xauthority , os seguintes comandos podem ser usados...
vá para o seu diretório home e digite:
HOST=`hostname`
key1=`perl -e 'srand; printf "%08x", int(rand(4294967295))'`
key2=`perl -e 'srand; printf "%08x", int(rand(4294967295))'`
key3=`perl -e 'srand; printf "%08x", int(rand(4294967295))'`
key4=`perl -e 'srand; printf "%08x", int(rand(4294967295))'`
key=$key1$key2$key3$key4
xauth -f .Xauthority add ${HOST}/unix:0 . $key
(se o arquivo .Xauthority já não existir, sairá a mensagem a seguir)
xauth: creating new authority file .Xauthority
Referência:
http://ubuntuforums.org/showthread.php?t=13863293)
crie a pasta ~/bin
crie, na pasta ~/bin, este script com o nome de skype-wrapper
------- inicio skype-wrapper
#!/bin/bash
export LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so
! ps -C skype && skype &
------- fim skype-wrapper
Referência: centenas, é só dar um google :)
Abra a pasta ~/bin, clique com o botão direito do mouse sobre skype-wrapper,
vá em Propriedades, Permissões e de permissão para execução.
(não esqueça de fazer o mesmo para todos os scripts adiante)
Nos menus do Ubuntu substitua skype por skype-wrapper !!!------------------------------------------------------------------------Se quiser apenas matar o aplicativo que retornará errático após hibernação sem que ele seja reiniciado automáticamente,
apenas ignore os itens
4,
5 e
6, que têm os scripts
skype_init e
reactivate_skype------------------------------------------------------------------------4)
crie, na pasta ~/bin, este script com o nome de skype_init
-------- inicio skype_init
#!/bin/bash
# Nome desse arquivo: skype_init
# inicialização de skype ao ligar o computador ou reiniciar sessão
# Em aplicativos de sessão colocar
# Nome: skype_init
# Comando: skype_init
# Comentário: inicializa skype
# inicializa skype
killall reactivate_skyp
# Editado: cortada a última letra para ficarem só 15 letraskillall skype # mata aplicativo errático em sessão reiniciada (**no caso** do aplicativo skype, ele é encerrado ao reiniciar a sessão)
reactivate_skype &
-------- fim skype_init
Referência: Eduardo/boladegude
5)
Como mencionado no interior do script acima
Em aplicativos de sessão colocar
Nome: skype_init
Comando: skype_init
Comentário: inicializa skype
6)
crie, na pasta ~/bin, este script com o nome de reactivate_skype
-------- inicio reactivate_skype
#!/bin/bash
# nome deste script: reactivate_skype
# Reabilita o skype se por algum motivo estiver encerrado...
# por exemplo, em um resume de suspend ou hibernate,
# nos quais o skype recebeu um killall (porque o processo skype volta errático de um suspend).
# Não dá certo lançar skype no shell script de resume do suspend,
# mesmo com sudo -u -i, porque nesse shell ficam faltando informações importantes
# da sessão do X iniciada em seguida na tela.
# O skype precisa ser chamado dentro da sessão do X.
# Então o presente script reinicia o skype dentro da sessão do X.
#
# O script skype_init, nos aplicativos de sessão, reinicializa
# o presente script ao ligar o computador e ao reiniciar a sessão.
#======================================== (consistencia)
# reabilita skype no caso de resume de suspend ou hibernate e ao iniciar a sessão.
#======================================== (inicio)
while true
## Editado: true estava num subshell: while (true)do
sleep 15
# aumentando para 15 segundos ocupa menos do processadorif ! ps -C skype >&- 2>&-
then
skype-wrapper
fi
done
#======================================== (fim)
-------- fim reactivate_skype
Referência: Eduardo/boladegude
7)
Na janela do Skype, marque a opção [V] Conectar ao iniciar o Skype
8)
De forma geral estes scripts podem ser utilizados para qualquer aplicativo.
É só mudar o nome dos scripts e do aplicativo sendo encerrado e reiniciado nos scripts.
Ou seja,
Troque
skype_init
reactivate_skype e
skype
por
aplicativo_init
reactivate_aplicativo e
aplicativo
Pronto, agora seu aplicativo skype estará sempre funcional, mesmo após hibernar, suspender, reiniciar a sessão ou desligar.
Seriam bem vindos "um ou dois" comentários tipo - funcionou na minha máquina.
E comentários sobre possíveis problemas.