пятница, 25 января 2019 г.

Автоматическое переназначение значка статуса Dropbox

Назначение пользовательского значка статуса "Синхронизировано" в Dropbox рассматривалось в публикации "Изменение значка статуса Dropbox в Linux".

С течением времени после обновления ПО Dropbox замена перезаписанного в процессе обновления графического файла dropboxstatus-idle.png всё время откладывалась на потом. В конце концов, постоянная "забывчивость" заставила поискать способ осуществление такой операции автоматически. Например, значка по умолчанию


на выбранный свой


Готовые значки можно взять здесь. Во вложенной папке Default colored расположены варианты окраски значка dropboxstatus-idle.png. При создании своих значков необходимо иметь в виду, что их размер должен быть 20x20.

Процесс выполняется скриптом bash, оформленным как исполняемый файл.

Для достижения цели необходимо знать несколько исходных данных:

– версию используемого ПО Dropbox;

– расположение значка из комплекта поставки (по умолчанию);

– расположение своего значка статуса "Синхронизировано".

Далее осуществляется сравнение двух графических файлов и при их различии значок по умолчанию удаляется, а на его место помещается свой значок.

В Ubuntu и Linux Mint имеется скрытый каталог ~/.dropbox-dist, в котором расположен файл VERSION, содержанием которого и является версия установленного ПО.

Значок статуса "Синхронизировано" расположен по пути

 ~/.dropbox-dist/dropbox-lnx.x86_64-vesrion/images/hicolor/16x16/status/,

где вместо version указаны цифры, соответствующие номеру версии ПО, например

~/.dropbox-dist/dropbox-lnx.x86_64-65.4.177/images/hicolor/16x16/status/

Для удобства написания (чтобы не указывать длинные команды) в скрипт вводится несколько переменных.

ver=`cat ~/.dropbox-dist/VERSION`
icon=~/.dropbox-dist/dropbox-lnx.x86_64-$ver/images/hicolor/16x16/status/
f1=~/.dropbox-dist/dropbox-lnx.x86_64-$ver/images/hicolor/16x16/status/dropboxstatus-idle.png
f2=~/Dropbox/dropboxstatus-idle.png

Переменная ver является номером версии ПО, который затем используется при определении значения переменной пути к значкам. Так как ПО Dropbox обновляется, то невозможно заранее указать номер следующей версии. Поэтому этот номер и считывается из файла VERSION.

icon указывает расположение каталога со значками состояния Dropbox.

f1 указывает путь к текущему файлу значка dropboxstatus-idle.png.

f2 указывает путь к своему файлу значка dropboxstatus-idle.png, который и должен заменить текущий.

Далее производится операция сравнения двух файлов dropboxstatus-idle.png: текущего и своего. Если они одинаковы, то не производится никаких действий. Если они отличаются, то текущий значок удаляется, а свой файл копируется в каталог со значками состояния Dropbox.

if cmp -s $f1 $f2 ; then
   :
else 
   rm $f1
   cp $f2 $icon
fi

Итого, полный текст скрипта:

#!/bin/bash
ver=`cat ~/.dropbox-dist/VERSION`
icon=~/.dropbox-dist/dropbox-lnx.x86_64-$ver/images/hicolor/16x16/status/
f1=~/.dropbox-dist/dropbox-lnx.x86_64-$ver/images/hicolor/16x16/status/dropboxstatus-idle.png
f2=~/Dropbox/dropboxstatus-idle.png
if cmp -s $f1 $f2 ; then
:
else 
rm $f1
cp $f2 $icon
fi
exit

Ожидается, что в результате его использования состояние Dropbox "Синхронизировано" будет постоянно отображаться назначенным значком.

Если имеется необходимость поменять на свой значок ещё и монохромный dropboxstatus-logo.png (отображается при старте клиента до его синхронизации с облаком), то после f2 укажите две переменные, описывающие расположение значков dropboxstatus-logo.png,

f3=~/.dropbox-dist/dropbox-lnx.x86_64-$ver/images/hicolor/16x16/status/dropboxstatus-logo.png
f4=~/Dropbox/dropboxstatus-logo.png

и аналогичную операцию сравнения после предыдущего цикла (после fi)

if cmp -s $f3 $f4 ; then
 :
else
rm $f3
cp $f4 $icon
fi

Данный скрипт можно поместить как отдельную команду в скрипт запуска Dropbox, который производится через кнопку запуска или по расписанию. Ниже приводится пример через кнопку запуска. Скрипт автокоррекции значка – dbi.sh

#!/bin/bash
~/Dropbox/scripts/dbi.sh
notify-send --icon=/home/user/.local/share/icons/Mint-X/emblems/48/emblem-sync-dropbox.png "Dropbox status" "Client is starting"
dropbox start -i
sleep 1200
notify-send --icon=/home/user/.local/share/icons/Mint-X/emblems/48/emblem-sync-dropbox-z.png "Dropbox status" "Dropbox is going to exit"
dropbox stop
exit

пятница, 18 января 2019 г.

Linux: вариант запуска и остановки Диска Яндекс с графическим индикатором вручную или по расписанию

Публикация рассматривает вариант запуска и остановки Диска Яндекс по расписанию (пользовательское задание cron), при котором также будет запущен и остановлен индикатор Диска Яндекс.

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

Изменение конфигурации (конфигураций) клиента Диска Яндекс

Так как в рассматриваемом варианте запуск и остановка клиента Диска Яндекс не будет осуществлять командами индикатора, то в конец файла конфигурации клиента Диска Яндекс config.cfg необходимо добавить строки:

startonstartofindicator="no"
stoponexitfromindicator="no"

Настройка автостарта индикатора Диска Яндекс

Проверьте в файле настроек индикатора соответствие строки autostart значению no, то есть должно быть autostart="no".

Файл настроек индикатора: ~/.config/yd-tools/yandex-disk-indicator.conf

Создание исполняемого файла запуска

Если у Вас только 1 учётная запись Яндекса, то файл запуска имеет вид:

#!/bin/bash
yandex-disk start
yandex-disk-indicator
exit

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

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

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

#!/bin/bash
# Проверка наличия запущенного экземпляра Диска Яндекс.
# Если демон запущен, то в каталоге /tmp имеется каталог, в имени
# которого присутствует yandex-disk-
# Если Диск Яндекс запущен, ты вызывается команда его
# остановки yandex-disk stop (актуально для запуска по расписанию).
# Если про проверке такого каталога не найдено,
# то не производится никаких действий.
# Команде "Ничего не делать" соответствует двоеточие, то есть :
yd=/tmp/yandex-disk-*
if [ -d $yd ]; then
  yandex-disk stop
else
  :
fi
# Бывает, что в каталоге настроек Диска Яндекс появляется файл crash.txt
# Если такой файл будет найден, то он удаляется.
# crash, D1, D2 представляют из себя пути. Данные значения применены для
# того, чтобы вместо указания полного пути использовать переменные.
crash=/home/user/.config/yandex-disk/crash.txt
D1=/home/user/.config/yandex-disk
D2=/home/user/scripts/yandex/client-1
if [ -f $crash ]; then
  rm -f $D1/crash.txt
else
  :
fi
# Текущие файлы настроек клиента Диска Яндекс удаляются (rm), а вместо них
# записываются (cp) данные нужного аккаунта (3 файла настроек).
rm -f $D1/config.cfg
rm -f $D1/iid
rm -f $D1/passwd
cp $D2/config.cfg $D1
cp $D2/iid $D1
cp $D2/passwd $D1
# Запуск демона Диска Яндекс и графического индикатора.
yandex-disk start
yandex-disk-indicator
exit

Создание исполняемого файла остановки

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

#!/bin/bash
[ "$(pidof python3 /usr/bin/yandex-disk-indicator)" ] && pkill yd-tools || sleep 1
yandex-disk stop
exit

Выбор запуска: по расписанию или вручную

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

EXPORT DISPLAY=:0 && путь_к_ скрипту

четверг, 17 января 2019 г.

Антивирус в Linux: нужен ли?

