Яндекс.Диск в графике в 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 "============================================================rn"
printf "Установка последней версии консольной программы yandex-disknrдля Debian GNU/Linux из официального репозитория yandex.runr"
printf "============================================================rn"
printf "Для продолжения нажмите <Ввод>"
read x
printf "nrЗагружаю ключ электронной подписи официального репозитория yandex-disk с сайта yandex.runr"
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 "nrЗагрузка удалась. Произвожу добавление репозитория yandex-disk...nr"
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 "nrПроизвожу обновление репозиториев с учетом добавленного...nr"
printf "Для продолжения нажмите <Ввод>"
read x
apt update
printf "nrИнсталлирую последнюю версию консольной программы yandex-disk...rnДля продолжения нажмите <Ввод>"
read x
apt install -y yandex-disk
printf "nrВы желаете установить программу xclip (понадобится для графической работы с Яндекс.Диском из файл-менеджера krusader)? Наберите 'да'/'yes' или 'нет'/'no': "
read answer
while [ "$answer" != "y" ] && [ "$answer" != "yes" ] && [ "$answer" != "д" ] && [ "$answer" != "да" ] && [ "$answer" != "n" ] && [ "$answer" != "no" ] && [ "$answer" != "н" ] && [ "$answer" != "нет" ]
do
printf "nrНаберите 'да'/'yes' или 'нет'/'no': "
read answer
done
if [ "$answer" == "y" ] || [ "$answer" == "yes" ] || [ "$answer" == "д" ] || [ "$answer" == "да" ]
then
# инсталляция xclip
printf "nrИнсталлирую программу xclip...nr"
apt install -y xclip
fi
printf "nrГотово!nr"
else
printf "nrОшибка! Загрузка эл. ключа репозитория не удалась.nr"
printf "Пытаюсь скачать отдельный пакет и установить его без добавления репозитория...nr"
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 "nrЗагрузка отдельного пакета удалась!nr"
printf "Устанавливаю в системе отдельный пакет yandex-disk, но из-за того, что репозиторий не подключен, он не будет регулярно обновляться.nr"
printf "Для продолжения нажмите <Ввод>"
read x
apt install -y /var/cache/apt/archives/yandex-disk_latest_amd64.deb
printf "nrВы желаете установить программу xclip (понадобится для графической работы с Яндекс.Диском из файл-менеджера krusader)? Наберите 'да'/'yes' или 'нет'/'no': "
read answer
while [ "$answer" != "y" ] && [ "$answer" != "yes" ] && [ "$answer" != "д" ] && [ "$answer" != "да" ] && [ "$answer" != "n" ] && [ "$answer" != "no" ] && [ "$answer" != "н" ] && [ "$answer" != "нет" ]
do
printf "nrНаберите 'да'/'yes' или 'нет'/'no': "
read answer
done
if [ "$answer" == "y" ] || [ "$answer" == "yes" ] || [ "$answer" == "д" ] || [ "$answer" == "да" ]
then
# инсталляция xclip
printf "nrИнсталлирую программу xclip...nr"
apt install -y xclip
fi
printf "nrГотово!nr"
else
printf "nrОшибка! Загрузка отдельного пакета не удалась. Программа не была установлена.nr"
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 "===============================================================rn"
printf "Настройка консольной программы yandex-disk для Debian GNU/Linuxnr"
printf "===============================================================rn"
printf "Для продолжения нажмите <Ввод>"
read x
printf "nrВы хотите настроить программу yandex-disk:nr"
printf " 1 -- для подключения только одного Яндекс.Диска;nr"
printf " 2 -- для подключения нескольких разных Яндекс.Дисков (с разными учетными записями)?nr"
printf "Для продолжения укажите Ваш вариант: "
read y
while [ "$y" != "1" ] && [ "$y" != "2" ]
do
printf "nrВыберите один из двух вариантов -- 1 или 2: "
read y
done
if [ "$y" == "1" ]
then
printf "nr-------------------------------------------------------nr"
printf "Произвожу настройку для подключения одного Яндекс.Диска"
printf "nr-------------------------------------------------------nr"
printf "Пожалуйста, в любом браузере войдите в ту учетную запись на Яндексе, диск которой Вы хотите настроить, и перейдите по адресу:nrnrhttps://ya.ru/devicenrnrПроцедура настройки укажет Вам секретный код, который необходимо будет ввести в браузере.nr"
printf "Когда будете готовы, нажмите <Ввод>"
read x
printf "nrЗапускаю стандартную процедуру настройки yandex-disk'а...nrnr"
yandex-disk setup
elif [ "$y" == "2" ]
then
printf "nr------------------------------------------------------------nr"
printf "Произвожу настройку для подключения нескольких Яндекс.Дисков"
printf "nr------------------------------------------------------------nrnr"
printf "* Для удобства использования предлагается, чтобы каждый Яндекс.Диск получил свой идентификатор.nrnr"
printf "* В простейшем случае Вы можете выбрать в качестве идентификаторов целые числа и нумеровать Яндекс.диски 1, 2, 3... и т.д. В таком случае файлы токенов дисков будут иметь названия passwd_1, passwd_2, passwd_3... и т.д., а конфигурационные файлы -- названия config_1, config_2, config_3... и т.д.nrnr"
printf "* Однако Вы можете выбрать в качестве идентификаторов имена. Например, назвать свои диски lib, my, extra и т.д. В таком случае файлы токенов дисков будут иметь названия passwd_lib, passwd_my, passwd_extra... и т.д., а конфигурационные файлы -- названия config_lib, config_my, config_extra... и т.д.nrnr"
printf "* Эти идентификаторы будут использоваться при работе с Яндекс.Дисками из графического интерфейса файл-менеджера krusader, поэтому Вам необходимо будет их помнить. Вы всегда можете посмотреть названия в директории настроек: ~/.config/yandex-disk.nrnr"
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 "nr.................................nr"
printf "Настройка очередного Яндекс.Диска"
printf "nr.................................nrnr"
printf "Укажите, какой идентификатор будет иметь Яндекс.Диск в системе: "
read disk_id
printf "nrНастраиваю диск "$disk_id"nrnr"
printf "Пожалуйста, в любом браузере войдите в ту учетную запись на Яндексе, диск которой Вы хотите настроить, и перейдите по адресу:nrnrhttps://ya.ru/devicenrnrПроцедура настройки укажет Вам секретный код, который необходимо будет ввести в браузере.nr"
printf "Когда будете готовы, нажмите <Ввод>"
read x
yandex-disk token ~/.config/yandex-disk/passwd_$disk_id
if [ -e ~/.config/yandex-disk/passwd_$disk_id ]
then
# токен создан, можно создавать конфигурационный файл
printf "nrСоздаю новый конфигурационный файл: ~/.config/yandex-disk/config_$disk_id.cfg.nr"
echo "auth="~/.config/yandex-disk/passwd_$disk_id"" > ~/.config/yandex-disk/config_$disk_id.cfg
printf "nrУкажите полный путь к директории, к которой подключен Яндекс.Диск: "
read disk_dir
printf "nrПодключается директория: $disk_dir.nr"
echo "dir="$disk_dir"" >> ~/.config/yandex-disk/config_$disk_id.cfg
printf "nrДля подключения используется прокси-сервер? Наберите 'да'/'yes' или 'нет'/'no': "
read answer
while [ "$answer" != "y" ] && [ "$answer" != "yes" ] && [ "$answer" != "д" ] && [ "$answer" != "да" ] && [ "$answer" != "n" ] && [ "$answer" != "no" ] && [ "$answer" != "н" ] && [ "$answer" != "нет" ]
do
printf "nrНаберите 'да'/'yes' или 'нет'/'no': "
read answer
done
if [ "$answer" == "y" ] || [ "$answer" == "yes" ] || [ "$answer" == "д" ] || [ "$answer" == "да" ]
then
# используется прокси
printf "nrВведите параметры Вашего прокси-сервера. Примеры:nr"
printf "* по умолчанию, как в системе: proxy=autonr"
printf "* протокол, адрес, порт: proxy=https,127.0.0.1,80nr"
printf "* или: proxy=https,127.0.0.1,443nr"
printf "* плюс логин и пароль: proxy=https,127.0.0.1,80,login,passwordnr"
printf "* или: proxy=socks4,my.proxy.local,1080,login,passwordnr"
printf "* или: proxy=socks5,my.another.proxy.local,1081nr"
read disk_proxy
printf "nrУказывается прокси-сервер: $disk_proxy.nr"
echo "proxy="$disk_proxy"" >> ~/.config/yandex-disk/config_$disk_id.cfg
else
# не используется прокси
echo "proxy="no"" >> ~/.config/yandex-disk/config_$disk_id.cfg
fi
printf "nrНастройка завершена успешно!nr"
fi
printf "nrВы хотите настроить в системе еще один Яндекс.Диск? Наберите 'да'/'yes' или 'нет'/'no': "
read answer
while [ "$answer" != "y" ] && [ "$answer" != "yes" ] && [ "$answer" != "д" ] && [ "$answer" != "да" ] && [ "$answer" != "n" ] && [ "$answer" != "no" ] && [ "$answer" != "н" ] && [ "$answer" != "нет" ]
do
printf "nrНаберите 'да'/'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 "Ссылка скопирована в буфер обменаnr"</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 "===============================================================rn"
printf "Настройка консольной программы yandex-disk для Debian GNU/Linuxnr"
printf "===============================================================rn"
printf "Для продолжения нажмите <Ввод>"
read x
printf "nrВы хотите настроить программу yandex-disk:nr"
printf " 1 -- для подключения только одного Яндекс.Диска;nr"
printf " 2 -- для подключения нескольких разных Яндекс.Дисков (с разными учетными записями)?nr"
printf "Для продолжения укажите Ваш вариант: "
read y
while [ "$y" != "1" ] && [ "$y" != "2" ]
do
printf "nrВыберите один из двух вариантов -- 1 или 2: "
read y
done
if [ "$y" == "1" ]
then
printf "nr-------------------------------------------------------nr"
printf "Произвожу настройку для подключения одного Яндекс.Диска"
printf "nr-------------------------------------------------------nr"
printf "Пожалуйста, в любом браузере войдите в ту учетную запись на Яндексе, диск которой Вы хотите настроить, и перейдите по адресу:nrnrhttps://ya.ru/devicenrnrПроцедура настройки укажет Вам секретный код, который необходимо будет ввести в браузере.nr"
printf "Когда будете готовы, нажмите <Ввод>"
read x
printf "nrЗапускаю стандартную процедуру настройки yandex-disk'а...nrnr"
yandex-disk setup
elif [ "$y" == "2" ]
then
printf "nr------------------------------------------------------------nr"
printf "Произвожу настройку для подключения нескольких Яндекс.Дисков"
printf "nr------------------------------------------------------------nrnr"
printf "* Для удобства использования предлагается, чтобы каждый Яндекс.Диск получил свой идентификатор.nrnr"
printf "* В простейшем случае Вы можете выбрать в качестве идентификаторов целые числа и нумеровать Яндекс.диски 1, 2, 3... и т.д. В таком случае файлы токенов дисков будут иметь названия passwd_1, passwd_2, passwd_3... и т.д., а конфигурационные файлы -- названия config_1, config_2, config_3... и т.д.nrnr"
printf "* Однако Вы можете выбрать в качестве идентификаторов имена. Например, назвать свои диски lib, my, extra и т.д. В таком случае файлы токенов дисков будут иметь названия passwd_lib, passwd_my, passwd_extra... и т.д., а конфигурационные файлы -- названия config_lib, config_my, config_extra... и т.д.nrnr"
printf "* Эти идентификаторы будут использоваться при работе с Яндекс.Дисками из графического интерфейса файл-менеджера krusader, поэтому Вам необходимо будет их помнить. Вы всегда можете посмотреть названия в директории настроек: ~/.config/yandex-disk.nrnr"
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 "nr.................................nr"
printf "Настройка очередного Яндекс.Диска"
printf "nr.................................nrnr"
printf "Укажите, какой идентификатор будет иметь Яндекс.Диск в системе: "
read disk_id
printf "nrНастраиваю диск "$disk_id"nrnr"
printf "Пожалуйста, в любом браузере войдите в ту учетную запись на Яндексе, диск которой Вы хотите настроить, и перейдите по адресу:nrnrhttps://ya.ru/devicenrnrПроцедура настройки укажет Вам секретный код, который необходимо будет ввести в браузере.nr"
printf "Когда будете готовы, нажмите <Ввод>"
read x
yandex-disk token ~/.config/yandex-disk/passwd_$disk_id
if [ -e ~/.config/yandex-disk/passwd_$disk_id ]
then
# токен создан, можно создавать конфигурационный файл
printf "nrСоздаю новый конфигурационный файл: ~/.config/yandex-disk/config_$disk_id.cfg.nr"
echo "auth="~/.config/yandex-disk/passwd_$disk_id"" > ~/.config/yandex-disk/config_$disk_id.cfg
printf "nrУкажите полный путь к директории, к которой подключен Яндекс.Диск: "
read disk_dir
printf "nrПодключается директория: $disk_dir.nr"
echo "dir="$disk_dir"" >> ~/.config/yandex-disk/config_$disk_id.cfg
printf "nrДля подключения используется прокси-сервер? Наберите 'да'/'yes' или 'нет'/'no': "
read answer
while [ "$answer" != "y" ] && [ "$answer" != "yes" ] && [ "$answer" != "д" ] && [ "$answer" != "да" ] && [ "$answer" != "n" ] && [ "$answer" != "no" ] && [ "$answer" != "н" ] && [ "$answer" != "нет" ]
do
printf "nrНаберите 'да'/'yes' или 'нет'/'no': "
read answer
done
if [ "$answer" == "y" ] [ "$answer" == "yes" ] [ "$answer" == "д" ] [ "$answer" == "да" ]
then
# используется прокси
printf "nrВведите параметры Вашего прокси-сервера. Примеры:nr"
printf "* по умолчанию, как в системе: proxy=autonr"
printf "* протокол, адрес, порт: proxy=https,127.0.0.1,80nr"
printf "* или: proxy=https,127.0.0.1,443nr"
printf "* плюс логин и пароль: proxy=https,127.0.0.1,80,login,passwordnr"
printf "* или: proxy=socks4,my.proxy.local,1080,login,passwordnr"
printf "* или: proxy=socks5,my.another.proxy.local,1081nr"
read disk_proxy
printf "nrУказывается прокси-сервер: $disk_proxy.nr"
echo "proxy="$disk_proxy"" >> ~/.config/yandex-disk/config_$disk_id.cfg
else
# не используется прокси
echo "proxy="no"" >> ~/.config/yandex-disk/config_$disk_id.cfg
fi
printf "nrНастройка завершена успешно!nr"
fi
printf "nrВы хотите настроить в системе еще один Яндекс.Диск? Наберите 'да'/'yes' или 'нет'/'no': "
read answer
while [ "$answer" != "y" ] && [ "$answer" != "yes" ] && [ "$answer" != "д" ] && [ "$answer" != "да" ] && [ "$answer" != "n" ] && [ "$answer" != "no" ] && [ "$answer" != "н" ] && [ "$answer" != "нет" ]
do
printf "nrНаберите 'да'/'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 "Ссылка скопирована в буфер обменаnr"</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 эффективной и приятной.