Yandex disk linux статус ядра синхронизации ошибка сетевого соединения

Обновлено: 07.07.2024

В этой небольшой статье мы рассмотрим как установить Яндекс Диск на Linux и как пользоваться программой для синхронизации локальной папки с удалённым диском. Мы рассмотрим все действия на примере Ubuntu.

Установка Яндекс Диск в Linux

Сначала надо добавить официальный репозиторий диска в Ubuntu. Для этого выполните такую команду:

echo "deb http://repo.yandex.ru/yandex-disk/deb/ stable main" | sudo tee -a /etc/apt/sources.list.d/yandex-disk.list

Затем добавьте в систему ключ этого репозитория:

А потом обновите список пакетов:

sudo apt update

Установка Яндекс Диска Linux выполняется командой:

sudo apt install yandex-disk

Этот способ будет работать не только для Ubuntu, но и для всех дистрибутивов, основанных на Debian и использующих файловый менеджер apt. Если вам надо установить программу в CentOS или Fedora добавьте такой репозиторий Yandex Disk:

sudo vi /etc/yum.repos.d/yandex.repo

Затем импортируйте ключ репозитория:

И установите программу:

sudo yum install yandex-disk

Когда программа будет установлена, её надо настроить. Для того чтобы подключить Яндекс Диск выполните эту команду:


Утилита спросит нужно ли использовать прокси. Если вы живете в России и никаких ограничений для доступа к яндексу нет, то прокси можно не использовать. Потом надо ввести логин и пароль от вашего аккаунта Яндекс, а затем останется только ввести путь к папке, которую надо синхронизировать. Если это поле оставить пустым, то будет выбрана папка по умолчанию - /home/имя_пользователя/Yandex.Disk. Теперь вы можете использовать Яндекс Диск чтобы управлять своими файлами:


Можно, например, создать несколько символических ссылок из этой папки в домашнюю папку и так автоматически синхронизировать файлы или целые папки. К тому же у Яндекс Диска есть приложение, поэтому вы сможете получить доступ к вашим данным и на смартфоне. Теперь вы знаете как выполняется подключение яндекс диска Linux, а также как настроить программу для использования. А каким облачным хранилищем пользуетесь вы? Напишите в комментариях!

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Яндекс Диск не синхронизируется: решение проблемы

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

Причины проблем с синхронизацией Диска и их решение

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

Причина 1: Синхронизация не включена

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

Включение синхронизации Яндекс Диска

Причина 2: Неполадки интернет-соединения

Ошибка соединения в программе Яндекс Диск

Для проверки интернет-соединения нажмите на значок «Сеть». При необходимости подключитесь к рабочей сети.

Подключение к беспроводной сети

Обратите также внимание на состояние текущего подключения. Здесь должен быть статус «Доступ к Интернету». В противном случае нужно обращаться к провайдеру, который обязан решить проблему с подключением.

Подключение с доступом в Интернет

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

Причина 3: Нет места в хранилище

Возможно, на Вашем Яндекс Диске попросту закончилось место, и новым файлам некуда загружаться. Чтобы это проверить, перейдите на страницу «облака» и посмотрите на шкалу его наполненности. Она расположена внизу боковой колонки.

Шкала наполненности Яндекс Диска

Для работы синхронизации хранилище нужно очистить или расширить.

Причина 4: Синхронизация блокируется антивирусом

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

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

Причина 5: Не синхронизируются отдельные файлы

Некоторые файлы могут не синхронизироваться потому что:

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

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

На заметку: файлы объёмом более 10 Гб на Яндекс Диск загрузить вообще нельзя.

Причина 6: Блокировка Яндекса на Украине

В связи с недавними нововведениями в законодательстве Украины, Яндекс и все его сервисы перестали быть доступными для пользователей этой страны. Работа синхронизации Яндекс Диска также под вопросом, т.к. обмен данными происходит с серверами Яндекса. Специалисты этой компания делают всё возможное для решения проблемы, но пока украинцы вынуждены искать пути обхода блокировки самостоятельно.

Если не один из приведённых методов не помогает, то правильно будет сообщить о проблеме разработчикам. Для этого нажмите на значок настроек, наведите курсор на пункт «Справка» и выберите «Сообщить в Яндекс об ошибке».

Вскорости Вы получите ответ от службы поддержки по Вашей проблеме.

