Яндекс.Диск в Linux. Пункт в меню KDE\Dolphin. Отображение состояния в conky

в 0:47, , рубрики: archlinux, dolphin, kde, linux, яндекс, Яндекс.Диск, метки: , , , ,

Недавно начал пользоваться консольным клиентом Яндекс.Диск в Linux.
Для удобства использования пришлось добавить в контекстное меню Dolphin пункт публикации файла/папки, а в conky информацию о текущем состоянии Яндекс.Диска.

Яндекс.Диск в Linux. Пункт в меню KDE\Dolphin. Отображение состояния в conky Яндекс.Диск в Linux. Пункт в меню KDE\Dolphin. Отображение состояния в conky


Сделать и то и другое довольно просто.

Добавим пункт в меню Dolphin.
Для этого создадим файл *.desktop (мой файл называется YDisk.desktop) со следующим содержанием:

[Desktop Entry]
Type=Service
ServiceTypes=all/allfiles
MimeType=all/all;
Actions=ToYandex;
X-KDE-Priority=TopLevel
X-KDE-Icon=/usr/share/pixmaps/YD_logo.png
X-KDE-ServiceTypes=KonqPopupMenu/Plugin

[Desktop Action ToYandex]
Name=Опубликовать
Icon=/usr/share/pixmaps/YD_logo.png
Exec=/usr/bin/YD_public %F

Теперь поместим его в каталог /usr/share/kde4/services

sudo cp YDisk.desktop /usr/share/kde4/services

Как видно из содержания файла, в качестве иконки я использую png картинку размещённую в папке /usr/share/pixmaps/
а при нажатии на пункт выполняется команда /usr/bin/YD_public %F, где %F это имя файла.

На случай если кому-то понадобится
Яндекс.Диск в Linux. Пункт в меню KDE\Dolphin. Отображение состояния в conky

У нас появился пункт в меню.
Яндекс.Диск в Linux. Пункт в меню KDE\Dolphin. Отображение состояния в conky
Создадим файл для обработки этого события.
Для этого напишем файл YD_public следующего содержаниея.

#!/usr/bin/bash

# Выполняем команду yandex-disk publish объединяя поток error с stdout
# в переменной var будет содержаться Ссылка на опубликованный файл либо Ошибка
var=`yandex-disk publish $1 2>&1`
# Запускаем оповещение о том, что файл опубликован
notify-send -i /usr/share/pixmaps/YD_logo.png "Яндекс.Диск" "$var"
# С помощью dbus копируем ссылку на файл в клипбоард
qdbus org.kde.klipper /klipper org.kde.klipper.klipper.setClipboardContents $var

Копируем наш файл в /usr/bin и делаем файл исполняемым.

cp YD_public /usr/bin
chmod +rx /usr/bin/YD_public

Результат работы notify-send
Яндекс.Диск в Linux. Пункт в меню KDE\Dolphin. Отображение состояния в conky

Ссылка в клипбоард тоже успешно скопирована
Яндекс.Диск в Linux. Пункт в меню KDE\Dolphin. Отображение состояния в conky

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

Теперь разберёмся с conky (Я специально выделил белым всё что связано с Yandex.Disk)
Тут у нас типичный conky с типичным .conkyrc

Яндекс.Диск в Linux. Пункт в меню KDE\Dolphin. Отображение состояния в conky

Если выполнить в консоли yandex-disk status, то утилита в ответ выдаст что-то вроде

[rain@rainhost kde]$ yandex-disk status
Статус ядра синхронизации: ожидание команды
Путь к папке Яндекс.Диска: '/mnt/raid/YDisk'
        Всего: 211.97 GB
        Занято: 4.08 GB
        Свободно: 207.89 GB
        Максимальный размер файла: 10 GB
        Размер корзины: 0 B

Хоть и не совсем годится для отображения в conky, но ничто не мешает его «парсить».

Посмотрите на файл конфигурации

yandex.disk - ${exec yandex-disk status | grep -i Всего | sed -e 's/^.{8}//'}

${exec yandex-disk status | grep -i Занято | sed -e 's/^.{9}//'}${alignr}${execbar YD_free}

Status:${alignr}${exec yandex-disk status | grep -i "Статус ядра"| sed -e 's/^.{27}//'}

Other informations:

${exec yandex-disk status | grep -i "Статус синхронизации"| sed -e 's/^.{22}//'}

Немного разберём его.
В первой строке мы запускаем yandex-disk status, с помощью grep отбираем строчку в которой есть совпадение со словом «Всего» grep -i Всего и удаляем 8 первых символов sed -e 's/^.{8}//'. Таким образом мы получили общий объём Яндекс.Диска и вывели в conky. Аналогичным способом получили информацию о том сколько занято (строка 2), а также информацию о статусе (строки 3 и 5).
Во второй строке я также вывожу bar с информацией о том на сколько заполнен диск в процентах, для этого написал небольшой скрипт YD_free который возвращает число от 0 до 100 в зависимости от заполненности диска, а execbar отображает его принимая в качестве аргумента результат работы YD_free:

#!/usr/bin/bash

var=`yandex-disk status | grep -i Всего | sed -e 's/^.{8}//' | sed 's/.{6}$//' 2>&1`
vos=`yandex-disk status | grep -i Занято | sed -e 's/^.{9}//' | sed 's/.{6}$//' 2>&1`

echo $[$vos*100/$var]

Тут в первую переменную пишем сколько у нас места Всего, во вторую сколько Занято, в третей строке выводим процент.

P.S. Хотелось бы что бы команда Яндекс добавила больше опций на вывод (к примеру пишешь команду yandex-disk status disk free — результат свободное место на диске цифрами), а читатель «получил запал» для старта новых идей.

Автор: Zeeeee

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js