Створення ефектних екранних повідомлень за допомогою Ghosd і Perl

  1. вимоги
  2. Програмне забезпечення
  3. Написання утиліт командного рядка для екранного виведення
  4. Лістинг 1. Оновлений розділ оголошень test.c
  5. Лістинг 2. Закодоване в main () екранне повідомлення
  6. Лістинг 3. Перевірка на помилку і висновок повідомлення за замовчуванням за допомогою main ()
  7. Малюнок 1. Приклад виведення тексту і зображення в Ghosd
  8. Реалізація на сервері
  9. Лістинг 4. Оголошення osdServer.pl
  10. Лістинг 4. Підпрограма readOsdFile
  11. Лістинг 5. Підпрограма matchWords
  12. Лістинг 6. Логіка головної програми для osdServer.pl
  13. файл конфігурації
  14. Лістинг 7. Приклад файлу osdServer.config
  15. Реалізація клієнта
  16. Приклади реалізації та повідомлення
  17. Приклад повідомлення xmms
  18. Приклад повідомлення системного журналу
  19. Висновок і додаткові приклади
  20. Ресурси для скачування

Системні події відображаються у вигляді текстових і графічних екранних повідомлень

Програмний код і підходи, які описуються в цій статті, - це тільки приклад можливої ​​реалізації екранних повідомлень. Вони розраховані на машину, що працює в закритому мережі, і не підходять для машини, що має незахищене з'єднання з Інтернетом, оскільки при цьому сторонні шкідливі програми зможуть виконувати на машині довільний неконтрольований код.

Виведені на екран повідомлення для графічного представлення робочого столу в Windows® і Linux® існують вже багато років. Нещодавно з'явилися безрамкові прозорі вікна для робочого столу Linux відкрили графічні можливості нового рівня. Середа Ghosd дозволяє створювати екранні повідомлення нового покоління - із згладженими шрифтами, кольоровою гамою True Color, тінями, прозорістю і можливістю завантаження зображень з файлів.

Використовуючи Perl і деякі спеціально скомпільовані програми Ghosd, я покажу вам, як створити свою власну систему повідомлень про події. За допомогою простих правил зіставлення з ключовими словами і клієнт-серверної конфігурації ви зможете отримувати екранні повідомлення з усіх ваших систем, як віддалених, так і локальних ..

вимоги

Апаратне забезпечення

Потужності будь-якого ПК, виробленого пізніше 2000 року, з великим запасом вистачить для компілювання і виконання програмного коду. Якщо у вас є графічний робочий стіл, у вас швидше за все вже є процесор достатньої потужності.

Програмне забезпечення

Програма Ghosd вимагає наявності бібліотек Pango і Cairo. При компіляції та конфігурації Ghosd ці бібліотеки вже повинні бути встановлені. Зверніться до розділу ресурси , Де є посилання на бібліотеки Cairo і Pango, або зробіть ще один крок вперед і встановіть будь-якої дистрибутив Linux, в якому ці бібліотеки вже є. Я рекомендую Vector Linux, оскільки в ньому вже встановлені і налаштовані всі бібліотеки і візуальні ефекти, так що ви можете зайнятися безпосередньо Ghosd.

Після установки Pango і Cairo необхідно скомпілювати саму програму Ghosd. Завантажте та розпакуйте архів, що містить вихідний код Ghosd. Потім скомпілюйте його за допомогою команди ./configure && make install. По завершенні процесів установки і настройки ознайомтеся з деякими варіантами використання Ghosd, перейшовши в каталог прикладів програм. Ghosd частково написаний як бібліотека функцій, що допомагає вашим додаткам використовувати метафору розробки екранних зображень. По суті, наведені приклади - це невеликі програми на мові C, що ілюструють не тільки те, як використовувати Ghosd з командного рядка, але і те, як інтегрувати його в ваші програми.

Написання утиліт командного рядка для екранного виведення

Модифікація text.c для використання в командному рядку

Відкрийте каталог прикладів програм і запустіть програму text.c за допомогою команди ./text. У нижньому правому куті екрану ви побачите закодований в програмі текст білого кольору. Для наших цілей ми хотіли б мати можливість задавати колір, положення і зміст текстового повідомлення. Замість того щоб створювати нову програму, змінимо існуючу програму text.c відповідно до наших вимог. Якщо ви хочете пропустити цей крок, завантажте готовий файл text.c, включений в архів вихідного коду, і скомпілюйте його за допомогою команди make.