Для своевременного изменения данных в хранилище должна быть включена синхронизация в программе Яндекс Диск. Для её работы компьютер должен быть подключён к Интернету, в «облаке» должно быть достаточно места для новых файлов, а сами файлы не должны быть открыты в других программах. Если причину проблем с синхронизацией не удалось выяснить, обратитесь в службу поддержки Яндекса.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.


В Linux, в отличие от Windows, клиент для синхронизации Яндекс Диска является консольным и для пользователей Linux, которые не стремятся сильно погружаться в синтаксис командной строки, это может служить препятствием для использования клиента Яндекс Диска. В этой небольшой публикации рассматривается вопрос по установке клиента Яндекс Диска с графическим индикатором на Ubuntu и Linux Mint.

Задача по установке клиента условно делится на 2 этапа: установка клиента и установка графического индикатора.

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

Импортировать ключ Диска Яндекс:

Далее можно скачать необходимый пакет и установить его вручную



или выполнить это через терминал:

echo "deb http://repo.yandex.ru/yandex-disk/deb/ stable main" >> /etc/apt/sources.list.d/yandex-disk.list
sudo apt update && sudo apt install yandex-disk

Все перечисленные выше действия можно сделать одной командой в терминале:

После установки клиента в меню приложений Вы его не увидите. Его запуск и настройка производится в терминале. Введите команду

Если Вы не работаете через прокси-сервер, то в результате получите следующее:

Далее будет отображено уведомление о сохранении вводимых Вами параметров в скрытый каталог Вашего домашнего каталога и выдан запрос на указание каталога для Диска Яндекс. По умолчанию предлагается каталог Yandex.Disk домашнего каталога (каталог Yandex.Disk будет создан автоматически). В ином случае необходимо указать полный путь к каталогу Диска Яндекс. Например, в моём случае это /home/manager/Clouds/Yandex

Токен сохранен в /home/manager/.config/yandex-disk/passwd
Настройка Яндекс.Диска
Введите путь к папке Яндекс.Диска (Оставьте пустым для использования папки '/home/manager/Yandex.Disk'):

Запускать Яндекс.Диск при входе в систему? [Y/n]:
Запуск демона. Готово

Несмотря на моё категорическое n демон был запущен и началась синхронизация, о чём свидетельствовали появившиеся данные в назначенном каталоге Диска Яндекс и скрытого каталога .sync с данными синхронизации:



Моё категорическое "нет" обусловлено тем, что запуск клиента Диска Яндекс будет мной производиться вручную. Поэтому останавливаю клиент Диска Яндекс командой в терминале yandex-disk stop

yandex-disk stop
Демон остановлен.


Указываемые ранее настройки расположения каталога для синхронизации, прокси сервера можно посмотреть в файле config.cfg , открыв его текстовым редактором. При необходимости их можно изменить, например:

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

При удалении Диска Яндекс данный каталог сохраняется. Поэтому для смены каталога синхронизации можно Яндекс Диск не удалять и потом устанавливать снова, а просто изменить значение dir=". " (вместо многоточия указать другой путь).

Теперь пришла пора установить графический индикатор. Эта задача выполняется одной командой терминала:

sudo add-apt-repository ppa:slytomcat/ppa && sudo apt-get update && sudo apt install yd-tools

После установки запуск индикатора производится через главное меню в разделе "Интернет":



На подставке рабочего стола (системный лоток, системный трей) появится значок


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


В разделе "Настройки индикатора" выбираю светлую тему иконок.


После этого индикатор приобрёл тёмный цвет, более удобный для моего восприятия.


Мной индикатор будет запускаться вручную, поэтому выключаю автозапуск индикатора при старте системы.


В настройках сервиса Яндекс.Диск ставлю галочку в поле "Останавливать сервис Яндекс.Диск при выходе из индикатора". Запуск сервиса при запуске индикатора включён при первоначальной настройке индикатора, которая была осуществлена автоматически при его установке.


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


Примечание. Скрытые каталоги, начинающиеся с символа точки, через графический интерфейс добавить невозможно. Чтобы осуществить подобную настройку, добавьте в файл настроек демона Диска Яндекс config.cfg строку exclude-dirs=, например: exclude-dirs=".debris"

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


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

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

При активизации "Последние синхронизированные" Вы получите сведения о последних синхронизированных файлах, например:


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



Соответственно, при запуске индикатора будет отображено уведомление:


Настройки индикатора Диска Яндекс расположены в .config/yd-tools Вашего домашнего каталога.


Содержание yandex-disk-indicator.conf можно просмотреть в текстовом редакторе, например:

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

В каталоге icons находятся каталоги dark, light и файл readme.


