Firefox is already running […] e meu primeiro Shell Script!

Muitos usuários de sistemas que precisam logar em um servidor para obterem acesso ao localhost e a seus recursos/pastas pessoais provavelmente já se depararam, com a seguinte mensagem ao abrir o Firefox:

firefox_already_running

Firefox is already running, but is not responding […]
(Firefox já está funcionando, mas não está respondendo […])

Ai você pensa: “Firefox rodando? De forma alguma, acabei de me logar!”

Pois é, quando se é apenas usuário basta chamar alguém para resolver. Mas agora eu estou do lado da administração da rede, e tenho que solucionar esse tipo de imprevisto para os usuários frequentemente. E diga-se de passagem: Ô coisa chata de ser feita viu…

Bom juntando a necessidade de aprender Shell Script com a situação criei um script para corrigir esse problema do firefox, meu primeiro Script!!! Então leia mais!

Geralmente esse problema acontece quando usuários de sistemas que utilizam login em servidores, para disponibilizar as pastas pessoais via NFS, terminam abruptamente uma seção, devido a uma queda de energia ou reset, finalizando o Firefox de forma inesperada. Pode acontecer também do seu profile ter sido apagado, ou as permissões de acesso setadas equivocadamente; Nesses dois casos certifique-se se sua pasta profile ainda está no local correto e se está com permissões adequadas

Bom para resolver a situação basta remover um arquivo (oculto) do seu profile, chama-se parentlock o dito cujo! Ele serve para dizer que o profile já está em uso, evitando assim que haja uma inconsistência de dados caso o profile esteja sendo usado em modo compartilhado.

A Solução é simples, mas vai dizer para o usuário que ele precisa deletar o arquivo oculto, dentro da pasta oculta mozilla, dentro da home dele… Só se vê aquelas caras de: “Hein?! o.Ô”.

Então resolvi criar o script! Ele faz a remoção desse arquivo e em seguida abre o Firefox sem maiores problemas! O maior desafio nisso estava em chegar até a pasta do profile, pois ela possui nomes aleatórios seguindo o padrão:

XXXXXXXX.default [onde X pode ser qualquer letra, maiúscula ou minúscula, ou número].

Na hora pensei: Expressões regulares! Pois existe um arquivo em ~/.mozilla/firefox/ chamado profiles.ini que contém o nome da pasta que guarda o perfil do usuário. Mas pra quem ainda é iniciante, fica complicado… Não desisti!! Criei tempo, não sei da onde, e li boa parte de um livro de Shell! Aprendi o básico do uso de expressões regulares usando o sed e ed. O resultado você pode baixar clicando aqui: ressucita_firefox.sh

O arquivo está comentado, mas não custa deixar registrado aqui também:

sed /Path=/!d’ ~/.mozilla/firefox/profiles.ini >temp1

A expressão acima deleta (d) todas as linhas que não contenham ‘Path=’ do arquivo profiles.ini e salva o que sobrar em temp1. Note que o uso da expressão não escreve no arquivo profiles.ini, portanto não se preocupe em fazer um backup prévio dele.

sed ‘s/Path=//’ temp1 > temp2

A seguir, a expressão substitui (s) a primeira ocorrência de ‘Path=’, em temp1, por nada (//), salvando em temp2, onde teremos apenas o nome da pasta profile! Note também que fiz uso de 2 arquivos temporários (temp1 e temp2) pois uma propriedade do shell é que ao se direcionar o fluxo de dados para um arquivo, este será criado ou destruído, impedindo portanto coisas como:

sed ‘s/Path=//’ temp1 > temp1

Finalmente a remoção:

rm ~/.mozilla/firefox/`cat temp2`/.parentlock

Repare que utilizei `cat temp2` no meio do arquivo afim de obter o endereço da pasta profile. Os acentos agudos, utilizados como apóstrofos, são imprescindíveis para o bom funcionamento pois indicam que a expressão dentro deles deve ser resolvida antes da expressão em geral (no caso rm). Assim temos na verdade a linha a seguir sendo utilizada:

rm ~/.mozilla/firefox/XXXXXXXX.default/.parentlock

E a remoção dos arquivos temporários criados:

rm temp1 temp2

Uma mensagem opcional:

echo “O Firefox sera iniciado em 3 segundos…”

E a execução do Firefox:

exec firefox

É simples, eu sei, mas muito útil, e poupa tempo! Agora basta disponibilizá-lo com um ícone do Firefox e pronto, o usuário nem notará a diferença! Não se esqueça de permitir a execução utilizando o chmod!

Fico por aqui, e aguardo qualquer tipo de sugestão de melhorias! Abraços!

2 Respostas

  1. Pow… Muito bom seu post Mauro…
    Ainda mais que eu já tive que apagar esse arquivo e perdi um bom tempo procurando ele… Como você disse, fiquei com cara de “Hein?! o.Ô”. rs.
    Ótima idéia a do script!

  2. que tal:

    rm ~/.mozilla/firefox/*.default/.parentlock

    resolvido, sem expressão regular, sem nada.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: