суббота, 1 июля 2017 г.

Индикатор Диск.Яндекс с несколькими учётными записями в Linux Mint и Ubuntu. Независимый запуск индикаторов Дисков.Яндекс

Если у Вас имеется несколько учётных записей служб Яндекса, а также Вы пользуетесь на своей системе Linux индикатором Диск.Яндекс, то можете настроить индикатор таким образом, чтобы у Вас был доступ к нескольким учётным записям.


Если Вы из простой любознательности пробовали обратиться в меню индикатора к разделу "Помощь – Индикатор Яндекс.Диск", то после перехода на ресурс разработчиков могли заинтересоваться разделом "Часто задаваемые вопросы". Вот в нём-то и имеется ответ на вопрос "Может ли индикатор работать с несколькими учетными записями Yandex.disk-а?"

  Цит.:    Да, индикатор может работать с несколькими демонами синхронизации (они отображаются как отдельные иконки в панели инструментов).

Ключ запуска --config позволяет добавить нового демона синхронизации через указания пути к конфигурационнму файлу демона. Вы может настроить нового демона (с новыми учетной записью пользователя, синхронизируемым каталогом и конфигурацией) в терминале через команду yandex-disk token, или вы можете указать путь к новому конфигурационному файлу (файл может отсутствовать или быть пустым) и следуя предложениям индикатора при запуске настроить нового демона в графическом интерфейсе (вам понадобится указать логин/пароль и путь к файлу auth).

Не могу возразить против того, что такая возможность меня заинтересовала.


Но как это реализовать на практике по принципу "делай как я" из ответа на вопрос мне было не совсем понятно. Поэтому, вооружившись терпением, мной с решимостью была предпринята попытка реализовать такую возможность, надеясь при этом, что высказывание знаменитого Козьмы Пруткова "Усердие всё превозмогает, но бывает, что усердие превозмогает и рассудок" ко мне относиться не будет.

После нескольких мучительных попыток было выяснено, что запускать индикатор необходимо не просто командой yandex-disk-indicator , а командой с указанием параметра yandex-disk-indicator -с <путь к файлу настроек индикатора>.

Смотрим настройки индикатора. Они расположены в Вашем домашнем каталоге

  /home/Ваш_дом.каталог/.config/yd-tools/yandex-disk-indicator.conf  

Чтобы его увидеть в менеджере файлов поставьте галочку в "Вид – Скрытые файлы".

У меня есть ещё одна учётная запись Яндекса, которую условно назовём Guava. Создадим файл yandex-disk-indicator-guava.conf, скопируем в него содержимое файла yandex-disk-indicator.conf и внесём в него изменения, например:

proxy="no"
dir="/home/manager/Clouds/Yandex-Guava"
auth="/home/manager/.config/yandex-disk-guava/passwd"
startonstartofindicator="no"
stoponexitfromindicator="yes"

dir – указывает путь к каталогу синхронизации второй учётной записи. Так как такого каталога не имеется, то создаём его. Т.е. теперь в каталоге Clouds будет 2 каталога Yandex и Yandex-Guava. Каждый из них отвечает за свою учётную запись.

auth – указывает на каталог с настройками демона Диска Яндекс. Так как каждой учётке должен быть сопоставлен свой демон (каталог синхронизации, пользователь и пароль), то дополнительно к уже имеющемуся каталогу yandex-disk создаю yandex-disk-guava.

Запускаем индикатор.


Не пугайтесь, ничего страшного не произошло. Просто индикатор ещё не знает логина и пароля и вторую учётку. Жмём OK.


Так как работа с Диском.Яндекс осуществляется не через прокси-сервер, то оставляю по умолчанию и жму "Далее".


Вторая учётная запись должна синхронизироваться с другим каталогом, поэтому выбираю "Выбрать существующую папку" (Yandex-Guava мной уже создана, см. упоминание выше).


После нажатия на кнопку "Далее" в открывшемся окне файлового менеджера необходимо будет указать каталог для синхронизации второй учётной записи Диска.Яндекс.