Додайте наведені нижче змінні в розділ оголошень змінних.

Лістинг 1. Оновлений розділ оголошень test.c

int posX = -50; int posY = -50; float red = 1.0; float green = 1.0; float blue = 1.0; int ftSize = 30; int fadIn = 300; int fadOut = 1500; char displayText [500] = "default message";

Це змінні за замовчуванням для завдання положення, змісту тексту, кольору і розміру шрифту, швидкості появи і зникнення зображення в мілісекундах, а також масиву для зберігання інформації, що відображається рядки. Тепер необхідно змінити відображається фрагмент тексту з урахуванням зазначеного кольору. У функції візуалізації (render) змініть рядок cairo_set_source_rgba (cr, 1, 1, 1, 1.0); на cairo_set_source_rgba (cr, red, green, blue, 1.0) ;. Це дозволить вам використовувати значення кольорів, що передаються через параметри командного рядка.

Необхідно також змінити програму, щоб вона виводила повідомлення за замовчуванням, а не давала збій, якщо в командному рядку задані не всі параметри. У функції main видаліть рядки, наведені нижче.

Лістинг 2. Закодоване в main () екранне повідомлення

pango_layout_set_markup (layout, "<span font_desc = 'Trebuchet 30'>" "some sample text using <b> ghosd </ b>" / * "ار ~ J د" * / "</ span>", -1); ghosd = ghosd_new (); ghosd_text_set_position (ghosd, -50, -50, layout); ghosd_set_render (ghosd, render, layout); ghosd_flash (ghosd, 300, 1500);

Після видалення зазначеного вище коду введіть код перевірки на помилку і виведення повідомлення за замовчуванням, наведений нижче.

Лістинг 3. Перевірка на помилку і висновок повідомлення за замовчуванням за допомогою main ()

if (argc == 10) {posX = atoi (argv [2]); posY = atoi (argv [3]); red = atoi (argv [4]); green = atoi (argv [5]); blue = atoi (argv [6]); ftSize = atoi (argv [7]); fadIn = atoi (argv [8]); fadOt = atoi (argv [9]); sprintf (displayText, "<span font_desc = 'Trebuchet% d'>% s </ span>", ftSize, argv [1]); } Else {sprintf (displayText, "<span font_desc = 'Trebuchet 30'> Incomplete command </ span>"); } Pango_layout_set_markup (layout, displayText, -1); ghosd = ghosd_new (); ghosd_text_set_position (ghosd, posX, posY, layout); ghosd_set_render (ghosd, render, layout); ghosd_flash (ghosd, fadIn, fadOt);

Тепер, коли ми ввели простий код перевірки помилок і модифікували формат Pango, текст буде виводитися так, як зазначено в командному рядку, із заданим розміром і кольором шрифту і параметрами зміни яскравості. Створіть нову виконувану програму виведення тексту за допомогою команди make. Запустіть програму виведення тексту для Ghosd командою типу ./text "red text example" -150 -150 1.0 0.1 0.1 40 500 2000. Наведена командний рядок виведе текст "red text example" червоним шрифтом розміром 40pt в точці з екранними координатами -150, - 150. Протягом 500 мілісекунд яскравість буде збільшуватися, а потім протягом 2000 мілісекунд знижуватися до нуля.

В каталозі прикладів програм є приклад виведення на екран зображення, чудово підходить для наших цілей. Введіть команду ./image /usr/share/pixmaps/x264.png -x 40 -y 40 для виведення на екран простого зображення. Наведений нижче малюнок ілюструє одночасне виведення тексту і графічного зображення.

Малюнок 1. Приклад виведення тексту і зображення в Ghosd
Системні події відображаються у вигляді текстових і графічних екранних повідомлень   Програмний код і підходи, які описуються в цій статті, - це тільки приклад можливої ​​реалізації екранних повідомлень

Висновок екранних повідомлень з використанням Perl і Ghosd

Загальна стратегія: клієнт-серверний підхід

Програма Ghosd дозволяє виводити на екран текст і зображення з будь-якими варіаціями розміру, кольору і стилю. Щоб ефективно використовувати ці можливості для стеження за повідомленнями про стан системи, повідомленнями електронної пошти та будь-якими іншими параметрами, необхідно зберегти цю гнучкість і при цьому надати простий інтерфейс для її використання. Система, представлена ​​нижче, використовує клієнт-серверну архітектуру для прийому від локальних і віддалених машин подій, повідомлення про які необхідно вивести на екран.