Вопрос о целесообразности установки в Linux антивирусного ПО на соответствующих форумах появляется с завидной периодичностью. Можно было бы даже сказать, что подобная "эпическая битва" мнений имеет тенденцию никогда не завершиться. Прямо как в последнем эпизоде советской экранизации произведения Александра Дюма "Граф Монте-Кристо": ... зло окончательно победить невозможно, ибо борьба с ним и есть сама жизнь.

Лично мне по данному вопросу понравился комментарий пользователя slant с форума linuxmint.com.ru, который приводится ниже в адаптированном варианте (надеюсь, что смысл удалось передать верно). Вследствие этого, данную публикацию можно рассматривать как своего рода репостинг или копипастинг (кому как нравится).

Отыщи всему начало и ты многое поймёшь
Козьма Прутков

Определимся с терминологией

Вирус – часть исполняемого программного кода, при выполнении которого происходит так называемое реплицирование (другими словами – самовоспроизведение или тиражирование) этого самого кода без ведома и участия пользователя, то есть полностью в автоматическом режиме.

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

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

Если не эксплуатирует какую-либо уязвимость – не может выйти за рамки возможностей пользователя который её запустил.

Примечание. Вспомните рекомендацию не работать под встроенной учётной записью Администратор или root.

Запустится ли вирус в Linux?

– Нет.

– Почему?

– Мешает особенность архитектуры unix-based систем (к которым и относится Linux): процесс не может проникнуть в память другого процесса и тем более что-то там менять. Полная изоляция.

В Windows, несмотря на наличие системы прав доступа, сама возможность присутствует. Поэтому ошибки проектирования программ регулярно приводят к тому, что вирусы пользуются этой возможностью. Для классического вируса в 98% случаев это и будет представлять собой вектор атаки. Получается, что безопасность программы зависит от автора конкретной программы и авторов окружения в котором она работает. Места для ошибок – море. Что по статистике рано или поздно и имеет место.

В Unix (и следовательно Linux) – у программ такой возможности нет в принципе. Если необходимо осуществлять взаимодействие не через диск – используются pipe. Без углубления в объяснения достаточно знать, что этот механизм не позволяет вмешаться в другой процесс произвольным образом. Если программе необходимо внешнее влияние, то оно должно быть явно описано: что, зачем, как. Другими словами – строго оговаривается порядок обмена данными.

Учитывая сказанное выше, классические вирусы, будучи запущенными в Linux и предпринимающие попытки проникнуть в другие процессы, терпят неудачу.

Что касается антивирусного ПО, то резидентные антивирусы также не имеют возможности вмешаться в другие процессы "на лету" (как это происходит в Windows): память других процессов им недоступна (см. выше).

Единственные реально работающие антивирусы под Unix – это те, которые не резидентные. Те, что просто читают файлы с диска до их запуска и проверяют их на предмет сигнатур (описаний, оформленных особым образом) из баз. В ручном режиме – так, как это делалось еще во времена msdos.

Запустится ли червь в Linux?

Здесь ситуация не столь "непробиваемая". Если скачать откуда-нибудь исполняемый на Вашей системе файл и запустить его – он что-то сделать всё-таки сможет. Но ... С Вашими правами. То есть, не сможет навредить системе в целом, но на Ваши собственные файлы воздействовать сможет.

Соответственно, так называемая the best practice (лучшая практика) рекомендует тестировать неизвестное программное обеспечение под другой учётной записью (аккаунтом пользователя системы) с ограниченными правами.

Но... "В пролёте" оказываются черви которые в Windows запускаются просто по факту захода на веб-страницу. Даже если они обнаружат в браузере уязвимость и заставят его скачать свой исполняемый файл – этого мало. В Linux скачать такой файл ещё ничего не значит. Ему необходимо ещё дать права на выполнение. А автоматически это сделать не так просто, во всяком случае в API браузеров в функциях работы с файлами такая возможность вообще отсутствует.

Пояснение. API – программный интерфейс приложения, интерфейс прикладного программирования. Представляет собой описание способов, которыми одна компьютерная программа может взаимодействовать с другой программой. Используется программистами при написании всевозможных приложений.

Упомянутая выше the best practice для Linux рекомендует устанавливать программы только из собственных репозиториев дистрибутива, в которых цифровая подпись гарантирует что полученный файл – именно тот, который положили в репозиторий авторы дистрибутива.

И что из всего сказанного следует?

Считается, что антивирус в Linux нужен в двух случаях: почтовому серверу и "файлопомойке" (общие сетевые папки, как правило реализуемые посредством ПО Samba). В обоих случаях он применяется для проверки файлов, которые через него проходят, но даже не выполняются.


понедельник, 14 января 2019 г.

Автоматизация процессов. Запуск и остановка в Linux клиента MEGA по расписанию через bash

Запуск и остановка клиента синхронизации облака MEGA возможна по расписанию. Но если в скрипте, который будет осуществлять запуск клиента MEGA применить команду megasync, то скрипт не сработает.

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

Это обусловлено тем, что клиент MEGA является именно графическим приложением, а запуск приложения по расписанию не предусматривает отображения на экране значков, сопровождающих работу приложений.

Если Вы используете только одну учётную запись MEGA, то в пользовательском задании cron укажите выполнение команды DISPLAY=:0 /usr/bin/megasync

Соответственно, для остановки клиента используйте один понравившихся вариантов, описанных в данной заметке.

При использовании нескольких учётных записей MEGA для запуска и остановки клиента MEGA с необходимым аккаунтом целесообразно использовать 2 скрипта.

1-й скрипт запишет нужную конфигурацию учётной записи и запустит клиент.

Пример:

#!/bin/bash
rm -R '/home/user/.local/share/data/Mega Limited/MEGAsync'
cp -R /home/cemea/configs/Mega-4/MEGAsync '/home/user/.local/share/data/Mega Limited'
DISPLAY=:0 /usr/bin/megasync

2-й скрипт остановит работу клиента MEGA. Пример:

#!/bin/bash
OUTPUT="$(pidof megasync)"
kill -15 ${OUTPUT}
rm -R /home/user/configs/Mega-4/MEGAsync
cp -R '/home/user/.local/share/data/Mega Limited/MEGAsync' /home/user/configs/Mega-4
exit

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

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

пятница, 11 января 2019 г.

Синхронизация любых папок компьютера с Dropbox, MEGA, pCloud, Диск Яндекс, Облако@Mail.Ru

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

Такими облачными хранилищами являются:

Dropbox, Диск Яндекс, Облако@Mail.Ru

 Примечание.  Клиент Облако@Mail.Ru под Linux больше не работает. Сбылось мрачное предположение.

О создании символических ссылок читайте ниже.


Папки для синхронизации с MEGA и pCloud назначаются в их графических клиентах. При этом можно отменить синхронизацию с создаваемой папкой по умолчанию и впоследствии удалить её.

Про выборочную синхронизацию для pCloud читать здесь

Для реализации такого действия в клиенте MEGA при его настройке необходимо выбирать "Выборочная синхронизация" (подробности).

При уже установленном клиенте MEGA достаточно удалить его текущую настройку. При запуске клиента откроется окно его новой настройки.

Для удаление текущей настройки клиента MEGA в Linux выполнить в терминале

rm -R '~/.local/share/data/Mega Limited/MEGAsync'

Для удаления текущей настройки клиента MEGA в Windows выполните в командной строке

rd "C:\Users\spinner\AppData\Local\Mega Limited\MEGAsync" /s /q

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

  Обратите внимание. 

1. Чтобы не пересинхронизировать большой объём данных или не потерять имеющиеся в облаке данные зайдите сначала в облако MEGA через браузер. Посмотрите на расположение данных в папках. Не исключено, что все Ваши данные расположены в папке MEGAsync

 
2. Перенесите в браузере данные из папки MEGAsync в корень облачного хранилища. Например, вот так:


3. Перенесите на компьютере данные из папки MEGAsync в другое место.

4. Запустите клиент и согласитесь с настройкой по умолчанию. В таком варианте папка MEGAsync компьютера и  папка MEGAsync облака не будут содержать каких-либо данных.

5. Вызовите по значку MEGA в правом контекстном меню "Настройки" и перейдите во вкладку "Синхронизации". Сопоставьте подлежащие синхронизации с облаком папки компьютера папкам облака.


