Запуск приложения по щелчку уведомления о рычании

Используя скрипты bash/shell, я гроулнотифи сообщал мне, когда была неудачная попытка входа в систему, и отображал изображение того, кто сидел перед компьютером, в уведомлении о рычании. Есть ли способ, которым я могу использовать рычание, чтобы запустить предварительный просмотр, чтобы отобразить изображение при нажатии на уведомление?


person Trcx    schedule 02.09.2011    source источник
comment
Хотите ли вы использовать -w для блокировки growlnotify до тех пор, пока пользователь не ответит, а затем запустить предварительный просмотр из вашего сценарий?   -  person glenn jackman    schedule 02.09.2011
comment
Я не думаю, что это сработает, так как это приостановит выполнение сценария, предотвратив дополнительные снимки дополнительных неудачных входов в систему.   -  person Trcx    schedule 02.09.2011
comment
Не могли бы вы запустить новый процесс/поток для своего скрипта при обнаружении неудачного входа в систему?   -  person glenn jackman    schedule 03.09.2011
comment
Я, вероятно, мог бы, но тогда это не позволяет мне определить, когда они нажимают на уведомление, а когда они его отклоняют (нажав X)   -  person Trcx    schedule 03.09.2011


Ответы (2)


Одна вещь, которую вы могли бы сделать, это передать параметр --url в growlnotify.

Взяв пример Vaz:

(
  # load some cat pics... I promise they are actually cat pics but
  # I don't promise they won't go link-dead since I linked to google image caches
  # or something.
  img1=/tmp/catpic1; curl -L bit.ly/16IRub3 > $img1
  img2=/tmp/catpic2; curl -L bit.ly/XUCzHW > $img2

  # schedule growls... replace this of course with whatever
  # actually sends your growls
  for i in $img1 $img2; do
    ( growlnotify -s -m "oh noes $i" --image $i --url "file://ABSOLUTE_PATH/$i" ) &
    sleep 4
  done
)

Обратите внимание, что я удалил -w из параметров, а также последующую команду open. Поскольку мы используем --url, growlnotify обрабатывает обратный вызов самостоятельно. Вам не нужно приостанавливать выполнение, и этот метод, вероятно, решит проблему, обнаруженную Вазом для нескольких уведомлений. Передавая строку file://... в --url, growlnotifyоткрывает указанный файл в системном приложении по умолчанию после нажатия на уведомление.

Последний нюанс: --url будет корректно обрабатывать URL-адреса только в том случае, если вы передадите ему строку, начинающуюся с http://. "google.com" или "www.google.com" не будут работать. То же самое касается структуры вашей файловой системы, вы должны предоставить что-то вроде file:///Users/you/Pictures/cats.jpg.

Эта функция доступна с версии 1.4, но, насколько я проверял, она отсутствует в версии man.

Источники: https://code.google.com/p/growl/issues/detail?id=341 https://groups.google.com/d/msg/growldiscuss/nUdYxOevkxI/oYjxdhSEi98J

Надеюсь, поможет!

person JS Mann    schedule 08.05.2013

Вот один из способов сделать это:

(
  # load some cat pics... I promise they are actually cat pics but
  # I don't promise they won't go link-dead since I linked to google image caches
  # or something.
  img1=/tmp/catpic1; curl -L bit.ly/16IRub3 > $img1
  img2=/tmp/catpic2; curl -L bit.ly/XUCzHW > $img2

  # schedule growls... replace this of course with whatever
  # actually sends your growls
  for i in $img1 $img2; do
    ( growlnotify -ws -m "oh noes $i" --image $i ; open -a preview $i ) &
    sleep 4
  done
)

Основная проблема заключается в том, что если появляется более одного уведомления, щелчок по одному из них приведет к разблокировке всех блокирующих подоболочек GroulNotify (открытие всех изображений одновременно). По какой-то причине это кажется стандартным поведением для рычания. На самом деле это может не быть проблемой, за исключением того, что он ведет себя не так хорошо, как если бы он правильно ставил их в очередь (я пытался сделать это с некоторым сумасшествием рекурсивного управления заданиями подоболочки, но я не думаю, что bash позволит мне это сделать. .. конечно, есть более сложный способ поставить их в очередь.)

person Vaz    schedule 08.04.2013