Рядок повідомлення, відправлена ​​клієнтом, обробляється на предмет наявності заданих ключових слів (зчитуються з файлу конфігурації), і відповідні дані виводяться на екран. Так, якщо сервер отримує рядок New e-mail from mark @ developerWorks, він знаходить ключове слово e-mail і виведе зображення, відповідне поштового повідомлення, а також повний текст повідомлення в нижньому правому куті монітора. Якщо рядок повідомлення, відправлена ​​клієнтом, містить слово "error" (помилка), рядок повідомлення буде виведена повністю великими червоними літерами по центру екрана.

Приступимо до програмної реалізації, щоб подивитися, як все це працює на практиці.

Реалізація на сервері

Сервер повинен зчитувати файл конфігурації, щоб визначити, як відображати текст і зображення. Він також повинен виконувати нескінченний цикл для прослуховування підключень клієнтів до зазначеного порту. Після встановлення з'єднання - з локальної або віддаленої машиною - вхідні повідомлення обробляються на предмет наявності ключових слів, зазначених у файлі конфігурації. Текст або зображення виводяться на екран відповідно до параметрів у файлі конфігурації. Закінчивши на цьому огляд роботи програми, перейдемо до розділу оголошень змінних.

Лістинг 4. Оголошення osdServer.pl

#! / Usr / bin / perl -w # osdServer.pl - process incoming text events based on keyword matching and # display using Ghosd use strict; use FileHandle; use Socket; if (@ARGV! = 1) {die "specify a port to listen on"} my% osdHash = (); my $ proto = ""; my $ port = ""; my $ sockAddr = ""; my $ fullCmd = "";

Далі йдуть підпрограми, починаючи з readOsdFile, яка зчитує файл osdServer.config і зчитує з нього потрібні ключові слова і параметри виведення повідомлення.

Лістинг 4. Підпрограма readOsdFile

# ReadKeyWordFile reads type, keywords, (text / image) parameters # text parameters: # X coordinate, Y coordinate, red, green, blue, font size, fade In, fade Out # image parameters: # image filename, X coordinate, Y coordinate # osdServer.confg format is: type _ # _ keywords _ # _ osd parameters sub readOsdFile {open (OSDFILE, "osdServer.config") or die "no osdServer.config file: $!"; while (<OSDFILE>) {# ignore comment lines if (! / ^ # /) {chomp ($ _); my @arrLine = split "_ # _"; $ ArrLine [0] = ~ s / // g; $ OsdHash {lc ($ arrLine [0])} {$ arrLine [1]} = $ arrLine [2]; } #If not a comment line} #for each line in file close (OSDFILE); } #readOsdFile

Після завдання параметрів пошуку ключових слів і виведення зображення ми можемо перейти до простої підпрограми зіставлення з ключовими словами matchWords.

Лістинг 5. Підпрограма matchWords

