Criar atalho que verifica se o programa esta aberto

Iniciado por etapombas, 03 de Março de 2009, 01:11

tópico anterior - próximo tópico

etapombas

Galera queria criar um atalho que antes de abrir o programa verifica se o mesmo já esta aberto e existe essa janela aberta.
Quero usar na calculadora, dai toda vez que pressionar o atalho do teclado ela aparece, mas hoje sempre aparece uma nova.... não quero 10 calculadoras abertas
husauhahusa :P

raidicar

Boas...
é até que, relativamente facil ao mesmo tempo que é relativamente trabalhoso.
o nome do processo que inicia a calculadora é gcalctool, então, vc precisa bolar um script que de um grep e verifique os programas que estão em execução e, se ele localizar o serviço gcalctool, ele não vai executar o comando gcalctool, vai apenas trazer o processo ja rodando na tela, se ele não encontrar o gkcontrol, ele vai executa-lo.
Eu gosto sempre de utilizar arquivos, nesse caso, não vale a pena, mas facilita a compreensão.
então, o comando ps -ef >> /tmp/calculator.txt joga a sadia do comando dentro do arquivo de texto calculator.txt.
ps -ef mostras todos os processos em execução, se a calculadora estiver aberta, o gcalctool estará lá.
Um grep (-parametro) "gcalctool" /tmp/calculator.txt >> /tmp/resultgrep.txt caça la dentro de calculator.txt o processo gcalctool e joga o conteúdo num arquivo texto.
Jogue o conteúdo do arquivo resultgrep.txt em uma variavel e compare o conteudo com outra variável que ja definiu com o nome do processo gcalctool e, defina como comparação onde, se foram iguais, não faça nada e jogue o processo ja rodando na tela, no caso, o gcalctool, se for diferente, é por que a calculadora não esta sendo executada, então, gcalctool será executado.
A unica parte complicada é jogar a calculadora na tela.
agora, não sei se você mudar o nome do gcalctool para gcalctools e jogar o script como executável em /usr/bin e com o nome de gcalctool, ao pressionar o botão da calculadora do teclado, o script e não a calculadora seja executado.

Talvez exista algum parametro de configuração no gnome que automatize isso, que impeça o sistema de abrir processos repetidos e jogue o processo na tela, talvez tenha algo dentro do gconf-editor, sei la, mas eu desconheço, nunca me deparei com essa necessidade e, normalmente, quando me deparo com detalhes assim, não pesquiso muito, prefiro resolver na "unha", como descrito acima.

Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

dudu_ubuntun

Minha sugestão, simples, ms já serve de estímulo para vc estudar shell script ;)

Abra o gedit e cole o seguinte conteúdo:


#!/bin/bash

###verificando se a calculadora esta rodando

consulta=`ps aux | grep gcalctool  | wc -l`

#### se
echo  $consulta

if [ $consulta > "0" ]

then
### ou seja tem um calculadora rodando, vamos encerra-lo e abrir novamente

killall gcalctool

gcalctool &

else
### se nao é maior q zero, nao ta rodando, vamos simplesmente inicia-lo

gcalctool &

fi

exit 0



Salve com um nome qualquer, por exemplo calculadora.sh

Num terminal digite: chmod +x calculadora.sh (ou troque o calculadora.sh pelo nome que vc escolheu)

Agora crie um atalho para esse arquivo que vc criou na área de trabalho.

Era isso, espero que ajude, abraços.


etapombas

Caras obrigado pela ajuda!
É + / - isso que eu queria, vou estudar um pouco o código e ver se tem como ao inves do kill e abrir novamente, apenas trazer para frente o programa.

raidicar

dudu_ubuntun, perfeito.
não montei um script para deixar ele mesmo desenvolver um.
A unico porém é justamente trazer a calculadora aberta na frente de todas as telas, isso eu não sei como fazer, faria a mesma coisa que vc, mataria o processo e executaria novamente o mesmo, tendo o mesmo resultado, exceto pelo fato de que se a calculadora tivesse alguma conta, essa seria perdida ao matar o processo.
dudu_ubuntun, meu teclado não é multimidia, então, se eu mover gcalctool para gcalctools dentro do /usr/bin e chamar o script de gcalctool, e fazer o script rodar apenas como aplicação (na verdade, pode rodar num terminal mesmo, é só para não abrir a tela do terminal), ao teclar a tecla de atalho no teclado, correspondente a calculadora, ele executará o script ou a calculadora?
Creio que ele execute o script, mas, pode ser que exista um gerenciador que faça, ainda assim, executar a calculadora.
É só curiosidade.
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

dudu_ubuntun

boa tarde raidicar,

Sim, sei q é bem legal ele mesmo desenvolver os proprios scripts, esse ta bem simples, ms foi o q deu pra fazer em 3 min rss.

Sobre trazer pra frente nunca vi rss, vou estudar.

Sobre matar todas as calculadoras, vc so consegue matar os proprios processos

Se vc criar um atalho para o script nao vai abrir um terminal, vai apenas abrir a calculadora

pode criar as teclas de atalho sim

Abs

Kamei Hyoga

O script ficou ótimo. Mas me veio uma pergunta... não seria mais fácil usar Alt+TAB até a janela da calculadora já aberta aparecer?

Se ela estaria aberta ou não, bastaria ver na lista de janelas abertas.

dudu_ubuntun

Boa tarde Kamei Hyoga

Realmente existem mil maneiras de vc resolver um problema.

Uso bastante o ALT+TAB pq digito bastante, e é realmente bem prático

Porém a graça desse tópico está em apresentar um shell script, ver que existem mil maneiras de se resolver o mesmo problema, etc.

Pense que nao fosse um aplicativo gráfico, ms algo do tipo um "pon" que vc nao sabe se ta conectado, e o alt+tab nao resolveria, esse script seria de alguma utilidade concorda?

Ms gosto mto ALT+TAB sim ;)

Abs


Darcamo

Uma dock também pode ser uma boa pedida.
Uso o cairo-dock e após clicar em um "atalho na dock" para um programa ele é aberto. Clicar novamente não vai abrir outro, mas apenas minimizar ou mazimizar. Se eu realmente quiser abrir outro programa igual basta segurar a tecla shift e então clicar.
Clicar com o botão do meio fecha o programa.

É bem prático e substitui a minha taskbar, já que se eu abrir um programa que não possui atalho na dock ele é acrescentado nela (mas nesse caso apenas enquanto estiver aberto para que assim a dock possa funcionar como taskbar).

Kamei Hyoga

Entendi perfeitamente dudu_ubuntun ^^

Eu fiz um programa pra postar fotos em fórum. Ele cria thumbs, os códigos BBCode e upa as fotos via ftp e depois me mostra os links. Poderia usar um imagebam da vida, mas gosto da minha cria hehe


Nós somos loucos!!!!!! KKKKKKKKKKKK

clcampos

Citação de: Kamei Hyoga online 06 de Março de 2009, 20:30
Entendi perfeitamente dudu_ubuntun ^^

Eu fiz um programa pra postar fotos em fórum. Ele cria thumbs, os códigos BBCode e upa as fotos via ftp e depois me mostra os links. Poderia usar um imagebam da vida, mas gosto da minha cria hehe


Nós somos loucos!!!!!! KKKKKKKKKKKK

Não acho nenhum de vocês loucos... bem, eu não sou!

Eu gerencio uma rede com vários micros, a grande maioria com Ubuntu. O Server de arquivos também é Ubuntu, e a $HOME de todos os usuários estão nele (com permissão 700). Esta semana fiz um script (para usar no Nautilus) para os usuários copiarem arquivos para vários destinos (outros usuários, $HOME, Desktop, pendrives espetados na máquina, floppy - se o PC tiver).

O Script ficou bonzinho, mais de 300 linhas... Algumas coisas talvez até não necessitariam ser feitas, mas fazer um Shell Script é muito legal (putz... acho que to ficando mesmo louco... hehehehe), e é algo que eu realmente gosto.

[]'s

Cristiano
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

dudu_ubuntun

Acho que foi isso que fscinou no linux: a  possibilidade de "programar", criar rotinas, enfim, suprir nossas necessidades com coisas simples como shell scripts ;)

Abs

raidicar

clcampos, mas numa coisa tem de concordar, apesar de shellscript ser excelente, de ser uma solução rápida para problemas, as vezes, complexos, DEBUGAR EM SHELL É UMA DROGA QUANDO A COISA CRESCE E ULTRAPASSA A FRONTEIRA DAS 1500 LINHAS.
Ainda mais quando o script NÃO é seu.
Tenho de terminar de desenvolver uma aplicação que dará as opções:
1 - configurar rede (ip, gateway, mascara e dns)
2 - configurar host e mais cinco arquivos textos.
3 - 17 tipos de cópias diferenciadas.
Exemplos:
(diretório X para diretório X de outro computador)
(diretório Y para diretório Y de outro computador)
(diretório X para diretório X de varios computadores)
O usuário tem de informar o tipo de cópia a ser executada.
4 - sincronizar 40 pastas em nove servidores com o rsync.
E Mais outras 12 opções um pouco mais complexas.
Tudo isso será feito de forma que o usuário entre com o mínimo de dados possiveis, então, tenho apenas dois menus, uma onde informa a função desejada e, dependendo da opção selecionada, ele solicita que seja informado o numero do micro de onde funções serão executadas, como a cópia de arquivos.
Após informado, o script faz o resto.
Esse script é para economizar tempo no treinamento de técnicos e evitar os erros que eles cometem quase diariamente.
Ex: copiar diretório X para diretório Y de outro computador simplesmente fode tudo e leva-se horas para corrigir se demoramos mais de 6 horas para descobrir o problema.
Para facilitar, usei o dialog e essa droga ficou com pouco mais de 1200 linhas.
Até ai, moleza, ficou ótimo, com as caixas, nenhum valor é digitado pelo técnico nesse script.
E nenhum momento é selecionado mais que três opções, independentemente do que o técnico queira fazer.

Agora me deparei com o fato que em 300 computadores, devido a versão do kernel, compiladores e outras incompatibilidades, a instalação do dialog nesses micros é impossivel, tenho de re-fazer o script sem o dialog, com o valor informado no terminal, de modo que o técnico insira o valor e, ao fazer isso, tenho de colocar um monte de condições no script, do tipo:
caso a variavel tenha mais de dois caracteres faça isso.
caso a variavel tenha letras faça isso.
caso a variavel tenha numeros faça isso.
e dalhe case
A droga do script subiu para 2800 linhas, então, pensei em fazelo de outra forma, declarando mais váriáveis, centralizando e criando mais laços, na verdade, criei todos os laços possiveis e reduzi o script para 1300 linhas.
e dalhe for, until...
Ainda estou testando esse novo script.
Não sou do tipo que vai fazendo e testando, faço ele inteiro e depois testo quando esta pronto, para não perder o pique ou a lógica, e, ai é que se torna um saco, é erro de tudo que é lado, loops infinitos aparecem (as vezes acho que sou bom nisso), falta de vírgulas, um parênteses faltando em outro lugar, um "esac, fi ou done" que esqueci.
DEBUGAR é uma derma, alguns erros ele mostra em uma determinada linha, mas o problema é uma virgula que esta em uma outra linha, o que as vezes, me faz demorar para localizar.
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

Kamei Hyoga

Precisamos criar a "Liga do Shell Script" agora hehehe


Vide minha usebar, quem não entendeu.

clcampos

radicar quando vejo que o script ficará grande assim eu o divido em vários arquivos, procurando assim diminuir o tamanho/complexidade das rotinas, e também facilitando testes caso necessário.


  • Menus para mim são somente menus, que chamam as outras rotinas
  • Coisas a serem usadas em mais de um local viram um arquivo separado também para não duplicar código

Faço várias coisas para facilitar minha vida, e vou te dizer que nunca tive problemas com isto, e olha que tenho rotinas que somados os códigos são muito maiores que isto (minha rotina de Controle Interno de onde trabalho faz backup, restore, cria/exclui grupos, usuários, limpa HD, e controla muito mais coisas, e foi separada em vários arquivos que somados fica bem grande).

Outra coisa, quando uma rotina da erro executo ela da seguinte maneira:

Citarsh  -x  rotina.sh  2>   execRotina

Ai vejo tudo que foi feito no arquivo criado (execRotina), o que facilita muito minha vida também.
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!