Вопрос: Как я могу активировать значок панели через скрипт (или получить его координаты экрана, щелкнуть его)?


Этот вопрос находится в контексте рабочего стола Lucid 10.04 (т. Е. Unity).

Я занимаюсь большинством экранов с клавиатуры (а не с помощью мыши), поэтому я ищу решение для сценария для повторного активации приложения, которое было «сведено к минимуму» в область уведомлений Panel.

Я буду использовать Skype В качестве примера.

wmctrl позволяет мне достаточно доступ к нормально свернутым окнам, но когда Skype «сведен к минимуму» в области уведомлений, он просто «выходит за пределы радара» до тех пор, пока wmctrl обеспокоен.

Принимая во внимание, что позиции значков в области уведомлений могут различаться, есть ли способ определить координаты экрана значка панели Skype, поэтому я могу «щелкнуть» его, используя xdotool (или аналогичную полезность)?

... или, может быть, существует более прямой способ активировать «бездействующий» Skype? ... (и я не имею в виду мышь;)

Вот сценарий, пока. Надеюсь, это ясно даст понять, что я пытаюсь сделать:

#!/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} \(.*\)/\1/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

4
2017-12-08 04:44


Источник




Ответы:


http://d01.megashares.com/dl/161a012/Skype.zip

  • zskypewrapper.sh - это мой собственный скрипт для показа Skype (@ fred.bear, для правильного или неправильного, я просто «wmctrl -a Skype», чтобы показать уже существующее окно).
  • showkype.py - это сценарий ændrük выше, измененный для печати кода возврата Skype.
  • Skype.desktop - это файл .desktop, который я создал для использования с Docky, и именно поэтому я написал zskypewrapper.sh (но zskypewrapper будет работать без .desktop, и я даже применил некоторую логику, полезную только из командной строки, линия и Docky никогда не могут использовать). Этот рабочий стол не нужен сам по себе; все, что я сделал, было nautilus-> right-click-> создать пусковую установку и поместить в zskypewrapper.sh.

zskypewrapper.sh и showkype.py должны быть исполняемыми и в $ PATH.

Надеюсь, это поможет кому-то. :-D


1
2018-01-11 19:19



Спасибо zpletan (и, конечно же, ændrük) ... Это, безусловно, лучший способ для Skype ... Метод, который я описал (в моем ответе), достаточно хорошо работает для «не напрямую» управляемых значков панели, но имеет связанные ограничения, например: Изменение цветовой схемы панели требует ее сброса, и она не работает, когда полноэкранное приложение скрывает панель, а Skype - больно настроить из-за всех различных значков состояния, которые она использует ... Теперь, с ваше решение Skype, его справедливая погода! - Peter.O


Как насчет:

#!/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")

Это не так обобщено, как вы хотели, но это может сделать работу. Для чего-либо, кроме простого личного использования, потребуется некоторая обработка ошибок.

Источник: Справочник по API Skype


2
2017-12-08 07:03



ændrük. Это хороший метод для Skype, но я боюсь, что это немного выше меня. У меня есть минимальное знание bash и python, поэтому, когда он не удалось выполнить «skype_object = ...», а мой skype --help не перечисляет опции «enen-dbus --use-system-dbus », и я вижу вещи в "public_api_ref", как «Важно: API для Skype для Linux, версия 1.3, бета использует версию D-BUS .23. Следующая версия будет переведена на поддержку версии D-BUS .61+", Версия db Ubuntu - 1.2.16-2. Кажется, что самое лучшее, что я могу сделать, это выпить чашечку кофе ... Спасибо. (Я могу сканировать уникальные группы пикселей, проще :) - Peter.O
Yikes, выглядит как старая документация. --enable-dbus --use-system-dbus не должно быть необходимым, и, по-видимому, это работает только после вы вошли в Skype. - ændrük


Мне удалось собрать скрипт python, который выполняет работу (... большую кривую обучения и хороший способ узнать :)

Это не будет распространяться, но я отправляю его всем, кто может быть заинтересован.

Поскольку я не знаю, как напрямую определять координаты конкретного значка Notification-Tray, мне пришлось «искать» значок.

Чтобы идентифицировать значок, сценарий имеет «один раз на значок» CAPTURE proc, который идентифицирует (надеюсь) уникальную строку пикселей ... К счастью, значки очень разноцветны.
(захват proc вызывает 2 младших сценария bash)

Я не уверен, что askubuntu политика касается большой публикации кода, поэтому, пока я не выясню, хорошо это или нет, я отправил ее в pastebin.ubuntu.com 

Основной скрипт - 140 строк фактического кода, но работает до 240 с коментами и по какой-то неизвестной причине, когда в Pastebin, многие, но не все линии имеют двойное расстояние, толкают его на 339! (мой редактор настроен на Unix LF) ...

Вот ссылки на основные скрипты python и 2 скрипта bash bash;


1
2017-12-10 01:09



Я получаю больше впечатления от вашей способности изучать вещи каждый день. Фантастические вещи, продолжайте! - Stefano Palazzo♦