LINUX.ORG.RU

значок в трее [коммерциозникам не беспокоить]


0

1

Я не программист, но тут понадобилось. Кому не сложно, набросайте пожалуйста маленькую программку, единственная цель которой — вывести иконку в трей. Никаких окошек, ничего лишнего (выключать, если понадобится, думаю буду обычным kill'ом).


(P.S. с помощью этой тулзы хочу сделать простенький нотификатор. Та программка просто будет выводить серенький или цветной конвертик, в зависимости от наличия новых писем. Т.е. она будет читать ~/mail/inbox/new, если она не пустая — значок цветной, иначе серый. Кстати, это как лучше делать — демоном? Или через cron как нибудь?)



Последнее исправление: paxac (всего исправлений: 1)
Ответ на: комментарий от alex_custov

ну, qt это уж слишком. Нужно минимальная прога (желательно на голых иксах, такое можно? или на gtk, в крайнем случае), чтобы ела памяти по минимуму.

paxac
() автор топика

Или через cron как нибудь?

incron

GotF ★★★★★
()
Ответ на: комментарий от anonymous_sapiens

ну не хочу я beep, хочу чтобы иконка загорелась в трее. Я ещё раз прошу прощения, я в этих делах не понимаю, но неужели в линухе так трудно банально вывести иконку в трей? без приплетения всяких qt?

paxac
() автор топика
Ответ на: комментарий от hizel

$ gcc 1.c
1.c:1:10: error: #include expects «FILENAME» or <FILENAME>
1.c:3: ошибка: expected ‘)’ before ‘*’ token
1.c:9: ошибка: expected ‘)’ before ‘*’ token
1.c:15: ошибка: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
1.c: В функции ‘main’
1.c:34: ошибка: ‘GtkStatusIcon’ undeclared (first use in this function)
1.c:34: ошибка: (Each undeclared identifier is reported only once
1.c:34: ошибка: for each function it appears in.)
1.c:34: ошибка: ‘tray_icon’ undeclared (first use in this function)

paxac
() автор топика

Вот маленькая программка:

#!/usr/bin/python
import pygtk
pygtk.require('2.0')
import gtk

icon = gtk.StatusIcon()
icon.set_from_stock(gtk.STOCK_OK)
gtk.main()
dmitry_vk ★★★
()
Ответ на: комментарий от paxac

$ gcc 1.c

Там у человека блогодвижок съел исходник - первая строчка должна быть:

#include <gtk/gtk.h>
dmitry_vk ★★★
()
Ответ на: комментарий от paxac

Я имею в виду то, что есть в той же убунте для мониторинга почты. И всякие плагины для тандербёрдов, clawsmai и т.п. Если я говорю что-то не то - сорри, но мало исходных данных.

Посмотрел в репах - есть вот такая штука: http://www.nongnu.org/mailnotify/ - в арче она в «экстре», значит, в других дистрах должна быть в репах. М?

Hoodoo ★★★★★
()
Ответ на: комментарий от paxac

> желательно на голых иксах, такое можно?

для иконки в трее нужен, как минимум сам трей (т.е. панелька либо док с треем). отсюда следует наличие в системе Qt|gtk|whatever.

isden ★★★★★
()

найти в пакетах и установить апплет «mail watcher/notification» для того окружения, которое у вас установленно (gnome, kde, xfce). Классика UNIX - biff. Апплет для кде Kbiff.

MKuznetsov ★★★★★
()

Придумал такой забавный костыль:

alltray -stask -i /path/to/icon.png xmessage ololo

Вместо xmessage сойдёт любая программа с окном, которая не завершается сама (например, коньки с пустым конфигом или типа того). Убить можно из контекстного меню иконки.

GotF ★★★★★
()
Ответ на: комментарий от anon_666

Спасибо. Работает.