Клиент пересчитает новое расположение папок с данными. Это процесс может занять некоторое время.


Символические ссылки

В Linux символические ссылки создаются очень просто. Если такая команда отсутствует в контекстном меню Вашего менеджера файлов, то можно ознакомиться с этим материалом. Хотя в нём речь ведётся о файловом менеджере Thunar (графическое окружение xfce), в нём приводятся варианты команд создания символической ссылки на папку (каталог) .

Созданную ссылку поместить в папку (каталог) синхронизации с облаком. Желательно, чтобы имя ссылки было удобоваримым, а не что-то наподобие "Ссылка на ...", "Link to ...".

Замену папки синхронизации на символическую ссылку осуществлять при выключенном клиенте облачного хранилища.

1. Перенесите папку в данными в удобное для Вас место на Вашем компьютере.

2. Создайте на папку символическую ссылку. Имена папки и символической ссылки на неё должны быть одинаковыми.

3. Поместите созданную символическую ссылку в папку клиента.

4. Запустите клиент синхронизации.

Ниже приводятся примеры для Диска Яндекс, Dropbox, Обако@Mail.Ru.


В облаке указанная выше символическая ссылка имеет вид:


Поясение к рисунку выше. Cemea является общей папкой





Про назначение символических ссылок в Windows читайте эту заметку.

вторник, 8 января 2019 г.

Оформление всплывающих уведомлений Linux Mint

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

При использовании Linux Mint 19 возникла идея подстроить всплывающие системные уведомления под личное восприятие. Иными словами – немного их приукрасить.

В используемой мной Linux Mint 19 xfce всплывающие системные уведомления называются "Оповещения". В комплекте поставки имеется несколько вариантов настройки их отображения на экране (Настройки – Оповещения).

Оповещение по умолчанию имеет вид:


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

Отображение оповещения вызывается командой

notify-send "Текст оповещения"

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

Добавим "красоты" в виде отображения значка:

notify-send -i info "Текст оповещения"

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

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

notify-send --icon=/home/user/.local/share/icons/gnome/48x48/emblems/emblem-sync-dropbox.png Info "<b><i>Dropbox is starting</i></b>"

--icon=  задаёт путь к файлу значка, который будет отображаться. Экспериментально установлено, что данный значок лучше всего смотрится при его размерах 48х48 пикселей. Поэтому в приведённом примере указан значок из своего набора эмблем для каталогов.

Info – это текст заголовка, который может быть любым и даже написанным по-русски. По умолчанию составные слова не допускаются. Например, в качестве Info нельзя указать Сообщение о запуске. Должно быть только одно слово, например Запуск. Если необходим составной заголовок, то он должен быть взят в кавычки, например "Сообщение о запуске".

"<b><i>Dropbox is starting</i></b>" – собственно текст оповещения, который тоже может быть по-русски. В приводимом примере текст оповещения будет отображаться жирным (b) наклонным (i) шрифтом.

Длительность отображения всплывающих уведомлений по умолчанию указывается в настройках оповещений. Но для конкретного уведомления эту длительность можно переназначить. для этого используется параметр -t N, где N – длительность в миллисекундах. Для примера, 20 секунд будут соответствовать значению 20000. Для указанного выше уведомления вся строка будет иметь вид:

notify-send --icon=/home/user/.local/share/icons/gnome/48x48/emblems/emblem-sync-dropbox.png -t 20000 Info "<b><i>Dropbox is starting</i></b>"

Ниже показано несколько примеров оформления оповещений.






Если заголовок не нужен, а нужны только значок и текст оповещения, то используется вариант, например

notify-send --icon=/home/user/.local/share/icons/gnome/48x48/emblems/emblem-sync-dropbox.png "Dropbox is starting"


При этом назначение тексту курсива не работает.

А если посмотреть в каком из стилей из предлагаемого набора тем (Default, Bright, Smoke, ZOMG-PONIESI, Retro) уведомления будут смотреться лучше всего, то не исключено. что какой-либо вариант устроит Ваш утончённый вкус.