Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Плагины/индикаторы для индикации статуса синхронизации с Yandex-disk  (Прочитано 936017 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Improver

  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
Здравствуй, Sly_tom_cat и спасибо за замечательный индикатор -- пользуюсь им уже не один год, и вот наконец-то решился написать небольшое пожелание по функционалу...

Ситуация такая: на ноутбуке, который подключается к сети по wifi, на коннект к сети требуется некоторое время. При включении ноутбука индикатор стартует раньше сети, включение сервиса YD начинается с ошибки синхронизации, "нет связи", требуется подождать минут пять, либо остановить и снова запустить сервис вручную. В настройках стоит галка "запускать сервис яндекс-диск при старте индикатора".

Можно как-то в настройки индикатора ещё добавить один пункт "задержка запуска сервиса YD" на N секунд? Или, как вариант, "запускать сервис YD при подсоединении к сети"? Конечно, запуск сервиса YD можно добавить в "/etc/network/if-up.d", но, мне кажется, удобнее было бы иметь такую настройку в индикаторе.

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Improver, задержку добавить не сложно и без доработки индикатора.
Индикатор (python3 версия) запускается через desktop файл ~/.config/autostart/Yandex.Disk-indicator.desktop. Вот в нем и можно прописать
Exec=sleep 10; yandex-disk-indicator
Это добавит задержку на 10 секунд.

Только не дергайте настройку авто-запуска после этого, иначе этот файл перезапишется и изменения в нем потеряются.

Пользователь добавил сообщение 01 Мая 2022, 13:53:28:
Кстати, демон яндекса вроде как через какое-то время пробует еще раз подсоединиться, и если этого дождаться, то может оно оживет само.

Пользователь добавил сообщение 01 Мая 2022, 14:01:00:
Если исключительно по unix-way, то настройка задержки до запуска сети это не в индикаторе нужно, а в демоне.
Индикатор просто выводит статус демона на экран - именно в этом его задача. А вот стартовать правильно синхронизацию (когда появится сеть) - это дело демона. 
« Последнее редактирование: 01 Мая 2022, 14:01:00 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн olegorov

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Я имел в виду yd-tools из ppa.
Вижу, что Вы добавили версию 22.10, но мне бы сперва 22.04 =)

И только на днях увидел, что у Вас есть версия go и qgo. Но пока не понял, как собрать самому.
Первая же команда по подгтовке выдаёт ошибку "E: Невозможно найти пакет qt-sdk"
Моих знаний линукса пока не хватает, чтобы разобраться самому.
И готового бинарника qgo я почему-то не могу найти на гитхабе.
upd. уже понял, что для кьюта сборки и нет.
« Последнее редактирование: 01 Мая 2022, 14:50:03 от olegorov »

Оффлайн Improver

  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
Индикатор (python3 версия) запускается через desktop файл ~/.config/autostart/Yandex.Disk-indicator.desktop. Вот в нем и можно прописать
Спасибо, сделал так, потестирую...

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

Индикатор просто выводит статус демона на экран - именно в этом его задача. А вот стартовать правильно синхронизацию (когда появится сеть) - это дело демона.
Да, демона. Но раз уж индикатор имеет настройку "запускать сервис яндекс-диск при старте индикатора", то можно было бы там же добавить в настройки и задержку запуска в "Exec=...", в следующих версиях. :)

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
olegorov, Там с QT как-то все закисло у меня если честно. Был один человек который планировал питон версию под QT переписать, но как-то не срослось.

С Go версией под QT у меня получилось что-то собрать когда-то довольно давно. И я уже очень давно эту версию не трогал.

Сейчас хоть сколько-то актуальны только yd-tools и yd-go (обе - GTK версии).

Для 64-бит уже собранный бинарь yd-go есть в релизах https://github.com/slytomcat/yd-go/releases
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Нашел кстати интересный вариант.

Оказывается сейчас все "современные/правильные" приложения уже выводят свои индикаторы через специальный сервис D-Bus StatusNotifierItem. Что позволяет вообще отвязаться от DE. Там вся суть D-Bus (если кто не в курсе что это такое) в общей шине, которую приложения могут использовать и как сервис, и как среду для предоставления сервисов. Так вот StatusNotifierItem - обеспечивается всякого рода плагинами панели DE, которые отвечают за отображение статусов разных служб и приложений (туда обычно микшер звука и network-manager свои иконки с меню вешают, а еще туда всякие telegram и zoom свои иконки вешают).
Под go есть (довольно еще кривой) fyne.io/systray - это форк уже используемого в yd-go github.com/getlantern/systray (проект уже почти заброшен), в котором для linux вывод индикатора сделан через D-Bus.

Кривость fyne.io/systray в том что они его там преимущественно под KDE гоняют и, к примеру у меня в XFCE меню не показывается и иконка смазывается (они зачем-то ее перекодируют там). Еще пока не очень понял в чем там проблема с меню, но вроде есть мысли как поправить. Буду пробовать в форке подкорежить, что бы он у меня заработал, и потом надо будет в других DE попробовать.

Пилю пока в отдельной feture-branch switch-to-fyne-io. Если получится довести до ума то yd-do будет независим от GTK.

PS
За одно еще раскопал тему как через D-Bus уведомления выводить (раньше они просто вызовом внешней утилиты notify-send делались). Уже сделал вариант с отправкой уведомлений через D-Bus в dev бранче. Если кто-то готов потестировать (собранный 64-биный) в разных дистрибутивах - буду очень благодарен любым фидбекам.

Пользователь добавил сообщение 09 Мая 2022, 16:52:57:
Нашел вроде еще один форк github.com/skycoin/systray (форк от fyne.io/systray, который форк от github.com/getlantern/systray).

Там в мастер ветке вроде заработало меню.

Т.е. теперь получилось в ветке switch-to-fyne-io сделать сборку без зависимостей от GTK!!!
И более того - там теперь CGO (баиндинг С в Go) не нужен стал.
Если собирать динамически линкуемый вариант то получается так:
$ go build -ldflags "-X main.version=$(git describe --tag)"
$ ll yd-go
-rwxrwxr-x 1 stc stc 6131647 мая  9 15:48 yd-go*
$ ldd yd-go
        linux-vdso.so.1 (0x00007ffd30bde000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5a810b5000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5a80ec3000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5a810f0000)
А если собирать статически собранный бинарь то:
$ CGO_ENABLED=0 go build -ldflags "-X main.version=$(git describe --tag)"
$ ldd yd-go
        not a dynamic executable
$ ll yd-go
-rwxrwxr-x 1 stc stc 6088581 мая  9 15:52 yd-go*
(Нажмите, чтобы показать/скрыть)

Т.е., кроме исключения зависимостей от GTK и внешних утилит (notify-send), можно еще и размер бинарика немного уменьшить.


Собранный статический 64-битный бинарь приложил в последий релиз из мастера. Или можно поставить себе go (v1.18) и собрать самостоятельно из ветки switch-to-fyne-io.

Если есть желающие его погонять в разных дистрибутивах - буду очень признателен т.к. сам планирую проверить только в паре дистрибутивов на виртуалке: LTS- версии ubuntu и kubuntu. После чего наверно буду мержить эту ветку в мастер.
« Последнее редактирование: 10 Мая 2022, 02:36:49 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
По ходу дела впиливание работы через D-Bus добавило и пачку проблем в systray.

Нашел и пофиксил (не всегда так уж красиво как хотелось бы) в собственном форке от skycoin/systray несколько мест где асинхронно (из разных потоков) обновлялись мапы (это словари в терминологии python или попросту ассоциативные массивы: доступ к элементу по ключу, а не по индексу). В Go мапы не потоко-безопасны и доступ к ним надо ограничивать мьютексами.

Так ребята из fyne.io там мало того, что к одной мапе (которая еще в первичной версии systray была) лезли без блокировок, так еще и завели навороченную структуру layout для меню в представлении для D-Bus StatusNotifierItem (там рекурсивная структура с мапами и массивами внутри каждого узла) которую и сами обновляли без блокировок да еще и внутреннй обработчик сообщений от d-bus эту-же структуру в своей go-routine мог серелизовать в XML.   

У кого-то может это и не выстреливало, но конкретно в yd-go меню довольно динамично обновляется (специфика первичной задумки проекта, возможно не самой разумной, ибо уже были из-за нее проблемы, но...), что вызывало периодическое выпадение с паникой (Go и в рантайме следит что бы в мапы не писали и читали одновременно из разных потоков).
 
Вобщем большой пардон за такие погружения в программирование, но наболело. Почему то в этом мире интересные фичи всегда идут в комплекте с кучей проблем.... се ля ви....
« Последнее редактирование: 11 Мая 2022, 19:17:30 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн sarovbars

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Доброго времени суток, возник такой вопрос: как лучше всего поставить yd-tolls под Astra linux (Orel) 2.12.44 ?
дистрибутив основан на debian, на официальной странице установка через PPA, но при попытке добавления репозитория пишет ошибку Error: could not find a distribution template for AstraLinuxCE/orel
 :'(
« Последнее редактирование: 11 Мая 2022, 17:36:50 от sarovbars »

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
К сожалению с Astra linux вряд-ли смогу помочь  :-[

Может попробуете индикатор yd-go? Тем более что сейчас есть новая версия (пара сообщений выше) с отвязкой от DE+еще кучи зависимостей, и по ней хотелось бы получить побольше фитбеков.

yd-go ставить не надо - там просто 64-битный бинарь есть на github или можно самостоятельно его собрать из исходников (там минимум телодвижений для этого нужно).
« Последнее редактирование: 11 Мая 2022, 19:16:33 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн olegorov

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Запустил версию dbus под Kubuntu 20.04
В меню последних синхронизированных - основное меню.

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
В меню последних синхронизированных - основное меню.
Не очень понял, т.е. вместо списка последних синхронизированных опять тоже меню откуда открывался этот список?

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

Там эти парни кто фичу пилил не доделали одну функцию - она должна по ID пункта меню выдавать на него детали, а они там игнорируют входной ID и выдают всегда от корня в ответе. Поправить знаю где и как, сейчас попробую пофиксить.

Пользователь добавил сообщение 12 Мая 2022, 00:36:05:
Обновил сборку тут.

Попробуйте.

Самое удивительное с этим dbus - там меню можно как полным лайаутом (от указанного id и глубже) запросить, так и каждый id (c учетом вложенности) или даже по списку id. Т.е. меню сервер может получить тремя разными методами.

Так вот в версии fyne.io можно было получить только лайаут целиком (причем вот так как глюкануло в кедах - с ингором ID из запроса). И такой вариант в XFCE не работал вообще никак.

В версии github.com/skycoin/systray были допилены два дополнительных метода, но первый они не поправили. И это позволило в XFCE меню появиться.

Я там добавил трейсинг для того что бы понять, что там на самом деле происходит (тупая печать в stdout того к какому методу пришли и что спрашивали), так выяснилось, что в XFCE, как только индикатор (клиент dbus) шлет сервису прорисовки иконки/меню сигнал menuUpdated, так сервер сначала присылает запрос получения полного лайаута (метод 1) для 0-го ID (т.е. меню от корня), а потом по одному и пачками (метод 2 и 3) спрашивает характеристики для вложенных ID.

Судя по глюку из KDE - там используется только первый метод, но им запрашивается и само меню и все его подменю, т.е. там нужно отдавать от того ID который запросили при вызове. Собственно это я в последней сборке и пофиксил.

Пользователь добавил сообщение 12 Мая 2022, 00:49:46:
И да!

olegorov, огромное вам спасибо за помощь в тестировании!!!

Я то на выходных в этом D-Bus как тот крот: рыл и копал - врубался как оно там в принципе работает и что там глючит. Но сейчас выходные закончились и работы на работе хватает. Так что свои планы (поставить пару дистрибутов в виртуалку для тестов) я пока не тешу себя надеждой реализовать ранее следующих выходных (да и там может не получиться этим заняться). Так что любой фитбек по работе dbus-версии в разных дистрибутивах очень важен, т.к. сокращает мое время на тестирование. И убыстряет фиксы глюков, которых там еще может быть много... Ибо код самой библиотеки systray (в части специфичной для linux) был изменен процентов на 60%, если не больше. И там косяков с-но добавили целое море. Я его уже начал его вычерпывать, но пока еще не уверен, что до дна дошел :)
« Последнее редактирование: 12 Мая 2022, 00:49:46 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн olegorov

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Всегда рад помочь =)
Увы, в программировании я полный ноль, так что помощь будет только юзанием.

Обновлённая версия показывает меню последних синхронизированных корректно.

Ешё могу пожаловаться на качество иконки - оно ужасное! Просто yd-go выдаёт картинку лучше.

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Про ужасную иконку я в самом начале обратил внимание. Там надо отдельно копать.

Дело в том что (так по крайней мере в xfce) иконка в систем-трее и индикаторах приложений масштабируется под размер панели и это заставляет тех кто эти компоненты делает правильно масштабировать иконку.

А вот status notifier плагин панели (тот самый, который обслуживает D-Bus StatusNotifierItem) нифига иконку не масштабирует при изменении размера панели, но зачем-то масштабирует до скромных ~15х15 пикселей.

У yd-go иконки были приведены к размеру 22х22, и вот эту мелочь они еще до 15х15 масштабируют. Получается то самое дерьмо...

Я уже убил на эту тему пол дня и понял, что пока стоит сосредоточится на функционале, с иконками разбираться буду после того как функционал до ума доведу. Там с иконками - много возни: надо разные варианты попробовать, может даже вообще новые иконки мутить (а это отдельная бодяга, тут помощь человека с чувством прекрасного нужна - я-то технарь по натуре).
« Последнее редактирование: 12 Мая 2022, 11:04:22 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн luu

  • Активист
  • *
  • Сообщений: 721
  • шта?
    • Просмотр профиля
Доброго времени суток, возник такой вопрос: как лучше всего поставить yd-tolls под Astra linux (Orel) 2.12.44 ?
дистрибутив основан на debian, на официальной странице установка через PPA, но при попытке добавления репозитория пишет ошибку Error: could not find a distribution template for AstraLinuxCE/orel
 :'(
Так PPA - это же про Ubuntu, не про Debian

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Ну, чисто теоретически может и можно как-то репу ubuntu на астре приципить. Только вот это лучше у майнтейнеров астры выяснять...
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

 

Страница сгенерирована за 0.042 секунд. Запросов: 22.