Каталоги служат для помещения своих анимированных значков в формате png, отображающих состояние сервиса Диск. Яндекс Имена значков регламентированы. Подробности содержатся в файле readme на английском языке.

Отображаемые значки графического индикатора расположены в каталоге
usr/share/yd-tools/icons

Там имеются набора значков для тёмной (dark) и светлой (light) тем оформления. Если посмотреть содержимое этих каталогов, то становится понятным как должны быть именованы файлы значков.

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

Кликните по файлу правым кликом мыши и в правом контекстном меню выберите "Опубликовать через Яндекс.Диск" (сервис в это время должен быть запущен).




Соответственно, пункт "Убрать из публикации через Яндекс.Диск" деактивирует выданную ранее ссылку:


Свои значки в индикаторе Диска Яндекс

Заинтересовавшись вопросом переназначения своих значков для индикатора Диска Яндекс мной была предпринята попытка "выдирания" значков из ПО Диска Яндекс для Windows и преобразования их в формат png.

Содержание этого архива необходимо распаковать в скрытый каталог Вашего домашнего каталога /home/Ваш_каталог/.config/yd-tools/icons/---
(вместо --- д.б. указан каталог темы: dark или light в зависимости от указанной Вами в настройках индикатора).

Теперь при запуске индикатора у Вас сначала у Вас отобразится значок паузы (который будет отображаться и при остановке сервиса):


При наличии данных для синхронизации будет отображаться ряд значков процесса синхронизации, при этом синее "колёсико" будет постоянно крутиться:


Примечание.
Так как в поставке по умолчанию имеется 5 значков статуса "синхронизируется", а в версии индикатора для Windows таких значков 4, то значки 4 и 5 являются идентичными. Если очень внимательно присмотреться, то можно заметить, что "колёсико" будет кратковременно замирать, а потом снова крутиться. Замирание как раз и соответствует активации отображения значков 4 и 5. Однако даже такое отображение для меня является более наглядным, чем значки по умолчанию.

Как только данные будут синхронизированы, то у Вас отобразится соответствующий значок статуса:


Лично у меня ситуации не возникало, но при возникновении ошибки будет показан значок:


Или не записывайте файл yd-ind-error.jpg из предоставленного набора и у Вас при ошибке будет отображаться значок красного цвета из каталога по умолчанию (см. рис. выше).

Если пожелаете изменить значок паузы на более красочный, например:


то переименуйте файл yd-ind-pause.jpg на yd-ind-pause-bak.jpg,
а файл yd-ind-pause-blue.jpg на yd-ind-pause.jpg

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

Сегодня мы представляем долгожданный клиент Яндекс.Диска для Linux. Можно было бы даже сказать «специально для Хабрахабра», так как ни одно упоминание Диска здесь не обходилось без вопросов о клиенте для Линукса.

У него есть вся основная функциональность, которая есть у клиентов для OS X и Windows, и даже больше (симлинки!), и одна особенность — он консольный.

image

Ниже читайте о том, как он настраивается, что конкретно умеет, и о том, как именно он устроен и что в нём было непросто сделать.


Установить его можно здесь. Сразу после установки пакета в терминале появится команда yandex-disk, через которую в дальнейшем и идет общение с облаком Яндекса. После этого нужно вручную запустить команду setup.

Визард настройки позволяет в режиме диалога выбрать папку для синхронизации, включить автозапуск при старте системы, настроить работу через прокси-сервер (если конечно вы им пользуетесь) и авторизоваться в Яндекс.Диске. При настройке вручную первым делом необходимо авторизоваться. После этого в папке .config, расположенной в домашнем каталоге, будет создан конфиг, в котором можно будет настроить путь к папке синхронизации (можно указать в консоли вручную), прописать путь к файлу токена, указать папки, которые будут или не будут синхронизироваться, и прописать настройки прокси-сервера.

Команды

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

  • Sync запустит демон, синхронизирует все, находящееся в папке Диска, и остановит демон.
  • Start сделает то же самое, но без остановки демона после завершения синхронизации. При использовании start демон остается запущен и все изменения, происходящие в папке Диска, будут синхронизироваться автоматически.
  • Введя в терминале stop, можно в любой момент остановить запущенный демон, если он вам мешает.
  • Командой status можно узнать, в каком статусе находится ядро синхронизации.

Что умеет

Консольный клиент позволяет поделиться файлом или папкой с помощью команды publish (если файл находится не в папке диска, перед публикацией он будет туда скопирован). Ссылка будет доступна в терминале, и любой человек, пройдя по ней, сможет посмотреть или сохранить себе опубликованный вами файл или папку. Если случайно был опубликован не тот файл, с помощью команды unpublish можно закрыть доступ к публичному объекту.

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

Опция read-only позволит менять файлы локально, без заливки их в облако. При возникновении конфликтов с локальными изменениями, последние будут сохранены в переименованных файлах, а изменения из облака будут синхронизированы. Опция overwrite будет перезаписывать локально измененные файлы в режиме read-only.

Не можем не похвастаться самым интересным нововведением в ядре синхронизации — отныне мы поддерживаем синхронизацию симлинков! Если возникнут трудности и вопросы в использовании консольного клиента команды man и help просто и доступно помогут в них разобраться.

Как сделан

Чтобы в будущем код можно было использовать для реализации клиентов под разные ОС, было принято решение писать его на C++. Специфичные для разных операционных систем куски кода мы вынесли в отдельные функции или классы, а под каждую платформу писали свою реализацию. В качестве основных кроссплатформенных библиотек мы взяли Boost, OpenSSL и JsonCpp, а системой контроля версий стал git. Клиент под Linux собирался с помощью autoconf. Код писался и отлаживался в связке KDevelop + консольный gdb, либо в Qt Creator'е (в зависимости от предпочтений разработчика).

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

Как работает

Для локализации мы используем библиотеку boost::locale. Текст внутри клиента закодирован в utf-8 и по необходимости преобразовывается в специфичном для каждой операционной системы коде. Мониторинг файловой системы для Linux использует inotify, прекрасно вписыващийся в асинхронную работу boost::asio.

Как устроена синхронизация

Синхронизация — сердце Яндекс.Диска, его ключевая возможность. Задача синхронизации файлового дерева с облаком делится на несколько независимых частей.

1. Мониторинг файловой системы. Ядро синхронизации Яндекс.Диска проектировалось и создавалось как переносимая абстракция, способная выполнять поставленные задачи на всех поддерживаемых платформах. Но такая проблема, как мониторинг файловой системы не реализуется ни стандартной библиотекой C++, ни даже такими монстрами как boost. Более того, даже используя «родное» API операционной системы, мы получаем набор событий, специфический для каждой платформы.

Для мониторинга файловой системы был спроектирован интерфейс «наблюдателя», способного следить за событиями в определённой директории и возвращающего список событий, произошедших в ней. Причём для каждой поддерживаемой платформы набор этих событий отличается. Например, Mac OS X способна сообщить только о факте какого-то изменения в одной из дочерних директорий без детализации. А вот Windows и Linux возвращают полный набор, включая создание, удаление, модификацию и перемещение объектов. Хотя практика показывала, что событиям на платформе Windows доверять не стоит и самым надёжным вариантом остаётся листинг директории после получения оповещения.

2. Индексация локальных файлов и директорий. Для контроля целостности и реализации дельта-обновления файлов ядро синхронизации Яндекс.Диска использует дайджесты — наборы контрольных сумм файла и отдельных его частей. Для всего файла мы рассчитываем стойкий хэш SHA-256 и набор менее стойких сумм для отдельных блоков. Каждый файл, находящийся в папке Яндекс.Диска и не попадающий в список исключений, должен быть проиндексирован. Но вычисление хэша SHA-256 -достаточно дорогая операция, а расчёт хэшей при каждом запуске ПО был бы непростительной тратой ресурсов. Поэтому после того, как завершается индексация файла, ядро синхронизации сохраняет полученный дайджест в «банке» — специальном хранилище, находящемся в служебной директории Яндекс.Диска. Для поиска дайджестов в хранилище используется уникальный идентификатор файла — inode (размер и время последнего изменения). К сожалению, подобный подход не лишён недостатков. Например, многие файлы-криптоконтейнеры сохраняют время последней модификации неизменным даже после записи.

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

Вообще, символические ссылки — это настоящая «головная боль» для ядра синхронизации. Они могут указывать в произвольные места файловой системы, и ни ко всем из них можно применять одинаковые правила синхронизации. Например, пакеты приложений Mac OS X очень часто содержат в себе символические ссылки на директории системных библиотек, и их синхронизация в облако была бы нежелательна — особенно между разными версиями ОС. Но в то же время возможность синхронизировать дополнительные директории с помощью символических ссылок — очень заманчивая возможность, упускать которую не хотелось.

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

