воскресенье, 26 ноября 2017 г.

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


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

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

Можно было предположить, что созданная ранее реализация получилась случайно и не имеет свойства повторяемости. Но на совершенно другом хосте были склонированы настройки запуска всех клиентов Диска.Яндекс и их индикаторов, расположенные соответственно в каталогах /home/user/.config/yandex-disk и /home/user/.config/yd-tools, расположения каталогов синхронизации и кнопок запуска. После выполнения терминальных команд установки Диска.Яндекс и индикатора были осуществлены пробные запуски. Всё заработало как надо.

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


Но, как говорится, мы не ищем лёгких путей, поэтому, вспомнив решение для клиента синхронизации MEGA, попробуем сделать подобное.

Идея проста. Перед запуском каждой учётной записи Диска.Яндекс каталог с настройками Диска.Яндекс удаляется, а вместо него записывается каталог с заранее сохранёнными данными для запуска клиента Диска.Яндекс. При этом настройки индикатора Диска.Яндекс остаются неизменными.

Сначала настроим свой клиент Диска.Яндекс для, условно говоря, первой учётной записи.

Установим клиент Диска.Яндекс и запустим его через команду терминала yandex-disk setup

Учитывая запуск нескольких учётных записей в пусти синхронизации вместо предлагаемого а умолчанию пути (например, для пользователя системы manager)

Введите путь к папке Яндекс.Диска (Оставьте пустым для использования папки '/home/manager/Yandex.Disk'):

укажите другой путь, например, /home/manager/Yandex.Disk/Disk1

На вопрос "Запускать Яндекс.Диск при входе в систему? [Y/n]:" укажите n и остановите процесс синхронизации командой терминала yandex-disk stop.

В рассматриваемом примере настройки клиента Диска.Яндекс расположены в каталоге  /home/manager/.config/yandex-disk  и представляют из себя три файла:


Определим место для хранения этих настроек, например,  /home/madesta/Yandex.Disk/config/Disk1  Для этого создадим в каталоге Yandex.Disk каталог config и в каталоге config создадим ещё один каталог Disk1. Скопируйте в него каталог yandex-disk, содержащий настройки клиента. Это будут настройки клиента для первой учётной записи.

Установим и настроим индикатор Диска.Яндекс. Для установки индикатора введите в терминале одной строкой команду  sudo add-apt-repository ppa:slytomcat/ppa && sudo apt update && sudo apt install yd-tools

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


а сервис запускался и останавливался при запуске и остановке индикатора.


Остановите индикатор Диска.Яндекс командой "Выход".

Настроим клиент Диска.Яндекс для второй учётной записи Яндекс так, как это было сделано для первой учётной записи. Т.е. указываем другой каталог синхронизации (не по умолчанию), а также на вопрос "Запускать Яндекс.Диск при входе в систему? [Y/n]:" указываем n и останавливаем процесс синхронизации командой терминала yandex-disk stop.

Определим место для хранения этих настроек, например,  /home/manager/Yandex.Disk/config/Disk2  Для этого создадим в каталоге Yandex.Disk каталог config и в каталоге config создадим ещё один каталог Disk2. Скопируйте в него каталог yandex-disk, содержащий настройки клиента. Это будут настройки клиента для второй учётной записи.

Теперь создадим 2 скрипта sh.

В приведенных ниже листингах указывается домашний каталог пользователя системы manager. У Вас это будет Ваш домашний каталог. 

Откройте текстовый редактор и напишите в него команды для запуска первой учётной записи:

#!/bin/bash
rm -R "/home/manager/.config/yandex-disk"
cp -R /home/manager/Yandex.Disk/config/Disk1/yandex-disk "/home/manager/.config"
yandex-disk-indicator
zenity --info --text "Yandex disk 1 stopped" 2>/dev/null --timeout=3

Пояснения. 

Команда rm -R "/home/manager/.config/yandex-disk" удаляет каталог yandex-disk со всеми файлами без вывода запросов на подтверждение. 

Команда cp -R /home/manager/Yandex.Disk/config/Disk1/yandex-disk "/home/manager/.config" копирует каталог yandex-disk, содержащий заранее сохранённые параметры для запуска клиента Диска.Яндекс для первой учётной записи в каталог /home/manager/.config

Команда yandex-disk-indicator осуществляет запуск индикатора.

Команда zenity --info --text "Yandex disk 1 stoped" 2>/dev/null --timeout=3 выводит информационное сообщение Yandex disk 1 stopped (укажите своё сообщение, можно по-русски), которое автоматически исчезнет через 3 секунды. Время определяется параметром timeout=3 (можете указать своё время).

При использовании сообщения, содержащего более 3 слов Вы можете столкнуться с тем, что ширина окна сообщения будет занимать большое место на Вашем экране. Чтобы окно информационного сообщения не расширялось сверх удобной для Вашего восприятия ширины по горизонтали, используйте символы переноса на новую строку \n, например: "Работа клиента Диск.Яндекс\nпод аккаунтом user1 завершена". Чтобы выбрать приемлемое для Вас место перехода на новую строку, двигайте расположение \n вправо или влево. Для проверки запускайте команду в окне терминала, например:

zenity --info --text "Работа клиента Яндекс.Диск\nпод аккаунтом user1 завершена" 2>/dev/null --timeout=5

Для использования пробела между строками применяйте двойной символ перехода на следующую строку \n\n


Если вместо информационного сообщения по центру экрана Вы предпочитаете видеть вплывающие системные уведомления (оповещения), то вместо строки

zenity --info --text "Текст сообщения." 2>/dev/null --timeout=3

используйте строку  notify-send -i info "Текст сообщения."

Если системные уведомления (оповещения) не отображаются, то возможно, что в системе отсутствует необходимый пакет и его требуется установить:

sudo apt install libnotify-bin


Сохраните файл как файл sh (например, disk1.sh) и укажите, что этот файл будет исполняемым.


Соответственно, для запуска второго клиента:

#!/bin/bash
rm -R "/home/manager/.config/yandex-disk"
cp -R /home/manager/Yandex.Disk/config/Disk2/yandex-disk "/home/manager/.config"
yandex-disk-indicator
zenity --info --text "Yandex disk 2 stopped" 2>/dev/null --timeout=3

Теперь осталось создать кнопки для запуcка каждого из созданных файлов sh и проверить работу скриптов sh, которые "обманывают" систему, заставляя её полагать, что она всё время  работает с одним и тем же Диском.Яндекс.

Собственная ошибка привела к созданию описанного выше варианта.

С определённой долей самокритики


1 комментарий:

  1. Вот пилили пилил этот варинат когда два+ индикатора работают с одновременно запущенными двумя дисками, а вы так упорно эту фичу хороните.

    ОтветитьУдалить