Теперь вопрос по стыковке с другими прогами. fortune думаю подвесить на cron (кстати, cron ресурсов много ест? у меня 800мгц, 256мб RAM. сейчас cron у меня вообще отключен.) каждые минут 10.
А как связать с иконкой? Может сделать так: тот же cron проверяет наличие файлов в inbox/new (через ls?), если имеются файлы — запускает ту прогу, которая выводит значок конверта в трей. Если нет — делает kill той проги (а если она уже убита, kill чего нибудь лишнего не убьёт?). Механизм с серой и цветной иконкой думаю будет труднее сделать.

paxac
() автор топика

Наверное поэтому я сижу на icewm. В нем из коробке есть и «конвертик» и мониторинг CPU, Network.

sdio ★★★★★
()
Ответ на: комментарий от GotF

> Придумал такой забавный костыль:

интересно. В xmessage можно засунуть фразу "??? new mail". Только на мгновение появляется xmessage, а потом уже прячется в трей. Нельзя ли, чтобы он сразу туда уходил?

paxac
() автор топика
Ответ на: комментарий от paxac

Только на мгновение появляется xmessage, а потом уже прячется в трей. Нельзя ли, чтобы он сразу туда уходил?

У тебя же Fluxbox? Попробуй прописать для этого окна координаты за пределами экрана. Иначе вряд ли как-то ещё можно.

GotF ★★★★★
()
Ответ на: комментарий от paxac

Может сделать так: тот же cron проверяет наличие файлов в inbox/new (через ls?), если имеются файлы — запускает ту прогу, которая выводит значок конверта в трей. Если нет — делает kill той проги (а если она уже убита, kill чего нибудь лишнего не убьёт?). Механизм с серой и цветной иконкой думаю будет труднее сделать.

вот тут начинается самое интересное, тк cron работает от «пользователя1», а прогу надо запускать на Х-сервер «пользователя2». и в зависимости от настроек безопасности ДЕ или Х-сервера может получиться так что произвольный «пользователь1» не сможет рисовать на экран «пользователя2» даже если пользователь1 == root

поэтому если очень хочется свой велосипед, то запускай его в Х-сессии нужного пользователя(где-нибудь в ~/.xinirc | ~/.Xclients | ~/.xsession или в атозапуске твоего ДЕ) и забудь про крон или воспользуйся готовым велосипедом mail-notification

donkey3000
()

Не надо ничего писать, есть zenity, пример:
zenity --notification --window-icon /usr/share/pixmaps/gnome-debian.png

snizovtsev ★★★★★
()
Ответ на: комментарий от paxac


Раз ничего не понимаешь в этих делах, слушай что старшие советуют. Qt это хорошо, и красноглазие здесь неуместно.

Pantserovik
()
Ответ на: комментарий от Aid_

Можно, но херово. Там целый костыль чтобы прикрутить Swing. Они сделали там все на AWT меню. И это в Java 6!!! Глаза выпадают от вида в Linux

vertexua ★★★★★
()

Zenity, либо его более фичастый форк YAD.

Shlyapa ★★
()

вот тебе пример иконки в трее. появляется, когда вставляешь флешку. изменить inotifywait, чтобы он следил за почтовым ящиком, я думаю, не проблема

http://code.google.com/p/yad/wiki/USBFlash

ananas ★★★★★
()
Ответ на: комментарий от donkey3000

> вот тут начинается самое интересное, тк cron работает от «пользователя1», а прогу надо запускать на Х-сервер «пользователя2»
В кронах, кроме общесистемного кронтаба есть ещё кронтабы для юзверей.
crontab -e от юзера какбы решает.
Ну DISPLAY еще надо прописать, да.

Nao ★★★★★
()
Ответ на: комментарий от anon_666

> gcc -Wall `pkg-config --cflags --libs gtk+-2.0` -o icon icon.c

$ gcc `pkg-config --cflags --libs gtk+-2.0` 1.c
/usr/lib/gcc/i486-slackware-linux/4.2.4/../../../libgdk-x11-2.0.so: undefined reference to `XRRGetScreenResourcesCurrent'
collect2: выполнение ld завершилось с кодом возврата 1

paxac
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.