3. Получение дерева облачной файловой системы. Для решения проблемы синхронизации мало иметь локальную файловую структуру и дайджесты файлов — необходимо получить текущее состояние файловой системы в облаке. Если бы ядру синхронизации каждый раз приходилось обходить дерево с помощью метода PROPFIND, то каждый цикл синхронизации занимал бы неоправданно много времени и создавал бы излишнюю нагрузку на канал. Поэтому ПО Яндекс.Диска использует специальный API, который даёт возможность получать текущее состояние дерева файлов в облаке и изменения, произошедшие в нём, начиная с некоторого известного момента, определяемого версией дерева.

4. Получение оповещений об изменении облачной файловой системы. Синхронизация файлов в реальном времени требует своевременного получения оповещений об изменениях, произошедших с файлами в облаке. Можно было бы использовать периодический опрос сервера клиентами, но, оценив возможное количество клиентов, мы пришли к выводу, что такой подход окажется слабо масштабируемым и приведёт к быстрой перегрузке инфраструктуры сервиса. После недолгих поисков мы остановились на протоколе XMPP. Одна из его реализаций уже долгое время работает в Яндексе. Она была разработана командой, которая позже занимались созданием сервера WebDAV для проекта Яндекс.Диск, поэтому сложностей с интеграцией этого протокола не возникло.

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

6. Обработка очереди операций синхронизации. Создание списка операций для локального и удалённого деревьев происходит независимо. В результате могут появиться конфликтующие операции. Например, удаление в облаке файла, который был в нём изменён и ещё не синхронизирован локально, или изменение файла одновременно локально и в облаке. Конфликты модификации/удаления всегда разрешаются ядром в пользу модификации, а конфликты двойной модификации разрешаются переименованием одной из версий файла. Таким образом мы можем гарантировать сохранность данных и даём возможность после завершения синхронизации самому пользователю решить, какое из изменений больше ему подходит в каждом конкретном случае.

Операции синхронизации должны подчиняться строгому порядку, нельзя передавать файл, пока не создана его родительская директория. Так же директорию нельзя удалять, пока внутри неё остаются файлы, которые нужно переместить на новое место. Алгоритм сравнения деревьев уже создаёт операции в нужном порядке, но при возникновении ошибок он может нарушиться. Для предотвращения этой ситуации у каждой операции есть список зависимостей — набор операций, которые должны завершиться до начала её выполнения, и набор операций, которые не должны начаться, пока она не будет выполнена.

Кроме зависимостей на порядок выполнения операций оказывает влияние её приоритет. Например, операции передачи файлов выполняются в зависимости от размеров файлов — от маленьких к большим.

Дистрибутив ALT Linux. Версия клиента yandex-disk-indicator 1.9.6. Версия yandex-disk 0.1.5.948.

Получается не может получить статус? Статус считываться должен из

The text was updated successfully, but these errors were encountered:

midyukov-anton commented Feb 16, 2017

А закостылить можно что-то вроде такого:

Это костилилось по-разному уже не раз из за разных корявых настроек LC_ переменных у пользователей.
Установка LANG не срабатывает если установлена LC_MESSAGES.
Поэтому я запускаю демона в дефолтном, пустом окружении (env) и в нем ставлю значение LANG. Это 100% работает т.к. в дефолтном окружении переменные LC_* не установлены.
Но у вас похоже демон запущен под рутом или каки-то другим пользователем. Ведь env создает пустое окружение но пользователя не меняет, а демон у вас от вашего пользователя не запущен.

Покажите что говорит:
ps au | grep yandex-disk

midyukov-anton commented Feb 16, 2017

Демон yandex-disk запускается демоном yandex-disk-indicator

midyukov-anton commented Feb 16, 2017

Так может не переключать локаль вовсе, а локализовать текст который парсим?

slytomcat commented Feb 16, 2017

Индикатор пробует запустить демона и судя по логу успешно запускает - что потом происходит - не ясно пока, но по прошествии какого-то времени после старта демон исчезает. Вот с этим и надо разбираться.
Запускайте демона руками и смотрите, что происходит (по логам) - видимо демон на чем-то падает.

midyukov-anton commented Feb 16, 2017

Всё работает нормально. Я могу опубликовать файлы, синхронизация идёт. Только статус не получаем в индикаторе
env -i LANG='en_US.UTF8' похоже в Альте не работает почему-то, возможно баг. Вот к примеру:

Что у вас эта же команда выдаст?

У меня тоже ru_RU.utf8 выдает - но это какой-то глюк. Если вызвать env без команды, то он выдает окружение, так вот он выдает так:

midyukov-anton commented Feb 16, 2017

Короче решение проблемы на форуме Альта подсказали. Нужно, интерпретатор bash указать:
Вот так работает
LANG='en_US.UTF8' bash -c 'echo $LANG'
en_US.UTF8
И соответственно нужно:

slytomcat commented Feb 16, 2017

Ну баш добавлять - это масло масленное. env по сути и есть еще одна версия баш со своим окружением.

midyukov-anton commented Feb 16, 2017

Покажите, где у вас это место в коде находится

slytomcat commented Feb 16, 2017

Просто echo - это команда самого баша и поэтому она печатете $LANG из первичного окружения а не из нового. yandex-disk - это отдельный процесс и он то запускается и берет LANG уже и нового окружения.

Получаю выхлоп демона я в методе YDDaemon:getOutput(self, userLang=False)
При вызове без параметров должен возвращатся выхлоп от демона в английской локали.

slytomcat commented Feb 16, 2017

У вас что env -i LANG='en_US.UTF8' bash -c 'yandex-disk status' выдает статус, а
env -i LANG='en_US.UTF8' yandex-disk status выдает что демон не запущен?

Похоже в пустом окружении yandex-disk сам себя не видит

slytomcat commented Feb 16, 2017

А что выдает
env -i LANG='en_US.UTF8' whoami
?

slytomcat commented Feb 16, 2017

Похоже действительно какое-то взаимное несварение у env и yandex-disk в ALT-е.

midyukov-anton commented Feb 16, 2017

slytomcat commented Feb 16, 2017

что выдают
ps au | grep yandex-disk
env -i bash -c "ps au | grep yandex-disk"

midyukov-anton commented Feb 16, 2017

slytomcat commented Feb 16, 2017

так у вас сейчас демон и не запущен.

slytomcat commented Feb 16, 2017

Или он очень хорошо спрятался .

midyukov-anton commented Feb 16, 2017

midyukov-anton commented Feb 16, 2017

slytomcat commented Feb 16, 2017

а
env -i LANG='en_US.UTF8' yandex-disk status
?

slytomcat commented Feb 16, 2017

У меня все-таки ощущение что демон у вас вываливается как-то сам. Логи смотрели?

midyukov-anton commented Feb 16, 2017

midyukov-anton commented Feb 16, 2017

А где логи лежат яндекс диска?

slytomcat commented Feb 16, 2017

В .sync в синхронизируем каталоге, ну и dmesg тоже стоит с хвоста посмотреть.

midyukov-anton commented Feb 16, 2017

Нет никаких ошибок, в логах всё в порядке. Не падает он.

midyukov-anton commented Feb 16, 2017

А что у вас выдаёт:
env -i LANG='en_US.UTF8' env

slytomcat commented Feb 16, 2017

Тогда у меня пока нет идей. :(

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

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

slytomcat commented Feb 16, 2017

Во есть одна: попробуйте более свежий yandex-disk поставить - у меня стоит версия 0.1.5.978. Может глюк и пройдет.

slytomcat commented Feb 16, 2017

. может так попробовать
env -i LANG='en_US.UTF8' PATH=$PATH yandex-disk status

midyukov-anton commented Feb 16, 2017

Вот так работает:

midyukov-anton commented Feb 16, 2017

И вот так
env -i LANG='en_US.UTF8' TMPDIR=$TMPDIR yandex-disk status

slytomcat commented Feb 16, 2017

У меня ровно наоборот - если ставлю TMPDIR=$TMPDIR - то не находит демона, а без установки - находит. :0

midyukov-anton commented Feb 16, 2017

Будем альтовскую сборку значит патчить

slytomcat commented Feb 16, 2017

В Ubuntu переменная TMPDIR не определена и демон фигачит свои темпы (каталоги с именем вида yandex-disk-ea1fda1. 7050s прямо в /tmp.
Но видимо переменную TMPDIR демон любит больше чем дефолтные пути.

slytomcat commented Feb 16, 2017

Вот какое вижу "универсальное" решение:

  1. ищем в окружении переменную TMPDIR, если не находим то берем вместо ее значения /tmp
  2. запускаем демона с указанием ему переменной TMPDIR со значением определенном на шаге 1.

slytomcat commented Feb 16, 2017

Попробуйте из ветки dev взять код - я там сделал как написано выше.

slytomcat commented Feb 16, 2017

погонял на виртуалках с несколькими дистрибутивами - вроде все работает как надо. Влил в мастер и опубликовал в релизе 1.9.7.

Читайте также: