Skip to content

About

Panel widget for xfce4. Shows counter of records at panel and list of strings when mouse is over.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ovpn-widget

Плагин панели xfce4: показывает число, принятое из unix-сокета, и по наведению мыши — список переданных строк.

Сборка и установка

make
sudo make install
xfce4-panel -r

Установка вручную:

sudo cp libovpn-widget.so /usr/lib/xfce4/panel/plugins/
sudo cp ovpn-widget.desktop /usr/share/xfce4/panel/plugins/
xfce4-panel -r

Затем: правой кнопкой по панели → «Панель» → «Добавить новые элементы» → «Счётчик OpenVPN».

Зависимости: libxfce4panel-2.0-dev, libgtk-3-dev, gcc, make. Собран и проверен на libxfce4panel 4.18 и GTK 3.24.

Потоки

Их два.

  1. Главный — только GTK: метка, подсказка, диалог настроек. Не делает ни одного блокирующего вызова.
  2. Поток чтения (src/reader.c) — единолично владеет сокетом: создаёт файл, слушает, принимает клиента, разбирает передачу, закрывает соединение. Чтение блокирующее, с таймаутом через poll().

Обмен между потоками — два однонаправленных канала и очередь GAsyncQueue. Общих изменяемых данных нет, поэтому нет и мьютексов. Сообщение передаётся главному потоку как готовый объект, владение переходит вместе с указателем.

Плагин внешний

X-XFCE-Internal=false в .desktop — панель запускает плагин в отдельном процессе через свою обёртку. Падение виджета не роняет панель. Именно этот способ рекомендован начиная с xfce4-panel 4.8 вместо старых исполняемых плагинов 4.6.

Протокол

FF                     начало передачи
NN                     количество строк, 0..15
LL <байты>             длина строки в байтах и сама строка UTF-8
...                    ровно NN раз
00 00                  конец передачи
<клиент закрывает соединение>

Ограничения: строк не больше 25; строка — не больше 60 символов, то есть не больше 240 байт (символ UTF-8 занимает до 4 байт); длина в байте LL, число символов проверяется после проверки UTF-8.

Ошибкой считается: не тот стартовый байт, счётчик больше 25, длина строки больше 240 байт, невалидный UTF-8, больше 60 символов, неверный терминатор, лишние данные после терминатора, обрыв соединения посреди передачи, пауза дольше таймаута.

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

Сообщение попадает на экран только целиком и только после того, как клиент корректно закрыл соединение.

Ошибка пишется в сислог.

Индикация

  • -1 — с момента запуска по сокету не пришло ни одного корректного сообщения.
  • На время передачи число становится тёмным серо-зелёным, подсказка отключается, левая и средняя кнопки мыши не работают. Правая кнопка остаётся панели — иначе во время передачи было бы не добраться до настроек.
  • После ошибочной передачи на экране остаётся последнее корректно принятое значение.

Тестовый отправитель

./ovpn-send /run/user/1000/ovpn-widget.sock "первая строка" "вторая"
./ovpn-send /run/user/1000/ovpn-widget.sock      # пустой список, покажет 0

Настройки

Правой кнопкой по виджету → «Свойства». Диалог: путь к сокету, таймаут чтения, шрифт (стандартный GtkFontButton). После сохранения поток чтения перезапускается с новым сокетом, перезагрузка панели не нужна.

Файл ~/.config/ovpn-widget/config:

  • строка, начинающаяся с ;, # или % — комментарий;
  • пустые строки пропускаются;
  • первая значащая строка — путь к сокету;
  • вторая — таймаут чтения, мс (50..60000, иначе берётся 500);
  • третья — шрифт в формате Pango, например Sans Bold 11.

Конфиг общий для всех экземпляров плагина, поэтому два виджета на два разных сокета одновременно работать не будут.

Ошибки

Если не удаётся создать или привязать сокет, разобрать шрифт или построить виджеты — сообщение по-русски уходит в syslog и процесс завершается:

journalctl -t ovpn-widget

Панель предложит перезапустить плагин. Неверный путь в конфиге правится руками в ~/.config/ovpn-widget/config.

Образец источника данных

Парсер лога openvpn тут: https://github.com/deemytch/ovpn_stats

About

Panel widget for xfce4. Shows counter of records at panel and list of strings when mouse is over.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages