Яндекс.Диск в графике в GNU/Linux? Легко и просто
Содержание
Введение
Два варианта работы с Яндекс.Диском.
Установка консольной утилиты с помощью скрипта.
Настройка одного Яндекс.Диска в GNU/Linux с графическим интерфейсом.
Настройка нескольких Яндекс.Дисков в GNU/Linux с графическим интерфейсом.
Заключение
Введение
Компания Яндекс предоставляет официальный консольный клиент для подключения к Яндекс.Диску в операционной системе GNU/Linux. Этот клиент покрывает потребности самых взыскательных пользователей, обеспечивая одновременную работу с несколькими Яндекс.Дисками (с разными логинами). У него только один (для некоторых -- принципиальный) недостаток: он запускается в консоли.
Графические интерфейсы от сторонних разработчиков существуют, однако они заточены под конкретные дистрибутивы и могут не заработать в других.
Универсальный способ сделать Яндекс.Диск в любом дистрибутиве GNU/Linux графическим заключается в том, чтобы "скрестить" консольную программу с двухпанельным файл-менеджером, входящим в любой дистрибутив -- Krusader. Он является программой из графической среды KDE, но может быть установлен в любой графической среде (при этом количество пакетов, которые он тянет по зависимостям, невелико).
Поскольку при этом обеспечивается наглядность, скорость работы (через горячие клавиши) и возможность доступа к нескольким Яндекс.Дискам одновременно, плодом указанного "скрещивания" становится этакий "облачный крестоносец".
1. Два варианта работы с Яндекс.Диском
Возможны два варианта работы с Яндекс.Диском:
имеется только одна учетная запись Яндекса и необходимо соответствующий ей Яндекс.диск связать с конкретной директорией на компьютере пользователя, обеспечив запуск демона, вывод информации о состоянии, синхронизацию и публикацию (получение публичных ссылок) на файлы или директории, а также останов демона;
имеется несколько учетных записей Яндекса, и для каждой из них необходимо связать свою директорию на компьютере пользователя и организовать работу вышеуказанных функций.
Далее в статье указаны решения для обоих вариантов.
Предполагается, что у пользователя уже установлен файл-менеджер Krusader. Команды для инсталляции программных пакетов приводятся в скрипте установки для дистрибутива Debian, но их легко адаптировать для других дистрибутивов. При выводе консольных команд знак "$" указывает на то, что работа идет из-под текущего пользователя. Все приведенные примеры отлажены и стабильно работают в ОС Debian 11.
2. Установка консольной утилиты yandex-disk
Вначале следует установить консольную утилиту yandex-disk, для которой имеется официальный репозиторий от Яндекс. Чтобы не выполнять вручную ряд рутинных действий, предлагается для установки утилиты использовать bash-скрипт "yandex-disk-debian-installation.sh", который выглядит так:
#!/bin/bash
#
# Скрипт загружает ключ электронной подписи официального репозитория yandex-disk с сайта yandex.ru,
# инсталлирует его, подключает указанный репозиторий, загружает из него и инсталлирует
# последнюю версию консольной программы yandex-disk для Debian GNU/Linux.
#
# Запускается из-под рута.
#
# Д.В. Юревич, версия 1.0 от 14.08.2021.
clear
printf "============================================================\r\n"
printf "Установка последней версии консольной программы yandex-disk\n\rдля Debian GNU/Linux из официального репозитория yandex.ru\n\r"
printf "============================================================\r\n"
printf "Для продолжения нажмите <Ввод>"
read x
printf "\n\rЗагружаю ключ электронной подписи официального репозитория yandex-disk с сайта yandex.ru\n\r"
printf "Для продолжения нажмите <Ввод>"
read x
curl -#fSLo /usr/share/keyrings/YANDEX-DISK-KEY.GPG http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG
if [ -e /usr/share/keyrings/YANDEX-DISK-KEY.GPG ]
then
printf "\n\rЗагрузка удалась. Произвожу добавление репозитория yandex-disk...\n\r"
echo "deb [signed-by=/usr/share/keyrings/YANDEX-DISK-KEY.GPG arch=amd64] http://repo.yandex.ru/yandex-disk/deb/ stable main" > /etc/apt/sources.list.d/yandex-disk.list
printf "\n\rПроизвожу обновление репозиториев с учетом добавленного...\n\r"
printf "Для продолжения нажмите <Ввод>"
read x
apt update
printf "\n\rИнсталлирую последнюю версию консольной программы yandex-disk...\r\nДля продолжения нажмите <Ввод>"
read x
apt install -y yandex-disk
printf "\n\rВы желаете установить программу xclip (понадобится для графической работы с Яндекс.Диском из файл-менеджера krusader)? Наберите 'да'/'yes' или 'нет'/'no': "
read answer
while [ "$answer" != "y" ] && [ "$answer" != "yes" ] && [ "$answer" != "д" ] && [ "$answer" != "да" ] && [ "$answer" != "n" ] && [ "$answer" != "no" ] && [ "$answer" != "н" ] && [ "$answer" != "нет" ]
do
printf "\n\rНаберите 'да'/'yes' или 'нет'/'no': "
read answer
done
if [ "$answer" == "y" ] || [ "$answer" == "yes" ] || [ "$answer" == "д" ] || [ "$answer" == "да" ]
then
# инсталляция xclip
printf "\n\rИнсталлирую программу xclip...\n\r"
apt install -y xclip
fi
printf "\n\rГотово!\n\r"
else
printf "\n\rОшибка! Загрузка эл. ключа репозитория не удалась.\n\r"
printf "Пытаюсь скачать отдельный пакет и установить его без добавления репозитория...\n\r"
printf "Для продолжения нажмите <Ввод>"
read x
curl -#fSLo /var/cache/apt/archives/yandex-disk_latest_amd64.deb http://repo.yandex.ru/yandex-disk/yandex-disk_latest_amd64.deb
if [ -e /var/cache/apt/archives/yandex-disk_latest_amd64.deb ]
then
printf "\n\rЗагрузка отдельного пакета удалась!\n\r"
printf "Устанавливаю в системе отдельный пакет yandex-disk, но из-за того, что репозиторий не подключен, он не будет регулярно обновляться.\n\r"
printf "Для продолжения нажмите <Ввод>"
read x
apt install -y /var/cache/apt/archives/yandex-disk_latest_amd64.deb
printf "\n\rВы желаете установить программу xclip (понадобится для графической работы с Яндекс.Диском из файл-менеджера krusader)? Наберите 'да'/'yes' или 'нет'/'no': "
read answer
while [ "$answer" != "y" ] && [ "$answer" != "yes" ] && [ "$answer" != "д" ] && [ "$answer" != "да" ] && [ "$answer" != "n" ] && [ "$answer" != "no" ] && [ "$answer" != "н" ] && [ "$answer" != "нет" ]
do
printf "\n\rНаберите 'да'/'yes' или 'нет'/'no': "
read answer
done
if [ "$answer" == "y" ] || [ "$answer" == "yes" ] || [ "$answer" == "д" ] || [ "$answer" == "да" ]
then
# инсталляция xclip
printf "\n\rИнсталлирую программу xclip...\n\r"
apt install -y xclip
fi
printf "\n\rГотово!\n\r"
else
printf "\n\rОшибка! Загрузка отдельного пакета не удалась. Программа не была установлена.\n\r"
fi
fi
Делаем файл скрипта исполняемым для рута (предварительно войдя под учетной записью рута):
chmod u+x yandex-disk-debian-installation.sh
Запускаем скрипт из-под рута:
./yandex-disk-debian-installation.sh
Скрипт загрузит и установит ключ электронной подписи репозитория yandex-disk, добавит его в систему, произведет обновление списка ПО с учетом нового репозитория, после чего установит в системе консольную утилиту yandex-disk. Кроме того, скрипт предложит установить программу xclip, которая понадобится для организации графического интерфейса; следует подтвердить установку, набрав "да".
3. Настройка одного Яндекс.диска в GNU/Linux с графическим интерфейсом
Это самый простой и наиболее распространенный среди пользователей вариант: имеется только одна учетная запись Яндекса и необходимо настроить ее для работы с Яндекс.диском, связав его с конкретной директорией на компьютере.
3.1. Настройка консольной программы yandex-disk для работы с одним Яндекс.Диском
Для первоначальной настройки предлагается использовать bash-скрипт "yandex-disk-debian-settings.sh", содержимое которого находится под спойлером:
#!/bin/bash
#
# Скрипт позволяет настроить прежде установленную консольную программу yandex-disk для Debian GNU/Linux.
# Запускается из-под учетной записи конкретного пользователя (не из-под рута).
#
# Д.В. Юревич, версия 1.0 от 14.08.2021.
clear
printf "===============================================================\r\n"
printf "Настройка консольной программы yandex-disk для Debian GNU/Linux\n\r"
printf "===============================================================\r\n"
printf "Для продолжения нажмите <Ввод>"
read x
printf "\n\rВы хотите настроить программу yandex-disk:\n\r"
printf " 1 -- для подключения только одного Яндекс.Диска;\n\r"
printf " 2 -- для подключения нескольких разных Яндекс.Дисков (с разными учетными записями)?\n\r"
printf "Для продолжения укажите Ваш вариант: "
read y
while [ "$y" != "1" ] && [ "$y" != "2" ]
do
printf "\n\rВыберите один из двух вариантов -- 1 или 2: "
read y
done
if [ "$y" == "1" ]
then
printf "\n\r-------------------------------------------------------\n\r"
printf "Произвожу настройку для подключения одного Яндекс.Диска"
printf "\n\r-------------------------------------------------------\n\r"
printf "Пожалуйста, в любом браузере войдите в ту учетную запись на Яндексе, диск которой Вы хотите настроить, и перейдите по адресу:\n\r\n\rhttps://ya.ru/device\n\r\n\rПроцедура настройки укажет Вам секретный код, который необходимо будет ввести в браузере.\n\r"
printf "Когда будете готовы, нажмите <Ввод>"
read x
printf "\n\rЗапускаю стандартную процедуру настройки yandex-disk'а...\n\r\n\r"
yandex-disk setup
elif [ "$y" == "2" ]
then
printf "\n\r------------------------------------------------------------\n\r"
printf "Произвожу настройку для подключения нескольких Яндекс.Дисков"
printf "\n\r------------------------------------------------------------\n\r\n\r"
printf "* Для удобства использования предлагается, чтобы каждый Яндекс.Диск получил свой идентификатор.\n\r\n\r"
printf "* В простейшем случае Вы можете выбрать в качестве идентификаторов целые числа и нумеровать Яндекс.диски 1, 2, 3... и т.д. В таком случае файлы токенов дисков будут иметь названия passwd_1, passwd_2, passwd_3... и т.д., а конфигурационные файлы -- названия config_1, config_2, config_3... и т.д.\n\r\n\r"
printf "* Однако Вы можете выбрать в качестве идентификаторов имена. Например, назвать свои диски lib, my, extra и т.д. В таком случае файлы токенов дисков будут иметь названия passwd_lib, passwd_my, passwd_extra... и т.д., а конфигурационные файлы -- названия config_lib, config_my, config_extra... и т.д.\n\r\n\r"
printf "* Эти идентификаторы будут использоваться при работе с Яндекс.Дисками из графического интерфейса файл-менеджера krusader, поэтому Вам необходимо будет их помнить. Вы всегда можете посмотреть названия в директории настроек: ~/.config/yandex-disk.\n\r\n\r"
printf "Для продолжения нажмите <Ввод>"
read x
if ! [ -e ~/.config/yandex-disk ]
then
# если не существует директория настроек yandex-disk'а, создаем ее
mkdir ~/.config/yandex-disk
fi
answer="y"
while [ "$answer" == "y" ] || [ "$answer" == "yes" ] || [ "$answer" == "д" ] || [ "$answer" == "да" ]
do
printf "\n\r.................................\n\r"
printf "Настройка очередного Яндекс.Диска"
printf "\n\r.................................\n\r\n\r"
printf "Укажите, какой идентификатор будет иметь Яндекс.Диск в системе: "
read disk_id
printf "\n\rНастраиваю диск \"$disk_id\"\n\r\n\r"
printf "Пожалуйста, в любом браузере войдите в ту учетную запись на Яндексе, диск которой Вы хотите настроить, и перейдите по адресу:\n\r\n\rhttps://ya.ru/device\n\r\n\rПроцедура настройки укажет Вам секретный код, который необходимо будет ввести в браузере.\n\r"
printf "Когда будете готовы, нажмите <Ввод>"
read x
yandex-disk token ~/.config/yandex-disk/passwd_$disk_id
if [ -e ~/.config/yandex-disk/passwd_$disk_id ]
then
# токен создан, можно создавать конфигурационный файл
printf "\n\rСоздаю новый конфигурационный файл: ~/.config/yandex-disk/config_$disk_id.cfg.\n\r"
echo "auth=\"~/.config/yandex-disk/passwd_$disk_id\"" > ~/.config/yandex-disk/config_$disk_id.cfg
printf "\n\rУкажите полный путь к директории, к которой подключен Яндекс.Диск: "
read disk_dir
printf "\n\rПодключается директория: $disk_dir.\n\r"
echo "dir=\"$disk_dir\"" >> ~/.config/yandex-disk/config_$disk_id.cfg
printf "\n\rДля подключения используется прокси-сервер? Наберите 'да'/'yes' или 'нет'/'no': "
read answer
while [ "$answer" != "y" ] && [ "$answer" != "yes" ] && [ "$answer" != "д" ] && [ "$answer" != "да" ] && [ "$answer" != "n" ] && [ "$answer" != "no" ] && [ "$answer" != "н" ] && [ "$answer" != "нет" ]
do
printf "\n\rНаберите 'да'/'yes' или 'нет'/'no': "
read answer
done
if [ "$answer" == "y" ] || [ "$answer" == "yes" ] || [ "$answer" == "д" ] || [ "$answer" == "да" ]
then
# используется прокси
printf "\n\rВведите параметры Вашего прокси-сервера. Примеры:\n\r"
printf "* по умолчанию, как в системе: proxy=auto\n\r"
printf "* протокол, адрес, порт: proxy=https,127.0.0.1,80\n\r"
printf "* или: proxy=https,127.0.0.1,443\n\r"
printf "* плюс логин и пароль: proxy=https,127.0.0.1,80,login,password\n\r"
printf "* или: proxy=socks4,my.proxy.local,1080,login,password\n\r"
printf "* или: proxy=socks5,my.another.proxy.local,1081\n\r"
read disk_proxy
printf "\n\rУказывается прокси-сервер: $disk_proxy.\n\r"
echo "proxy=\"$disk_proxy\"" >> ~/.config/yandex-disk/config_$disk_id.cfg
else
# не используется прокси
echo "proxy=\"no\"" >> ~/.config/yandex-disk/config_$disk_id.cfg
fi
printf "\n\rНастройка завершена успешно!\n\r"
fi
printf "\n\rВы хотите настроить в системе еще один Яндекс.Диск? Наберите 'да'/'yes' или 'нет'/'no': "
read answer
while [ "$answer" != "y" ] && [ "$answer" != "yes" ] && [ "$answer" != "д" ] && [ "$answer" != "да" ] && [ "$answer" != "n" ] && [ "$answer" != "no" ] && [ "$answer" != "н" ] && [ "$answer" != "нет" ]
do
printf "\n\rНаберите 'да'/'yes' или 'нет'/'no': "
read answer
done
done
fi
Придаем ему права исполняемого файла для текущего пользователя:
$ chmod u+x yandex-disk-debian-settings.sh
Запускаем скрипт из-под текущего пользователя:
$ ./yandex-disk-debian-settings.sh
Выбираем вариант 1, который соответствует настройке только одного Яндекс.диска.
В браузере входим в ту учетную запись, для которой настраиваем диск, и заранее переходим по адресу
поскольку на следующем шаге программа настройки сгенерирует секретный код и предложит его ввести в браузере по указанному адресу (на это дается только 5 мин).
Переключаемся обратно на скрипт, нажимаем "Ввод".
Программа спрашивает, использовать ли прокси-сервер -- если да, то примеры описания прокси-сервера см. ниже, в пункте 4. Для обычных пользователей в подавляющем большинстве случаев ответ "no".
Происходит авторизация: скрипт генерирует секретный код, который необходимо скопировать (в консоли по комбинации клавиш Ctrl-Shift-C), переключиться в браузер (где открыта страница https://ya.ru/device) и ввести код там (Ctrl-V).
Если авторизация прошла успешно, скрипт напишет, что "токен сохранен в ~/yandex-disk/passwd".
Далее скрипт запрашивает путь к директории на компьютере пользователя, которая будет связана с удаленным Яндекс.Диском. Можно просто нажать "Ввод", тогда будет принята директория по умолчанию ~/Yandex.Disk (это действительно удобно), или же ввести свой путь.
Скрипт спрашивает, запускать ли демон при каждом входе в систему -- в большинстве случаев это удобно и можно ответить положительно.
Если все прошло успешно, скрипт запустит демон и напишет "Готово".
3.2. Настройка графического интерфейса для работы с одним Яндекс.Диском
Настройку графического интерфейса предлагается производить с использованием штатных средств файл-менеджера Krusader. Создаем 6 файлов с расширением .xml, которые будут плагинами для файл-менеджера. При этом рекомендуется задать файлам именно эти имена, так как имена отображаются в Krusader как пункты меню (содержимое файлов см. под спойлерами):
"Krusader. Яндекс.Диск. 1. Запуск.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE KrusaderUserActions>
<KrusaderUserActions>
<action name="yd_start">
<title>&Запуск</title>
<tooltip>Запуск Яндекс.Диска в фоновом режиме</tooltip>
<category>Яндекс.Диск</category>
<command executionmode="collect_output">yandex-disk start</command>
<defaultshortcut>Ctrl+Shift+F5</defaultshortcut>
</action>
</KrusaderUserActions>
"Krusader. Яндекс.Диск. 2. Статус.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE KrusaderUserActions>
<KrusaderUserActions>
<action name="yd_status">
<title>&Статус</title>
<tooltip>Вывод текущего статуса Яндекс.Диска</tooltip>
<category>Яндекс.Диск</category>
<command executionmode="collect_output">yandex-disk status</command>
<defaultshortcut>Ctrl+Shift+F6</defaultshortcut>
</action>
</KrusaderUserActions>
"Krusader. Яндекс.Диск. 3. Синхронизация.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE KrusaderUserActions>
<KrusaderUserActions>
<action name="yd_sync">
<title>&Синхронизация</title>
<tooltip>Синхронизация компьютера с Яндекс.Диском</tooltip>
<category>Яндекс.Диск</category>
<command executionmode="collect_output">yandex-disk sync</command>
<defaultshortcut>Ctrl+Shift+F7</defaultshortcut>
</action>
</KrusaderUserActions>
"Krusader. Яндекс.Диск. 4. Получение ссылки.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE KrusaderUserActions>
<KrusaderUserActions>
<action name="yd_publish">
<title>&Получение ссылки</title>
<tooltip>Получение ссылки на файл или директорию</tooltip>
<category>Яндекс.Диск</category>
<command executionmode="collect_output">yandex-disk publish %aCurrent% | xclip -selection clipboard && xclip -selection clipboard -out && printf "Ссылка скопирована в буфер обмена\n\r"</command>
<defaultshortcut>Ctrl+Shift+F8</defaultshortcut>
</action>
</KrusaderUserActions>
"Krusader. Яндекс.Диск. 5. Отмена публикации.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE KrusaderUserActions>
<KrusaderUserActions>
<action name="yd_unpublish">
<title>&Отмена публикации</title>
<tooltip>Отмена публикации файла или директории</tooltip>
<category>Яндекс.Диск</category>
<command executionmode="collect_output">yandex-disk unpublish %aCurrent% | xclip -selection clipboard && xclip -selection clipboard -out</command>
<defaultshortcut>Ctrl+Shift+F9</defaultshortcut>
</action>
</KrusaderUserActions>
"Krusader. Яндекс.Диск. 6. Завершение.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE KrusaderUserActions>
<KrusaderUserActions>
<action name="yd_stop">
<title>&Завершение</title>
<tooltip>Завершение работы Яндекс.диска</tooltip>
<category>Яндекс.Диск</category>
<command executionmode="collect_output">yandex-disk stop</command>
<defaultshortcut>Ctrl+Shift+F10</defaultshortcut>
</action>
</KrusaderUserActions>
Переходим в Krusader: "Настройка" --> "Настроить Krusader" --> "Меню пользователя" --> "Запустить менеджер действий":
Нажимаем слева вверху значок "Загрузить действие" и выбираем для загрузки последовательно файлы плагинов в соответствии с тем, как они пронумерованы (в таком порядке они будут появляться в контекстном меню Krudaser'а): "Krusader. Яндекс.Диск. 1. Запуск.xml", "Krusader. Яндекс.Диск. 2. Статус.xml"... и т.д.
В результате загрузки плагинов в "Менеджере действий" появится новый пункт "Яндекс.Диск", в котором будут присутствовать подпункты "&Завершение", "&Запуск", ... и т.д.:
Нажимая последовательно на подпункты, можно ознакомиться с тем, какие для отдельных действий с Яндекс.Диском назначены по умолчанию комбинации клавиш:
Если эти комбинации по какой-то причине не подходят, прямо здесь, в "Менеджере действий", их можно заменить на другие.
Закрываем "Менеджер действий" и убеждаемся в том, что теперь указанные действия с Яндекс.Диском доступны как из основного меню Krusader: "Меню" --> "Действия" --> "Яндекс.Диск",
так и из контекстного меню (выставляем на файле или директории и нажимаем правую клавишу мыши --> "Меню пользователя" --> "Яндекс.Диск"):
Убедимся в работоспособности графического интерфейса.
Запуск -- Ctrl-Shift-F5: запускает демон и выводит информацию об этом в отдельном окне (планка Krusader может находится в любом месте файловой системы, а не только в пределах основной директории Яндекс.Диска):
Если демон уже запущен, сообщает об этом:
Статус -- Ctrl-Shift-F6: выводит информацию о статусе Яндекс.Диска (планка Krusader может находится в любом месте файловой системы, а не только в пределах основной директории Яндекс.Диска):
Синхронизация -- Ctrl-Shift-F7: запускает синхронизацию или сообщает о том, что она уже произведена автоматически (планка Krusader может находится в любом месте файловой системы, а не только в пределах основной директории Яндекс.Диска):
Получение ссылки -- Ctrl-Shift-F8: для использования данной функции необходимо поставить планку Krusader на тот файл или на ту директорию, которую следует опубликовать. При публикации директории по ссылке стороннему пользователю будут доступны в ней все файлы и все поддиректории. Ссылка на файл или директорию при этом копируется в буфер обмена:
Если планка стоит на файле или директории, которые не находятся в одной из поддиректорий основной директории Яндекс.Диска (в нашем примере -- ~/Yandex.Disk), то данный файл или директория будут вначале полностью скопированы в корень основной директории Яндекс.Диска, а потом на данную копию будет сделана ссылка. В ряде случаев это удобно.
Отмена публикации -- Ctrl-Shift-F9: аналогично предыдущему случаю, планка Krusader ставится на файл или директорию, которые уже были опубликованы (для них были созданы публичные ссылки). После выполнения данной операции доступ к ним для сторонних лиц будет закрыт.
Завершение -- Ctrl-Shift-F10: завершает работу демона и выводит сообщение (планка Krusader может находится в любом месте файловой системы, а не только в пределах основной директории Яндекс.Диска):
4. Настройка нескольких Яндекс.Дисков (с несколькими учетными записями) в GNU/Linux с графическим интерфейсом
4.1. Идентификаторы для Яндекс.Дисков
Это более сложный случай настройки, который предполагает, что диски, соответствующие разным учетным записям Яндекс, могут подключаться пользователем в разное время и соотноситься с разными директориями на компьютере пользователя. Для удобства работы предлагается, чтобы каждый Яндекс.Диск получил от пользователя свой идентификатор, который будет использоваться в графическом интерфейсе.
В простейшем варианте это могут быть целые числа: 1, 2, 3... и т.д., причем назначать их пользователь может в произвольном порядке. Выбор чисел в качестве идентификаторов дисков имеет чисто практическое преимущество: при вводе с клавиатуры при запросе со стороны графического интерфейса можно быстро набрать число на дополнительной числовой клавиатуре и не переключать раскладку. Однако при этом пользователю следует помнить, какому числу какой соответствует аккаунт (и диск) Яндекса. В приведенных ниже примерах в качестве идентификатора дисков выбраны именно числа.
Тем не менее, в качестве идентификаторов можно выбрать обычные символьно-числовые последовательности (которые, естественно, не должны совпадать между собой), например: lib, my, extra или aurora123. Чем длиннее будет идентификатор, тем больше символов придется вводить каждый раз при работе с Яндекс.Диском. Идентификаторы используются при работе с Яндекс.Дисками из графического интерфейса файл-менеджера Krusader, поэтому пользователю необходимо их помнить.
Если интересны технические подробности, раскройте спойлер.
В техническом отношении идентификаторы будут определять имена файлов настроек консольной утилиты yandex-disk, к которой обращается графический интерфейс. Файлы находятся в директории ~/.config/yandex-disk и представляют собой файлы токенов (они будут иметь названия passwd_{id}, где {id} -- выбранный пользователем идентификатор, например, passwd_1 или passwd_lib) и файлы конфигурации (с названиями config_{id}, например, config_1 или config_lib и т.д.). Рекомендуется заранее продумать выбор идентификаторов для Яндекс.Дисков.
4.2. Настройка консольной программы yandex-disk для работы с несколькими Яндекс.Дисками
После установки консольной утилиты (см. пункт 2) для добавления очередного Яндекс.Диска предлагается использовать скрипт "yandex-disk-debian-settings.sh", содержание которого находится под спойлером (оно точно такое же, как в случае с подключением одного Яндекс.Диска):
#!/bin/bash
#
# Скрипт позволяет настроить прежде установленную консольную программу yandex-disk для Debian GNU/Linux.
# Запускается из-под учетной записи конкретного пользователя (не из-под рута).
#
# Д.В. Юревич, версия 1.0 от 14.08.2021.
clear
printf "===============================================================\r\n"
printf "Настройка консольной программы yandex-disk для Debian GNU/Linux\n\r"
printf "===============================================================\r\n"
printf "Для продолжения нажмите <Ввод>"
read x
printf "\n\rВы хотите настроить программу yandex-disk:\n\r"
printf " 1 -- для подключения только одного Яндекс.Диска;\n\r"
printf " 2 -- для подключения нескольких разных Яндекс.Дисков (с разными учетными записями)?\n\r"
printf "Для продолжения укажите Ваш вариант: "
read y
while [ "$y" != "1" ] && [ "$y" != "2" ]
do
printf "\n\rВыберите один из двух вариантов -- 1 или 2: "
read y
done
if [ "$y" == "1" ]
then
printf "\n\r-------------------------------------------------------\n\r"
printf "Произвожу настройку для подключения одного Яндекс.Диска"
printf "\n\r-------------------------------------------------------\n\r"
printf "Пожалуйста, в любом браузере войдите в ту учетную запись на Яндексе, диск которой Вы хотите настроить, и перейдите по адресу:\n\r\n\rhttps://ya.ru/device\n\r\n\rПроцедура настройки укажет Вам секретный код, который необходимо будет ввести в браузере.\n\r"
printf "Когда будете готовы, нажмите <Ввод>"
read x
printf "\n\rЗапускаю стандартную процедуру настройки yandex-disk'а...\n\r\n\r"
yandex-disk setup
elif [ "$y" == "2" ]
then
printf "\n\r------------------------------------------------------------\n\r"
printf "Произвожу настройку для подключения нескольких Яндекс.Дисков"
printf "\n\r------------------------------------------------------------\n\r\n\r"
printf "* Для удобства использования предлагается, чтобы каждый Яндекс.Диск получил свой идентификатор.\n\r\n\r"
printf "* В простейшем случае Вы можете выбрать в качестве идентификаторов целые числа и нумеровать Яндекс.диски 1, 2, 3... и т.д. В таком случае файлы токенов дисков будут иметь названия passwd_1, passwd_2, passwd_3... и т.д., а конфигурационные файлы -- названия config_1, config_2, config_3... и т.д.\n\r\n\r"
printf "* Однако Вы можете выбрать в качестве идентификаторов имена. Например, назвать свои диски lib, my, extra и т.д. В таком случае файлы токенов дисков будут иметь названия passwd_lib, passwd_my, passwd_extra... и т.д., а конфигурационные файлы -- названия config_lib, config_my, config_extra... и т.д.\n\r\n\r"
printf "* Эти идентификаторы будут использоваться при работе с Яндекс.Дисками из графического интерфейса файл-менеджера krusader, поэтому Вам необходимо будет их помнить. Вы всегда можете посмотреть названия в директории настроек: ~/.config/yandex-disk.\n\r\n\r"
printf "Для продолжения нажмите <Ввод>"
read x
if ! [ -e ~/.config/yandex-disk ]
then
# если не существует директория настроек yandex-disk'а, создаем ее
mkdir ~/.config/yandex-disk
fi
answer="y"
while [ "$answer" == "y" ] || [ "$answer" == "yes" ] || [ "$answer" == "д" ] || [ "$answer" == "да" ]
do
printf "\n\r.................................\n\r"
printf "Настройка очередного Яндекс.Диска"
printf "\n\r.................................\n\r\n\r"
printf "Укажите, какой идентификатор будет иметь Яндекс.Диск в системе: "
read disk_id
printf "\n\rНастраиваю диск \"$disk_id\"\n\r\n\r"
printf "Пожалуйста, в любом браузере войдите в ту учетную запись на Яндексе, диск которой Вы хотите настроить, и перейдите по адресу:\n\r\n\rhttps://ya.ru/device\n\r\n\rПроцедура настройки укажет Вам секретный код, который необходимо будет ввести в браузере.\n\r"
printf "Когда будете готовы, нажмите <Ввод>"
read x
yandex-disk token ~/.config/yandex-disk/passwd_$disk_id
if [ -e ~/.config/yandex-disk/passwd_$disk_id ]
then
# токен создан, можно создавать конфигурационный файл
printf "\n\rСоздаю новый конфигурационный файл: ~/.config/yandex-disk/config_$disk_id.cfg.\n\r"
echo "auth=\"~/.config/yandex-disk/passwd_$disk_id\"" > ~/.config/yandex-disk/config_$disk_id.cfg
printf "\n\rУкажите полный путь к директории, к которой подключен Яндекс.Диск: "
read disk_dir
printf "\n\rПодключается директория: $disk_dir.\n\r"
echo "dir=\"$disk_dir\"" >> ~/.config/yandex-disk/config_$disk_id.cfg
printf "\n\rДля подключения используется прокси-сервер? Наберите 'да'/'yes' или 'нет'/'no': "
read answer
while [ "$answer" != "y" ] && [ "$answer" != "yes" ] && [ "$answer" != "д" ] && [ "$answer" != "да" ] && [ "$answer" != "n" ] && [ "$answer" != "no" ] && [ "$answer" != "н" ] && [ "$answer" != "нет" ]
do
printf "\n\rНаберите 'да'/'yes' или 'нет'/'no': "
read answer
done
if [ "$answer" == "y" ] || [ "$answer" == "yes" ] || [ "$answer" == "д" ] || [ "$answer" == "да" ]
then
# используется прокси
printf "\n\rВведите параметры Вашего прокси-сервера. Примеры:\n\r"
printf "* по умолчанию, как в системе: proxy=auto\n\r"
printf "* протокол, адрес, порт: proxy=https,127.0.0.1,80\n\r"
printf "* или: proxy=https,127.0.0.1,443\n\r"
printf "* плюс логин и пароль: proxy=https,127.0.0.1,80,login,password\n\r"
printf "* или: proxy=socks4,my.proxy.local,1080,login,password\n\r"
printf "* или: proxy=socks5,my.another.proxy.local,1081\n\r"
read disk_proxy
printf "\n\rУказывается прокси-сервер: $disk_proxy.\n\r"
echo "proxy=\"$disk_proxy\"" >> ~/.config/yandex-disk/config_$disk_id.cfg
else
# не используется прокси
echo "proxy=\"no\"" >> ~/.config/yandex-disk/config_$disk_id.cfg
fi
printf "\n\rНастройка завершена успешно!\n\r"
fi
printf "\n\rВы хотите настроить в системе еще один Яндекс.Диск? Наберите 'да'/'yes' или 'нет'/'no': "
read answer
while [ "$answer" != "y" ] && [ "$answer" != "yes" ] && [ "$answer" != "д" ] && [ "$answer" != "да" ] && [ "$answer" != "n" ] && [ "$answer" != "no" ] && [ "$answer" != "н" ] && [ "$answer" != "нет" ]
do
printf "\n\rНаберите 'да'/'yes' или 'нет'/'no': "
read answer
done
done
fi
Придаем ему права исполняемого файла для текущего пользователя:
$ chmod u+x yandex-disk-debian-settings.sh
Запускаем скрипт в консоли:
$ ./yandex-disk-debian-settings.sh
Выбираем вариант 2 -- подключение нескольких Яндекс.Дисков, читаем напоминалку о выборе идентификаторов для разных дисков и нажимаем "Ввод".
Выбираем идентификатор для первого диска -- допустим, 1.
Скрипт напоминает о том, что необходимо войти в браузер, залогиниться с той учетной записью Яндекса, диск которой подключается, и перейти в браузере по адресу
Делаем это, возвращаемся в окно консоли, нажимаем "Ввод", копируем секретный код (Shift-Ctrl-C) и вставляем его в окне браузера (Ctrl-V), после чего подтверждаем в браузере разрешение на подключение.
Если все прошло хорошо, в консоли появляются два сообщения:
Токен сохранен в ~/.config/yandex-disk/passwd_1
Создаю новый конфигурационный файл: ~/.config/yandex-disk/config_1.cfg.
Далее указываем полный путь к директории на компьютере пользователя, которую подключаем к данной записи Яндекс.Диска.
Если подключение идет не через прокси-сервер, то отвечаем, что его нет. При наличии прокси возможны разные варианты описания его параметров. Скрипт выведет примеры того, как можно задать параметры:
по умолчанию, как в системе: proxy=auto
протокол, адрес, порт: proxy=https,127.0.0.1,80
или: proxy=https,127.0.0.1,443
плюс логин и пароль: proxy=https,127.0.0.1,80,login,password
или: proxy=socks4,my.proxy.local,1080,login,password
или: proxy=socks5,my.another.proxy.local,1081
На основании примеров задаем параметры прокси-сервера.
После этого скрипт спрашивает, настроить ли еще один Яндекс.Диск для другой учетной записи. Следует иметь в виду, что другие учетные записи можно настраивать позже, отдельно, запуская скрипт повторно.
4.3. Настройка графического интерфейса для работы с несколькими Яндекс.Дисками
Настройку графического интерфейса предлагается производить с использованием штатных средств файл-менеджера Krusader. Создаем 6 текстовых файлов с расширением .xml, которые будут плагинами для файл-менеджера. При этом рекомендуется задать файлам именно эти имена, так как имена отображаются в Krusader как пункты меню (содержимое файлов под спойлерами):
"Krusader. Яндекс.Диски. 1. Запуск.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE KrusaderUserActions>
<KrusaderUserActions>
<action name="yds_start">
<title>&Запуск</title>
<tooltip>Запуск Яндекс.Диска в фоновом режиме</tooltip>
<category>Яндекс.Диски</category>
<command executionmode="collect_output">yandex-disk start -c ~/.config/yandex-disk/config_%_Ask("Укажите подключаемый диск", "")%.cfg</command>
<defaultshortcut>Alt+Shift+F5</defaultshortcut>
</action>
</KrusaderUserActions>
"Krusader. Яндекс.Диски. 2. Статус.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE KrusaderUserActions>
<KrusaderUserActions>
<action name="yds_status">
<title>&Статус</title>
<tooltip>Вывод текущего статуса Яндекс.Диска</tooltip>
<category>Яндекс.Диски</category>
<command executionmode="collect_output">yandex-disk status -c ~/.config/yandex-disk/config_%_Ask("Вывод статуса: укажите диск", "")%.cfg</command>
<defaultshortcut>Alt+Shift+F6</defaultshortcut>
</action>
</KrusaderUserActions>
"Krusader. Яндекс.Диски. 3. Синхронизация.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE KrusaderUserActions>
<KrusaderUserActions>
<action name="yds_sync">
<title>&Синхронизация</title>
<tooltip>Синхронизация компьютера с Яндекс.Диском</tooltip>
<category>Яндекс.Диски</category>
<command executionmode="collect_output">yandex-disk sync -c ~/.config/yandex-disk/config_%_Ask("Укажите диск для синхронизации", "")%.cfg</command>
<defaultshortcut>Alt+Shift+F7</defaultshortcut>
</action>
</KrusaderUserActions>
"Krusader. Яндекс.Диски. 4. Получение ссылки.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE KrusaderUserActions>
<KrusaderUserActions>
<action name="yds_publish">
<title>&Получение ссылки</title>
<tooltip>Получение ссылки на файл или директорию</tooltip>
<category>Яндекс.Диски</category>
<command executionmode="collect_output">yandex-disk publish -c ~/.config/yandex-disk/config_%_Ask("Получение ссылки: укажите диск", "")%.cfg %aCurrent% | xclip -selection clipboard && xclip -selection clipboard -out && printf "Ссылка скопирована в буфер обмена\n\r"</command>
<defaultshortcut>Alt+Shift+F8</defaultshortcut>
</action>
</KrusaderUserActions>
"Krusader. Яндекс.Диски. 5. Отмена публикации.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE KrusaderUserActions>
<KrusaderUserActions>
<action name="yds_unpublish">
<title>&Отмена публикации</title>
<tooltip>Отмена публикации файла или директории</tooltip>
<category>Яндекс.Диски</category>
<command executionmode="collect_output">yandex-disk unpublish -c ~/.config/yandex-disk/config_%_Ask("Отмена публикации: укажите диск", "")%.cfg %aCurrent% | xclip -selection clipboard && xclip -selection clipboard -out</command>
<defaultshortcut>Alt+Shift+F9</defaultshortcut>
</action>
</KrusaderUserActions>
"Krusader. Яндекс.Диски. 6. Завершение.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE KrusaderUserActions>
<KrusaderUserActions>
<action name="yds_stop">
<title>&Завершение</title>
<tooltip>Завершение работы Яндекс.диска</tooltip>
<category>Яндекс.Диски</category>
<command executionmode="collect_output">yandex-disk stop -c ~/.config/yandex-disk/config_%_Ask("Завершение работы: укажите диск", "")%.cfg</command>
<defaultshortcut>Alt+Shift+F10</defaultshortcut>
</action>
</KrusaderUserActions>
Переходим в Krusader: "Настройка" --> "Настроить Krusader" --> "Меню пользователя" --> "Запустить менеджер действий":
Нажимаем слева вверху значок "Загрузить действие" и выбираем для загрузки последовательно плагины в соответствии с тем, как они пронумерованы (в таком порядке они будут появляться в контекстном меню Krudaser'а): "Krusader. Яндекс.Диск. 1. Запуск.xml", "Krusader. Яндекс.Диск. 2. Статус.xml"... и т.д.
В результате загрузки плагинов в "Менеджере действий" появится новый пункт "Яндекс.Диски", в котором будут присутствовать подпункты "&Завершение", "&Запуск", ... и т.д.:
Нажимая последовательно на подпункты, можно ознакомиться с тем, какие для отдельных действий с Яндекс.Диском назначены по умолчанию комбинации клавиш:
Запуск -- Alt-Shift-F5
Статус -- Alt-Shift-F6
Синхронизация -- Alt-Shift-F7
Получение ссылки -- Alt-Shift-F8
Отмена публикации -- Alt-Shift-F9
Завершение -- Alt-Shift-F10
Если эти комбинации по какой-то причине не подходят, прямо здесь, в "Менеджере действий", их можно заменить на другие.
Закрываем "Менеджер действий" и убеждаемся в том, что теперь указанные действия с Яндекс.Диском доступны как из основного меню Krusader: Меню --> Действия --> Яндекс.Диск, так и из контекстного меню (выставляем на файле или директории и нажимаем правую клавишу мыши --> Меню пользователя --> Яндекс.Диск).
Убедимся в работоспособности графического интерфейса.
Запуск -- Ctrl-Shift-F5: в отдельном запрашивает идентификатор диска (в нашем примере -- это 1), запускает демон и выводит информацию об этом в другом окне. Планка Krusader может находится в любом месте файловой системы, а не только в пределах основной директории запускаемого Яндекс.Диска:
Если демон уже запущен, сообщает об этом:
Статус -- Ctrl-Shift-F6: в отдельном запрашивает идентификатор диска, выводит информацию о статусе Яндекс.Диска. Планка Krusader может находится в любом месте файловой системы, а не только в пределах основной директории Яндекс.Диска:
Синхронизация -- Ctrl-Shift-F7: в отдельном запрашивает идентификатор диска, запускает синхронизацию или сообщает о том, что она уже произведена автоматически. Планка Krusader может находится в любом месте файловой системы, а не только в пределах основной директории Яндекс.Диска:
Получение ссылки -- Ctrl-Shift-F8: для использования данной функции необходимо поставить планку Krusader на тот файл или на ту директорию, которую следует опубликовать. При публикации директории по ссылке стороннему пользователю будут доступны в ней все файлы и все поддиректории. Идет запрос на идентификатор Яндекс.Диска, потом выводится информация в отдельном окне, а ссылка на файл или директорию при этом копируется в буфер обмена:
Если планка стоит на файле / директории, которые не находятся в одной из поддиректорий основной директории используемого Яндекс.Диска, то данный файл или директория будут вначале полностью скопированы в основную директорию используемого Яндекс.Диска, а потом на данную копию будет сделана ссылка. В ряде случаев это удобно.
Отмена публикации -- Ctrl-Shift-F9: аналогично предыдущему случаю, планка Krusader ставится на файл или директорию, которые уже были опубликованы (для них были созданы публичные ссылки). После выполнения данной операции доступ к ним для сторонних лиц будет закрыт:
Завершение -- Ctrl-Shift-F10: завершает работу демона и выводит сообщение (планка Krusader может находится в любом месте файловой системы, а не только в пределах основной директории Яндекс.Диска):
Заключение
Установка и настройка графического интерфейса для Яндекс.Диска на компьютере с ОС GNU/Linux требует запуска двух исполняемых скриптов (из-под рута и из-под обычного пользователя), а также шести файлов, которые являются плагинами для файл-менеджера Krusader. Если пользователь регулярно использует Яндекс.Диск, то данные восемь файлов имеет смысл сохранить в отдельной директории и использовать впоследствии многократно.
Желаемый результат по установке и настройке на новом компьютере занимает всего несколько минут. В то же время наличие графического интерфейса, горячих клавиш и вывод информационных сообщений делает работу с Яндекс.Диском в GNU/Lunux эффективной и приятной.
Комментарии (5)
insecto
21.09.2021 07:49Статья про настройку чего-то в линуксе скриншотами. Последние времена настают!
LinuxCertifiedInstructor
22.09.2021 14:03Нормальная статья (получше многих переводных на Хабре, а тут человек сам поразбирался и всё понятно описал) — настраивал видно что текстовым редактором, а скриншоты только демонстрирую работу настроек.
P.S. Смущает директория «Свт.Николай» на скриншотах)
zxosa
Webdav покрывает, а клиент в линуксе не может работать в upload, только синхронизация
Vadiok
Формально webdav работает, но, как минимум, на бесплатном тарифе загрузить через него можно только какие-то мелкие текстовые файлы, скорость на аплоад крайне низкая.
Dmitry_Yurevich Автор
Конечно, спасибо за замечание. Консольный клиент Яндекс.Диска в GNU/Linux'е работает только в режиме синхронизации, это его особенность. Есть опция "--exclude-dirs=DIR1,DIR2,...", но она позволяет исключить из синхронизации лишь директории целиком. В тех задачах, где востребован режим синхронизации, скорость и стабильность консольного клиента нареканий не вызывают.