Closed timamus closed 1 year ago
Трудно ответить без дополнительных деталей. Могу только предположить.
В индикаторе есть защита от повторного запуска.
Возможно у вас запуск индикатора прописан в двух местах. В любом DE есть более одного метода автоматического запуска + можно и другими средствами запуск осуществить при логине пользователя. Когда интернет есть и один из методов проскакивает вперед и второй падает. А когда интернета нет тот что первый на старте как-то подвисает и второй успевает запуститься.
В любом случае я гляну что с этим можно поделать, а вы посмотрите, пожалуйста, откуда индикатор запускается и нет ли такого что он запускается дважды.
Попробуйте установить индикатор из исходников мастер ветки. Я там перенес проверку на повторный запуск на самую раннюю стадию запуска индикатора. По идее такое должно лучше работать на отлов дублей и вполне возможно исправит проблему с двумя запусками. Однако это все равно не отменяет вопроса: откуда он два раза у вас запускается....
Кстати, понять откуда запускаются индикаторы довольно просто, когда два индикатора запустились: pgrep yd-tools
- покажет PID-ы запущенных индикаторов, а pstree -s -p $pid
покажет цепочку запуска для процесса $pid
.
pgrep yd-tools
1972
pstree -s -p 1972
systemd(1)───lightdm(1161)───lightdm(1419)───cinnamon-sessio(1472)───yd-tools(1+
Вроде не критично, но иногда это выглядит вот так у меня на двух ПК со свежей Linux Mint Vera. Если закрыть один исчезают оба индикатора. Дело наверное не в процессе...
Индикатор ставил вот так:
# Installing yandex-disk-indicator
echo -en "\033[1;33m Installing yandex-disk-indicator... \033[0m \n"
sudo add-apt-repository ppa:slytomcat/ppa -y
sudo apt update && sudo apt install -y yd-tools
Индикатор запускается по пути ~/.config/autostart/Yandex.Disk-indicator.desktop. Временно убирал файл, ничего не запускалось тогда.
Тогда проблема в чем-то другом.
Индикатор умеет работать с несколькими аккаунтами, и в таком случае он рисуется несколькими иконками (каждая иконка под свой аккаунт).
То что у вас похоже именно на такой кейс, и возможно у вас два аккаунта прописано в ~/.config/yd-tools/yandex-disk-indicator.conf
(будет не лишним его тоже показать).
Но тогда встает другой вопрос: а почему при наличии интернета индикатор для второго аккаунта не появляется...
Файл yandex-disk-indicator.conf
выглядит вот так:
autostart="yes"
notifications="no"
theme="no"
fmextensions="yes"
daemons="/home/user/.config/yandex-disk/config.cfg"
А при клике по обоим иконкам открывается меню?
Тут посмотрел весь код внимательно, и если это не какой-то чудесный глюк, то никак в коде индикатор задвоиться не может. Но, остаются плагины панели. Вот с ними в современных DE изрядный бардак. Возможно там у вас в панели есть два плагина, через которые индикатор может показаться (просто еще одно предположение). И вот при старте без сети код сначала добавляет иконку, а потом пытается достучаться до демона и уже обновить иконку согласно статусу демона. Что там под капотом у библиотеки appindicator - я точно не знаю, но возможно происходит какое-то нарушение связи со старой иконкой и он добавляет новую (или происходить что-то подобное). А при быстром старте (при наличии сети) все проходит штатно.
Что бы я предложил: а попробуйте отключить некоторые плагины панели - вполне возможно это даст эффект.
Аналогичная ситуация. Если завершить через меню один индикатор, то второй также завершается.
Ubuntu 22.10.
avmaksimov, а можно больше деталей. yandex-disk-indicator.conf
avmaksimov, а можно больше деталей. yandex-disk-indicator.conf Без проблем. Кстати, ощущение, что проблема именно при включении компьютера. При перезагрузке проблемы нет.
autostart="yes" notifications="yes" theme="no" fmextensions="yes" daemons="/home/andrei/.config/yandex-disk/config.cfg"
Вот и немного измененный конфиг демона Яндекса (без личных данных): auth="/home/user/.config/yandex-disk/passwd" dir="/mnt/non-system-drive/Data/Yandex.Disk" proxy="no" exclude-dirs="Folder1, Folder2"
startonstartofindicator="yes" stoponexitfromindicator="yes"
avmaksimov, а можете проверить мою теорию с плагинами DE?
Попробуйте по-отключать некоторые из тех что за индикацию отвечают. По конфигу и коду должен один индикатор создаваться. И меню у индикаторов должны быть полностью идентичные. У вас это так?
avmaksimov, а можете проверить мою теорию с плагинами DE?
Попробуйте по-отключать некоторые из тех что за индикацию отвечают. По конфигу и коду должен один индикатор создаваться. И меню у индикаторов должны быть полностью идентичные. У вас это так? Тут такое интересное дело). У меня была Убунту 22.04 TLS. Я обновил до 22.10 и похоже, что все расширения накрылись). Теперь ни одно из них не отображается, но т.к. систему расширения настроили, то всё отображается как есть - более похоже на Windows - кнопка Пуск без категорий и со значками плюс трей справа).
Так что, даже не знаю, что отключать. В списке расширений пусто и если что-то искать, то отображается Unsupported. По ходу, зря обновился не до TLS.
Почитал вашу идею насчёт плагинов - звучит похоже. Как вариант, может после инициализации вам проверять на две иконки и удалять ненужную?
А где проверить то? Индикатор создается один раз через библиотеку AppIndicator и что там сама эта библиотека делает внутри плагинов - уже вне контроля. Тем более не может приложение рулить плагинами - ими рулит пользователь.
Я предположил, что вы как-то создаёте "иконку" и, наверняка, есть способ уничтожить её. Возможно, есть другая библиотека для проверки и создания иконок. Не знаком так хорошо с Пайтоном или с библиотекой. Сужу по другим языкам.
Там сейчас все идет в противоположную сторону.
У меня есть проект yd-go, который (с недавнего времени) вообще не знает кто будет рисовать индикатор: он на уровне D-Bus ищет провайдера org.kde.StatusNotifierItem, который будет рисовать и через него организует работу индикатора. Т.е. нет не то что контроля за тем что именно нарисуется и как, но даже нет понимания какой именно сервис реализует этот D-bus интерфейс. И все управление на уровне строго описанного протокола d-bus .
С одной стороны это приносит практически полную независимость от DE... и это есть, но есть также и кривая реализация этих самых сервисов в разных DE. Собственно столкнувшись с этими косяками я и грешу на эти плагины DE.
Там в последних ubuntu начали затягивать AyatanaAppIndicator - а там все очень глючно и рисуют индикаторы как раз два сервиса один из них реализует поддержку сервиса org.kde.StatusNotifierItem, но он зачем-то пересылает все сообщения другому сервису... Я вполне допускаю, что в 22.00 скещены кашалот с бегемотом: работают сразу несколько плагинов панели, которые выводят иконки приложений и из-за этого и возникает это задвоение.
Кстати про yd-go, а можете его попробовать - он будет задваивать иконки?
попробую. Я могу использовать две программы? Вылетает почти на любое действие и настроек нет, это нормально? Пока только пишется?
Индикаторы (yd-go и yandex-disk-indicator) - это просто обертки вокруг yandex-disk утилиты/демона.
Они оба отслеживают изменения в файле ~/Yandex.Disk/.sync/cli.log (туда демон yandex-disk пишет про любые изменения своего статуса) и как только файл изменился вызывается yandex-disk status и полученный вывод парсится для определения текущего состояния. В этом оба индикатора ведут себя совершенно одинаково и по идее работе друг друга мешать не должны.
yd-go немного проще чем yandex-disk-indicator. Там у него прямо в меню несколько настроек самого индикатора. Никакие настройки yandex-disk в GUI там не вытаскивались (ибо и не стоит тянуть на себя ответственность за конфигурацию посторонней, по сути, утилиты). Кроме того там нет ничего про поддержу actions файловых менеджеров и установку/настройку yandex-disk. Т.е. yd-go - чистый индикатор без всяких блекджеков и ...
Но вот в том как они выводят сам индикатора разница большая. yandex-disk-indicator использует библиотеку GTK AppIndicator (и потому завязан на GDE). yd-go - зависит только от наличия поддержки интерфейса org.kde.StatusNotifierItem через D-bus. Т.е. должен работать в практически любом DE. Но как я уже выше говорил - есть нюансы... нюансы реализации тех самых сервисов, которые этот самый интерфейс поддерживают...
Теперь к остальным вашим вопросам: "Вылетает почти на любое действие и настроек нет, это нормально?" я могу представить как например пчелы из улья вылетают, но что именно вы имеете в виду я представить не могу. Есть какие-то логи вылетов, или что-то еще. Запускайте yd-go через терминал с ключом -debug, и присылаете репорт в ишью yd-go (это другой репозиторий).
yd-go - уже не первый год и он вполне рабочий. Но на работу через D-bus он переделан не так давно.
Странные у вас для программиста ассоциации с "вылетает". Это означает, что процесс "падает"))) (это значит, экстренно завершается - сам или более высоким процессом / ОСью).
Я предлагаю перейти к конструктивному диалогу: выявили проблему оформите репорт с предоставлением необходимых для разбора деталей, тогда можно и ожидать правильные ассоциации и конструктивные ответы.
А на сообщения "вылетает..." могу ответить только своими ассоциациями на этот отнюдь не однозначный глагол (как и на глагол "падает")))).
Вот что нагуглил по поводу задвоения иконок (это оказывается довольно общая проблема при апгрейде операционки).
Проблема как правило вызвана задвоением плагинов выводящих иконки. К приложениям (чьи иконки задваиваются) эта проблема отношения не имеет. Проблему нужно решать именно выносом из панели (и возможно из системы) дублирующих плагинов/сервисов.
Так что закрою как не относящиеся к индикатору.
Я нашел решение вот здесь Duplicate Transmission icon in the XApp Status Applet. Выполнение команды cat ~/.xsession-errors
показывала вот это:
Gjs-Message: 15:48:10.259: JS LOG: [LookingGlass/info] Adding XAppStatusIcon: yandex-disk-indicator (:1.139/org/x/StatusIcon/Icon)
Gjs-Message: 15:48:11.063: JS LOG: [LookingGlass/info] Adding systray: yandex-disk- (16x16px)
Похоже, что проблема действительно никак не связана с индикатором! Перевод ответа из статьи дословно "Окей, не очевидно почему, но transmission загружается дважды в этом выводе, один раз в апплете xappstatus, а затем немного позже в виде устаревшего значка systray. Я бы попробовал с небольшой задержкой (скажем, 5 секунд) для вашего элемента запуска для transmission и посмотрел, позволит ли это избежать проблемы."
Я добавил в конец файла /home/user/.config/autostart/Yandex.Disk-indicator.desktop строку X-GNOME-Autostart-Delay=5
. И на протяжении продолжительного времени не наблюдаю проблему. Теперь вопрос, возможно ли добавить строку X-GNOME-Autostart-Delay=5
в конфигурацию индикатора?
возможно ли добавить строку
X-GNOME-Autostart-Delay=5
в конфигурацию индикатора?
Добавил, но сегодня загрузилась одна иконка. Надо потестировать несколько дней. Если всё получится, я думаю, это будет хорошим решением.
Пока полёт нормальный. Если что, напишу. Думаю, можно считать это решением!
Спасибо!
Добавил, как и рекомендовано, в конец файла /home/user/.config/autostart/Yandex.Disk-indicator.desktop строку X-GNOME-Autostart-Delay=5. Проблема решена. Спасибо!!!
При старте Linux Mint без активного подключения к интернету часто запускается два экземпляра yandex-disk-indicator. Почему так?