Como posso ativar um ícone de painel através de um script (ou obter suas coordenadas de tela; para clicá-lo)?

4

Esta questão está no contexto da área de trabalho do Lucid 10.04 (ou seja, no Unity).

Eu faço a maioria das navegações de tela através do teclado (não do mouse), então estou procurando uma solução de script para reativar um aplicativo que tenha sido "minimizado" para a área de notificação do painel.

Vou usar Skype como exemplo.

wmctrl me permite acesso suficiente a janelas normalmente minimizadas, mas quando o Skype é "minimizado" para a Área de Notificação, ele simplesmente fica "fora do radar" no que diz respeito a wmctrl .

Tendo em mente que as posições dos ícones na Área de Notificação podem variar, existe alguma maneira de determinar as coordenadas de tela do ícone do Painel do Skype, para que eu possa "clicar" usando xdotool (ou um utilitário semelhante)?

... ou talvez haja uma maneira mais direta de ativar o Skype "inativo"? ... (e não estou falando do mouse);

Aqui está o script, até agora. Espero que isso deixe claro o que estou tentando fazer:

#!/bin/bash
procname="skype-wrapper"
windmask="Skype™"
if [[ $(pgrep -x -n -c "$procname") == 1 ]] ; then 
  wintitle="$(wmctrl -l |grep "$windmask" |head -n 1 |sed -n "s/^.\+${HOSTNAME} \(.*\)//p")"
  if [ "$wintitle" = "" ] ; then
    echo "Click on Skype's Panel-icon to show the main window"  
    ###############################################################
    # How can I find the screen co-ordinates of Skype's Panel Icon
    ###############################################################
  else
    # Skype is running, and has (at least) one visible window which matches $windmask. Activate it.
   wmctrl -a "$wintitle"
  fi
else 
  # The process is not currently running. Start it.
  ("$procname" &)
fi
    
por Peter.O 08.12.2010 / 05:44

3 respostas

1

link

  • zskypewrapper.sh é o meu script personalizado para mostrar o Skype (@ fred.bear, para o certo ou errado, eu apenas 'wmctrl -a Skype ™' para mostrar uma janela já existente).
  • showskype.py é o script do ændrük acima, modificado para também imprimir o código de retorno do Skype.
  • O Skype.desktop é um arquivo .desktop que eu criei para uso com o Docky, que é o motivo pelo qual eu escrevi zskypewrapper.sh (mas o zskypewrapper funciona sem o .desktop, e eu até joguei uma lógica que só é útil de a linha de comando e o Docky nunca podem usar). Este .desktop não é necessário, por si só; tudo que fiz foi nautilus- > clique com o botão direito do mouse- > create launcher e coloque em zskypewrapper.sh.

zskypewrapper.sh e showskype.py precisam ser executáveis e em $ PATH em algum lugar.

Espero que isso ajude alguém. :-D

    
por zpletan 11.01.2011 / 20:19
2

Que tal:

#!/usr/bin/env python

import dbus

# Get a D-Bus interface to Skype
bus = dbus.SessionBus()
skype_object = bus.get_object('com.Skype.API', '/com/Skype')
skype = dbus.Interface(skype_object, dbus_interface='com.Skype.API')

# Ask for permission to control Skype
response = skype.Invoke("NAME " + __file__)
response = skype.Invoke("PROTOCOL 8")

# Issue commands
response = skype.Invoke("SET WINDOWSTATE NORMAL")

Não é tão generalizado quanto você queria, mas pode fazer o trabalho. Para qualquer coisa que não seja simples uso pessoal, será necessário algum tratamento de erros adicionado.

Fonte: Referência da API pública do Skype

    
por ændrük 08.12.2010 / 08:03
1

Eu consegui montar um script python que faz o trabalho (... uma grande curva de aprendizado e uma boa maneira de aprender :)

Não vai chegar ao mainstream, mas estou postando para qualquer um que possa estar interessado.

Como não sei como determinar diretamente as coordenadas de um determinado ícone da bandeja de notificação, tive que "pesquisar" o ícone.

Para identificar um ícone, o script tem um "CAPTURE proc" de "uma vez por ícone", que identifica uma (esperançosamente) linha única de pixels ... felizmente, os ícones são muito multicores.
(o proc de captura chama 2 scripts bash menores)

Não tenho certeza de qual é a política do askubuntu relacionada a uma publicação em código grande, então, até descobrir se está tudo bem ou não, enviei para pastebin.ubuntu .com

O script principal é de 140 linhas de código real, mas corre para 240 com comentários e, por alguma razão desconhecida, quando no pastebin , muitas linhas, mas não todas, têm espaço duplo, empurrando para 339! (meu editor está configurado para o Unix LF) ...

Aqui estão os links para os principais scripts python e os 2 scripts bash auxiliares;

por Peter.O 10.12.2010 / 02:09

Tags