Индикатор должен прописать настройки для второго демона Диска.Яндекс. Так как он не понимает, что первый демон уже имеется, то предлагает настройки по умолчанию. Необходимо вместо yandex-disk указать каталог с настройками второго демона (логин, пароль, каталог для синхронизации). Поэтому вместо yandex-disk указываю yandex-disk-guava.


В следующем окне указывается логин и пароль для второго демона Диска.Яндекс.


Далее индикатор уведомляет о сохранении настроек для второго демона.


Жму OK. И что в итоге? Как интересно: запущено 2 независимых синхронизации.


В настройках индикатора можно увидеть 2 сервиса: Яндекс.Диск №0 и Яндекс.Диск №1. Чтобы одновременно не запускалось сразу 2 синхронизации можно отключить старт демонов при запуске индикатора для Яндекс.Диск №0 и Яндекс.Диск №1.


Тогда при старте индикатора синхронизация запущена не будет.


Если, например, щёлкнуть по правому значку левой кнопкой мыши и выбрать "Запустить сервис Яндекс.Диск", то будет запущена синхронизация Яндекс.Диск №1 (который соответствует имени Guava), а созданный ранее Диск.Яндекс синхронизироваться не будет.


При этом диспетчер задач покажет, что запущен только 1 экземпляр Диска.Яндекс:


Если также сделать и в отношении левого индикатора, то диспетчер задач покажет 2 экземпляра Диска.Яндекс:


Диски.Яндекс можно запускать и останавливать. Например, запустив синхронизацию в левом и остановив в её правом индикаторе


в диспетчере задач снова увидим только 1 процесс Диска.Яндекс.

Независимый запуск индикаторов Дисков.Яндекс


Всё работает, да? Но всё равно как-то "не комильфо". Меня, например, не устраивает ситуация со множественными значками индикатора, если всегда буду синхронизировать только 1 диск. По описанной выше реализации, если настрою ещё 3-й и 4-й свои аккаунты, то у меня индикатор превратится в 3-4 значка Яндекса, каждый из которых мне придётся запускать и останавливать вручную. Лишняя работа, так сказать.


Поэтому родилась идея сделать так, чтобы можно было запускать все эти учётные записи независимо друг от друга. В этом случае у меня всегда будет отображаться 1 индикатор, соответствующей выбранной конфигурации.

Что ж, приступим к реализации. Мне необходимо создать несколько конфигураций, записанных в файл  yandex-disk-indicator.conf , который автоматически будет изменяться при запуске выбранного мной Диска.Яндекс. А автоматическое его изменение будет заключаться в удалении имеющегося yandex-disk-indicator.conf и записи нового yandex-disk-indicator.conf

Для рассматриваемого примера с 2-мя учётными записями Диска.Яндекс в каталоге настроек индикатора  .config/yd-tools  (это скрытый каталог и для его отображения включите показ скрытых файлов) создаю 2 каталога, каждый из которых содержит свой yandex-disk-indicator.conf  Пусть это будут каталоги Сonf1 и Conf2.


В каталог Conf1 помещён файл yandex-disk-indicator.conf с содержанием:

theme="yes"
fmextensions="yes"
autostart="yes"
daemons="/home/manager/.config/yandex-disk/config.cfg"
notifications="yes"
stoponexitfromindicator="yes"

В каталог Conf2 помещён файл yandex-disk-indicator.conf с содержанием:

theme="yes"
fmextensions="yes"
autostart="yes"
daemons="/home/manager/.config/yandex-disk-guava/config.cfg"
notifications="yes"
stoponexitfromindicator="yes"

Эти файлы практически идентичны, за исключением указания пути к настройкам демона Яндекс. Диска, так как каждый файл запускает своей экземпляр демона. Естественно, что в настройках демонов  config.cfg  указано, что он не стартует при запуске компьютера автоматически, а запускается при вызове команды запуска индикатора.

Отмечу, что в приводимых ниже путях к файлам настроек под /.config следует понимать путь /home/Ваш_дом.каталог/.config

config.cfg в /.config/yandex-disk/ для настроек индикатора каталога Conf1: 

proxy="no"
dir="/home/manager/Clouds/Yandex"
auth="/home/manager/.config/yandex-disk/passwd"
stoponexitfromindicator="yes"
startonstartofindicator="yes"

config.cfg в /.config/yandex-disk-guava/ для настроек индикатора каталога Conf2: 

proxy="no"
dir="/home/manager/Clouds/Yandex-Guava"
auth="/home/manager/.config/yandex-disk-guava/passwd"
stoponexitfromindicator="yes"
startonstartofindicator="yes"

Демоны Дисков.Яндекс будут запускаться при запуске индикатора и останавливаться при выходе из индикатора. За это отвечают команды 
startonstartofindicator="yes" и stoponexitfromindicator="yes".

При запуске выбранного экземпляра Диска.Яндекс требуется выполнить действия:
– удалить существующий файл настроек индикатора yandex-disk-indicator.conf ;
– из каталога Conf1 или Conf2 скопировать в каталог  /.config/yd-tools/ файл настроек индикатора yandex-disk-indicator.conf;
– запустить индикатор.

Создаю 2 скрипта sh. Открываю текстовый редактор и создаю 2 файла  yandex1.sh  и  yandex2.sh 

Текст yandex1.sh (команда cp в одну строку, всего 3 строчки):

#!/bin/bash
#
rm /home/manager/.config/yd-tools/yandex-disk-indicator.conf
cp /home/manager/.config/yd-tools/Conf1/yandex-disk-indicator.conf /home/manager/.config/yd-tools/
yandex-disk-indicator

Текст yandex2.sh (команда cp в одну строку, всего 3 строчки):

#!/bin/bash
#
rm /home/manager/.config/yd-tools/yandex-disk-indicator.conf
cp /home/manager/.config/yd-tools/Conf2/yandex-disk-indicator.conf /home/manager/.config/yd-tools/
yandex-disk-indicator

rm – удаление существующего файла;
cp – копирование файла из каталога в каталог;
yandex-disk-indicator – запуск индикатора.

Сохраняю оба файла и через терминал помечаю эти файлы как исполняемые:

chmod +x /home/manager/yandex1.sh

chmod +x /home/manager/yandex2.sh

Если создать кнопки (значки) запуска индикаторов, соответствующие выполнению yandex1.sh и yandex2.sh (см. примеры создания в Cinnamon и XFCE), то практически всё уже будет работать. Но если Вы запустите sh в терминале, то увидите, что при остановке Диска.Яндекс терминал выведет сообщение

Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.

Чтобы долго не "толочь воду в ступе", сразу привожу "рецепт избавления". В конец файла sh добавить строку, например:

zenity --info --text "Yandex disk Guava stoped" 2>/dev/null

А чтобы не нажимать на кнопку OK информационного сообщения при остановке индикатора


Текст zenity --info --text латинскими буквами


Русский текст тоже отображается

добавить ещё и параметр тайм-аута, например --timeout=3

Тогда весь текст (к примеру) скрипта yandex2.sh приобретёт вид:

#!/bin/bash
#
rm /home/manager/.config/yd-tools/yandex-disk-indicator.conf
cp /home/manager/.config/yd-tools/Conf2/yandex-disk-indicator.conf /home/manager/.config/yd-tools/
yandex-disk-indicator
zenity --info --text "Yandex disk Guava stoped" 2>/dev/null --timeout=3

Вот теперь всё хорошо. Как говаривал один из моих вузовских преподавателей: "всё физично, всё прозрачно, сплошная корреляция".
 
Конечно, процесс sh немного "съест" ресурсов, но, полагаю, что 2,9 Мб оперативной памяти не слишком большая плата за достигнутое удобство.


Спасибо всем тем, у кого хватило терпения прочитать до конца сей опус.


P.S. Имеется ещё один способ реализации, который основан на запуске демона Яндекс.Диска с логином и паролем, соответствующими желаемой учётной записи Яндекс. Эти данные "подкладываются" при запуске индикатора. При этом настройки индикатора не изменяются. Подробности читать здесь.

Комментариев нет:

Отправить комментарий