sub matchWords {my $ msgString = $ _ [0]; my $ type = $ _ [1]; # For the type specified for my $ kwList (keys% {$ osdHash {$ type}}) {# for each word for my $ checkWord (split "", $ kwList) {$ checkWord = ~ s / // g; if ($ msgString = ~ / $ checkWord / i) {if ($ type eq "text") {$ fullCmd. = qq {./ text '$ msgString' $ osdHash {text} {$ kwList} &}; } Else {$ fullCmd. = Qq {./ image -i $ osdHash {image} {$ kwList} &}; }} #If matching word} #for each check word} #for each key word list} #checkText

Підпрограма matchWords виробляє просту перевірку на наявність слів, зазначених у файлі osdServer.config, а потім формує команду для виведення інформації в залежності від типу відображуваного повідомлення. Наприклад, вона сформує команду Ghosd для виведення зображення, якщо є відповідне ключове слово і в файлі конфігурації задано зображення для виведення на екран. Задавши підпрограми, ми швидко переходимо до розгляду логіки короткої головної програми.

Лістинг 6. Логіка головної програми для osdServer.pl

readOsdFile (); $ Proto = getprotobyname ( 'tcp'); socket (SERVER, PF_INET, SOCK_STREAM, $ proto) or die "socket: $! \ n"; $ Port = $ ARGV [0]; $ SockAddr = sockaddr_in ($ port, INADDR_ANY); bind (SERVER, $ sockAddr) or die "bind: $! \ n"; listen (SERVER, SOMAXCONN) or die "listen: $! \ n"; # Listen forever while (1) {my $ acceptSock = accept (HANDLER, SERVER) or die "accept: $! \ N"; my ($ acceptPort, $ acceptIpAddr) = sockaddr_in ($ acceptSock); autoflush HANDLER 1; while (my $ msgString = <HANDLER>) {chomp ($ msgString); matchWords ($ msgString, "text"); matchWords ($ msgString, "image"); $ FullCmd = `$ fullCmd` unless $ fullCmd eq" "; $ FullCmd = ""; } #While handler close HANDLER or die "close HANDLER: $! \ N"; } #While forever

Перша частина логіки головної програми викликає readOsdFile для завдання зіставлення ключових слів і параметрів хешів (hash). Після стандартного коду прослуховування сокета запускається основний цикл, що прослуховує нові сполуки. Кожен раз при новому з'єднанні виконується перевірка на збіг з усіма ключовими словами тексту і зображення, зазначеними у файлі конфігурації. При кожному виявленні збігу до повної команді приписується відповідний текст; повна команда для відображуваного події виповнюється вся цілком. При такому підході задані для однієї події суміщені відображення (графіка плюс текст), наприклад, текстове повідомлення і зображення при отриманні електронної пошти, виводяться на екран строго одночасно.

файл конфігурації

Тепер, коли серверний код готовий, можна приступити до створення власного файлу конфігурації для відображення тексту в такому вигляді, як вам цього хочеться. В якості стартової точки нижче наведений приклад файлу конфігурації:

Лістинг 7. Приклад файлу osdServer.config

text _ # _ email _ # _ -250 -250 0.1 0.1 1.0 20 100 4300 text _ # _ SYS _ # _ -150 -150 0.1 1.0 0.1 30 100 4300 image _ # _ SYS _ # _ / usr / share / pixmaps /taskmanager.png -x -510 -y -510

Нагадаємо, що формат файлу osdServer.config - type _ # _ keyword _ # _ ghosd parameters, де параметри визначені типом, зазначеним в першому полі. Наприклад, в першому рядку вказано, що якщо у вхідному рядку де-небудь присутнє слово "email", треба вивести повідомлення червоним шрифтом розміром 20 пунктів в позиції з координатами -250, -250, нарощуючи яскравість протягом 100 мс і потім знижуючи її до нуля через чотири секунди з невеликим. Рядок зображення вказує малюнок і координати його розміщення на екрані, а також стримає ключове слово "SYS." Ми торкнемося його трохи пізніше, при розгляді прикладу використання програми для стеження за файлами журналу.

Реалізація клієнта

Лістинг 8. Реалізація osdClient.pl

#! / Usr / bin / perl -w # osdClient.pl - send simple client text to server use strict; use IO :: Socket :: INET; use POSIX qw (F_GETFL F_SETFL O_NONBLOCK); my $ sock = ""; if ($ # ARGV! = 2) {die "specify a ip, port, text string"} eval {$ sock = IO :: Socket :: INET-> new (PeerAddr => $ ARGV [0], PeerPort => $ ARGV [1]) || die "can not set it up $!"; $ Sock-> blocking (0)}; if ($ @ = ~ / socket / i) {die "die in record retrieval socket setup with $ @"; } Print $ sock "$ ARGV [2] \ n";

Цей простий фрагмент програмного коду встановлює з'єднання з вказаним сервером через вказаний порт і потім відправляє переданий йому в командному рядку текст сервера. Існує безліч прекрасних публікацій і посібників, що містять докладний опис мережевих можливостей Perl, тому зверніться до розділу ресурси для отримання додаткової інформації.

При написанні цих скриптів (або завантаженні їх з архіву вихідного коду), прослідкуйте, щоб вони були розміщені в тому ж каталозі, що і приклади програм Ghosd; зазвичай це каталог ghosd-0.0.1 / examples.

Приклади реалізації та повідомлення

Запустіть програму osdServer.pl за допомогою команди perl osdServer.pl 9090. Серверна програма тепер буде постійно слухати порт 9090, намагаючись виявити TCP-підключення від будь-якого хоста. Припустимо, ви використовували приклад конфігурації, наведений вище. Ви можете випробувати побудовану систему виведення на екран, ввівши команду perl osdClient.pl 127.0.0.1 9090 "email test". Результатом її виконання буде висновок на екран текстового повідомлення "email test" синім шрифтом.

Тепер ви готові рухатися вперед! Нижче наведено кілька більш складних прикладів, щоб допомогти вам освоїтися.

Приклад повідомлення xmms

Для відображення назви програється в даний момент пісні при кожній зміні треку в xmms виконайте далі інструкцій. Перейдіть в діалогове вікно Preferences в xmms, натиснувши Ctrl + P. Виберіть вкладку general plug-ins і включіть опцію Song Change plug-in. Натисніть configure (налаштувати) і додайте наступний рядок:

/ Usr / bin / perl (fullpathTo_osdClient.pl) 127.0.0.1 9090 "% n xmms"

В результаті назва поточної пісні буде автоматично передаватися програмі osdServer.pl через клієнт. Для правильного розпізнавання подій xmms необхідно додати в файл osdServer.config наступний рядок:

text _ # _ xmms _ # _ -150 -150 1.0 1.0 0.1 20 500 2300

Приклад повідомлення системного журналу

Нижче приведена коротка програма, яка контролює ваш системний журнал на предмет появи будь-яких подій, і відправляє повідомлення програмі osdServer.pl:

tail -n0 -f / var / log / messages | \ Perl -lane '$ _ = substr ($ _, 30,50); $ r = `perl osdClient.pl 127.0.0.1 9090" $ _ SYS "`'

Рядок tail -n0 -f повідомляє про те, що потрібно перейти в кінець файлу і чекати нових змін. Потім наша коротка програма передає рядок програмі osdServer.pl за допомогою програми osdClient.pl, цей рядок складається з перших 50 значущих байтів записи в файлі журналу. Ключове слово "SYS", яке вже зустрічалося в прикладі файлу osdServer.config, необхідно, щоб дозволити виконання перевірки на ключові слова для всіх системних повідомлень, незалежно від їх конкретного змісту.

Висновок і додаткові приклади

З двох останніх, більш складних, прикладів, ви повинні були зрозуміти, як інтегрувати сервер і клієнт екранних повідомлень Ghosd в вашу обчислювальну середу. Якщо ви хочете відслідковувати події на віддалених машинах, просто скопіюйте програму osdClient.pl на віддалену машину і запустіть її, вказавши IP-адреса сервера замість 127.0.0.1. Обміркуйте, які послідовності вказати для перевірки на збіг, якщо вхідні дані отримані з віддаленого джерела. Як варіант, можна також задати зображення для кожної конкретної машини, щоб ви по зображенню могли відразу ж розпізнати, з якої машини отримано повідомлення. Крім того, можна використовувати функцію виведення зображень для відображення графічних елементів, зрозумілих тільки користувачеві, наприклад, щоб ви розуміли, що вам прийшло повідомлення електронної пошти, а сторонній людині, дивиться на ваш монітор, це зображення нічого не говорило.

Ресурси для скачування

Схожі теми

  • Оригінал статті: Create fancy on-screen displays with Ghosd and Perl .
  • Еван Мартін - автор програми Ghosd .
  • Ghosd вимагає наявності бібліотек Cairo .
  • Для компіляції Ghosd вам також знадобиться Pango .
  • Вивчіть докладний посібник з Мережевому програмуванню в Perl на сайті Linux Journal.
  • Ознайомтеся з цікавими для розробників ПЗ інтерв'ю і дискусіями, прослухавши подкасти на developerWorks.
  • В розділі Open Source на developerWorks Росія можна отримати різноманітну інформацію про засоби і методи розробки ПЗ, інструментах і новинах проектів, яка допоможе вам використовувати в ваших розробках технології з відкритим вихідним кодом і застосовувати їх з продуктами IBM.
  • Реалізуйте інновації в вашому наступному проекті розробки ПЗ з відкритим вихідним кодом за допомогою ознайомлювальних версій програмних продуктів IBM , Які можна завантажити через Інтернет або замовити на DVD.
  • відвідайте магазин Safari Books Online , Де представлено безліч ресурсів за технологіями з відкритим вихідним кодом.

Підпишіть мене на повідомлення до коментарів