среда, 26 декабря 2018 г.

MikroTik: включение и выключение wifi и vpn по расписанию

На домашнем роутере MikroTik возникла идея организовать автоматическое выключение и включение по расписанию имеющихся точки wifi и канала vpn.

WiFi

Включение/выключение точки wifi производится командами:

/interface wireless enable 0 – включить точку (интерфейс wifi);

/interface wireless disable 0 – выключить точку (интерфейс wifi).

0 – это номер интерфейса wireless (начинается с 0). А так как данный интерфейс является единственным, то к нему применяется значение 0.


Далее остаётся через "System – Sheduler" создать 2 события.

В параметрах события определяется время наступления события (Start Time), устанавливается интервал между событиями 24 часа (24:00:00 или 1d:00:00:00) и указывается действие по событию. Аналогичная запись создаётся и для выключения wifi.

Действие по событию: в поле On Event вписать /interface wireless enable 0 для включения wifi или /interface wireless disable 0 для его выключения (см. выше).



VPN

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

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


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

/interface l2tp-client enable 0 – включение клиента;

/interface l2tp-client disable 0 – выключение клиента.

Например, для выключения клиента в планировщик внесено событие:



Оптимальный MTU для VPN. После подключения к серверу vpn были произведены тестовые пинги, продемонстрировавшие, что наилучшая связь с необходимым узлом vpn (имя_хоста_vpn) обеспечивается не с MTU=1450, с которым маршрутизатор соединяется с сервером vpn по умолчанию, а с MTU=1440.

Значение складывается из суммы полученного наилучшего значения пинга с компьютера пакетами с флагом запрета фрагментации

Linux:  ping -c 4 -M do -s 1412 имя_хоста_vpn

Windows:  ping имя_хоста_vpn – f –l 1412   (пояснение)

и дополнительных байтов, необходимые на формирование заголовков пакета и запроса, на выходе с маршрутизатора, то есть интерфейса L2TP. Учитывая сказанное, данное значение вырастает на 28 байт и приобретает значение 1440.

Примечание. Длину результирующего пакета можно увидеть в терминале Linux, в котором перед отображением очереди ответов присутствует запись 

PING имя_хоста_vpn (его адрес IP) 1412(1440) bytes of data.

Исходя из этого, правила Firewall были дополнены правилами Mangle для входящих и исходящих соединений. На рисунках ниже указано Mangle Rule для входящего соединения. Аналогичное правило создано и для исходящих соединений, то есть для Out. Interface.


Во вкладке Advanced:


Во вкладке Action:


вторник, 25 декабря 2018 г.

Linux Mint 19: выключить запрос на назначение chromium браузером по умолчанию

После установки в Linux Mint 19 браузера Chromium при его запуске каждый раз стал появляться запрос на его назначение браузером по умолчанию.


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

Но ... , к своему сожалению, такой настройки найдено не было. Стремление раз и навсегда избавиться от постоянных запросов от chromium подпитывалось ещё и тем, что в Linux Mint 18.3 такого явления не наблюдалось.

Для решения возникшей проблемы требуется запустить редактор меню (в xfce это "Настройки – Редактор меню", что соответствует компоненту Menulibre) и внести для кнопки запуска браузера Chromium правку: к записи chromium-browser %U добавить -no-default-browser-check (между %U и -no-default-browser-check должен быть пробел).


Сохраните внесённые изменения и запустите снова браузер Chromium. Запроса на назначение браузером по умолчанию не должно быть.

Такую же команду (chromium-browser %U -no-default-browser-check) используйте для комбинаций клавиш клавиатуры, если Вы запускаете браузер chromium не мышкой, а нажатием комбинации клавиш.

При необходимости использовать сопоставление такого запуска терминальной команде chromium добавьте в файл .bashrc псевдоним (алиас):

alias chromium="chromium-browser %U -no-default-browser-check" и сохраните изменённый файл .bashrc.

Для редактирования .bashrc выполните команду xed ~/.bashrc

вторник, 18 декабря 2018 г.

Запуск Vidcutter App.Image через контекстное меню Thunar


После очередного сеанса мучений с VidCutter, обусловленного отсутствием каких-либо признаков запуска этой программы, было принято решение перейти на её версию App.Image.

В отличие от устанавливаемого из репозитория варианта, App.Image является самодостаточным пакетом, напоминающим partable program для Windows, и не зависит от компонентов python, на невозможность корректной работы которых система обратила внимание при запуске vidcutter в терминале.

Vidcutter Application Image был скачан отсюда:

https://www.videohelp.com/software/VidCutter

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



Для включения в контекстное меню менеджера файлов Thunar необходимо выполнить действия:

1) Запустить Thunar и вызвать "Правка – Особые действия".

2) Значком + добавить особое действие.

Имя: указать наименование пункта правого контекстного меню, например Open by VidCutter.

Команда: указать путь к файлу VidCutter и добавить символы %f, например,

/home/minter/Tools/VidCutter-6.0.0-x64.AppImage %f

В качестве значка укажите любой приглянувшийся значок.

В условиях появления поставить галочку только "Видео-файлы".



суббота, 15 декабря 2018 г.

Быстрый просмотр изображений из менеджера файлов Thunar


Предмет заметки составляет информация, найденная на ресурсе Наш блогосайт: Linux и "лирика",  и касается вызова средства просмотра графических файлов feh из менеджера файлов Thunar по команде правого контекстного меню.

Установите пакет:  sudo apt install -y feh

В особых действиях Thunar создайте новый пункт для просмотра изображений. В качестве команды введите feh %f, а в условиях появления укажите "Изображения":



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

Linux Mint 19: нечитаемые символы (кракозябла) в архиве zip


После передачи через pCloud с Linux Mint 18.3 на Linux Mint 19 архива zip просмотр его содержимого вызвал большое удивление. Архив был создан обычным способом через правое контекстное меню менеджера архивов среды GNOME, входящего в стандартную поставку Linux Mint.


Сразу отмечу, что рецепт подключения репозитория frol не сработает по причине отсутсвия у данного репозитория поддержки bionic (Linux Mint 19 использует репозитории Ubuntu Bionic).

~$ sudo add-apt-repository ppa:frol/zip-i18n
[sudo] пароль для minter:       
HTTP Error 404: Not Found
Не удаётся добавить PPA: «'Данный PPA не поддерживает bionic'».

Вариант "лечения" может заключаться в установке xarchiver:

sudo apt install -y xarchiver

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


При открытии этого же архива в Xarchiver получен результат:


Выключить котика на экране


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

sudo apt install -y oneko

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





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


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





После очередного перемещения курсора процесс повторяется.

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

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

Варианты скрипта (на выбор):

#!/bin/bash
pgrep oneko> ~/oneko.txt
VAR=`sed -n '1p' ~/oneko.txt`
kill -15 $VAR
rm ~/oneko.txt
exit

#!/bin/bash
oneko="$(pidof oneko)"
kill -15 ${oneko}
exit

#!/bin/bash
killall -TERM oneko
exit

Примечание. При отсутствии запущенных приложений при вызове Oneko курсор может отображаться в таком виде (на приводимых ниже картинках фон рабочего стола – космос со звёздами):



При выключении Oneko курсор мыши приобретёт вид:


После запуска любого приложения (например, файловый менеджер или Firefox) вид курсора мыши восстанавливается.

среда, 12 декабря 2018 г.

Сохранить выделенный текст в файл через скрипт bash


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

Сначала проведу маленькую демонстрацию.

Открываю текст (в рассматриваемом случае это файл pdf, но это может быть страница в браузере, файл Word и т.п.) и выделяю текст, который необходимо сохранить в файл.


Нажимаю на кнопку запуска, которая указывает на скрипт sh.





Перехожу в папку с сохранённым файлом и вижу, что скрипт отработал.



Правда здорово? Ну а теперь, собственно, и сам скрипт:

#!/bin/sh
out="/tmp/notes.$$"
dir="$HOME/Dropbox/Notes" # папка, в которую будут сохранятся заметки
xclip -o | zenity --width=600 --height=300 --title  "Текст заметки" --text-info --editable > "$out"
if [ $? -eq 0 -a "`cat "$out"`" != "" ]; then
  name=$(zenity --title "Название заметки" --entry --text "Введите название заметки")
  if [ $? -eq 0 ]; then
   if [ "`echo $name`" = "" ]
    then name="Заметка $$"
   fi
   cp "$out" "$dir/$name.txt"
  fi
fi
rm "$out"
exit 0

Примечание. Если скрипт должным образом не срабатывает, то, возможно, в системе отсутствует пакет xclip. Установите его командой  sudo apt install -y xclip

В свойствах значка запуска галочка в поле "Запускать в терминале" снята.


Кроме кнопок (значков) запуска можно использовать такой инструмент как autokey. Пользуюсь им в течение 7 или 8 лет и за это время мной оценено удобство назначения горячих клавиш на разные специфические операции. В Ubuntu и Linux Mint его можно установить одной командой

  sudo apt install -y autokey-gtk

В поле текст скрипта указать путь к скрипту, например:

import subprocess
subprocess.Popen(["/home/cemea/Tools/scripts/notes.sh"])

вторник, 27 ноября 2018 г.

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

Если Вы ещё не знаете про pCloud, то можете почитать эту публикацию.

pCloud для Linux предлагает приложение синхронизации для Linux в виде appimage (самую свежую версию можно взять здесь). Решение на первый взгляд простого вопроса автоматизации процесса "запуск клиента – синхронизация – выключение клиента" привело к необходимости решения нескольких задач, связанных с особенностями работы клиента pCloud. Решение приводится применительно к графическому окружению xfce.

В конечном счёте решение по автоматизации автоматизация процесса вылилось в запуск двух или трёх заданий по расписанию (см. пользовательское задание cron).

Запуск клиента pCloud

Для запуска клиента используется простой скрипт, например pcloud1.sh

#!/bin/bash
/путь_до_файла/pcloud

А команда пользовательского задания представляет из себя

export DISPLAY=:0 && /path/pcloud1.sh

path – путь до скрипта pcloud1.sh

Первоначальное добавление в pcloud1.sh строки exit (завершение pcloud1.sh) не привело к желаемому результату. В диспетчере задач наблюдалось 2 процесса:

pcloud1.sh
sh -c export DISPLAY=:0 && /path/pcloud1.sh

Чтобы pcloud1.sh "не висел" в менеджере задач был создан скрипт pcloud2.sh, запускаемые по расписанию через минуту после запуска pcloud1.sh  Скрипт представляет из себя "просьбу" завершить все имеющиеся процессы с наименованием pcloud1.sh

#!/bin/bash
killall -s TERM pcloud1.sh
sleep 1 && exit

Остановка клиента pCloud

Данный скрипт, с точки зрения его создания, явился наиболее трудоёмким, что объясняется двумя причинами.

Вопрос 1. Работа клиента стала сопровождаться несколькими процессами. Например, при запуске клиента и следующим за ним автоматическим открытием всех окон в диспетчере задач можно увидеть 6 процессов pcloud:


После закрытия основного окна клиента и экземпляра менеджера файлов, отображающего содержимое облака pCloudDrive в диспетчере задач останется 5 процессов pcloud:


Так как терминальной команды для завершения работы клиента не существует, то по аналогии с MEGA и Облако@Mail.Ru можно применить решение по "мягкому" завершению процесса pcloud по его значению pid, то есть командой kill -15 pid_pcloud

Но если запросить pid процесса pcloud, то в результате будет получено либо 6 групп цифр, соответствующих pid процессам pcloud (пример: 16129 16103 16077 16048 16036 16032), либо 5 групп (пример: 29419 29398 29352 29324 29320). Данные значения pid будут каждый раз меняться.

Количество процессов (5 или 6) зависит от того, открыты ли у Вас все окна, открываемые автоматически при запуске клиента, либо эти окна закрыты и активен только значок состояния на подставке рабочего стола (системной панели, трее).

Возникает закономерный вопрос: а какой именно процесс необходимо выключать?

Вопрос 2. При запуске клиента pCloud автоматически открываются 2 окна, одно из которых является окном клиента, а второе экземпляром файлового менеджера, соответствующего открытому каталогу pCloudDrive, содержание которого составляет контент смонтированного в него пространства облака учётной записи pCloud, например:



Если после выключения клиента pCloud окно клиента (верхний рисунок) изчезнет, то второе окно так и останется открытым. Содержимое второго окна будет пустым, так как в процессе завершения работы клиента облако pCloud было размонтировано.

Вопрос: и как его автоматически закрыть?

Примечание. Вопрос о закрытии открытого окна приложения pCloud не ставится, так как в xfce значок на панели (системном лотке, трее) отображает только состояние "синхронизировано" или "синхронизируется". Сведения о количестве загружаемых или скачиваемых файлов, а также скорости процесса отображаются в нижней части открытого окна приложения pCloud.

Отвечать на поставленные вопросы будем последовательно.

Ответ 1.  Экспериментально было установлено, что для выхода клиента pcloud необходимо выключать процесс pcloud с самым маленьким значением pid, что соответствует процессу pCloud Drive (см. диспетчер задач). Поэтому самой трудной задачей автоматизации будет являться выборка из полученных значений наименьшего pid, чтобы потом его назначить переменной.

Как оказалось, эту задачу можно решить, по крайней мере, четырьмя способами. Кроме того, "мягкое" выключение всех процессов pcloud можно осуществить командой killall c указанием имени процесса. Так как все решения, которых набирается 5, ведут к одному и тому же результату, то ниже следует их перечисление.

1 вариант:  killall -s TERM pcloud

Здесь всё понятно. Выдаётся команда на завершение всех процессов pcloud.

Следующие три способа представляют из себя ряд последовательных операций. Сначала производится получение значений pid всех экземпляров pcloud и их запись в файл (например pcloud.txt). Содержание файла представляет из себя последовательность из 5-ти или 6-ти групп цифр (см. пояснение выше). Далее "вылавливается" последняя группа (5 цифр) из полученного ряда значений pid и присваивается переменной (например VAR). Заключительное действие является выполнением команды kill -15 $VAR, что равносильно выполнению kill -15 с указанием наименьшего значения pid из файла pcloud.txt

2, 3, 4 варианты:

pidof pcloud> ~/pcloud.txt
VAR=`cat ~/pcloud.txt | grep -o [0-9]*$`
kill -15 $VAR

pidof pcloud> ~/pcloud.txt
VAR=`cat ~/pcloud.txt | awk '{print $NF}'`
kill -15 $VAR

pidof pcloud> ~/pcloud.txt
VAR=`cat ~/pcloud.txt | rev | cut -d' ' -f 1 | rev
kill -15 $VAR

Варианты 1–4 были предложены пользователи форума Linuxmint.com.ru с никами slant (2), Chocobo (3 и 4), demonlibra (1). Пользуясь случаем, хотелось бы ещё раз выразить им свою благодарность.

5 вариант

При получении списка pid процессов pcloud командой pgrep результат в файле pcloud.txt будет представлен "в столбик", то есть каждое значение pid будет располагаться в новой строке в порядке их возрастания, например:

29320
29324
29352
29398
29419

Следующим шагом будет являться присвоение переменной значения самой первой строки файла pcloud.txt

pgrep pcloud> ~/pcloud.txt
VAR=`sed -n '1p' ~/pcloud.txt`
kill -15 $VAR

Содержание файла pcloud.txt будет перезаписываться при каждом выполнении команды pidof pcloud> ~/pcloud.txt  Но если наличие этого "один раз нужного" файла слишком нервирует, то для его удаления можно добавить команду rm ~/pcloud.txt

Ответ 2.  Несмотря на кажущуюся простоту команды закрытия активного окна Thunar командой thunar -q (получена после выполнения в терминале thunar --help), в рассматриваемом случае она не срабатывает.

После рассмотрения дерева процессов обнаружено, что в перечне активных процессов имеется Thunar --daemon :


Закрыть открытое клиентом pCloud окно Thunar можно тремя способами:

а) завершить все активные процессы Thunar   killall -s TERM /usr/bin/Thunar ;

б) получить pid процесса Thunar, записать его в переменную и завершить его командой kill -15 значение_переменной

OUTPUT="$(pidof /usr/bin/thunar)"
kill -15 ${OUTPUT}

в) получить pid процесса Thunar, записать его в файл, присвоить переменной значение, полученное из чтения файла и завершить его командой kill -15 значение_переменной

pidof /usr/bin/Thunar> ~/thunar.txt
VAR2=`cat ~/thunar.txt`
kill -15 $VAR2

Содержание файла thunar.txt будет перезаписываться при каждом выполнении команды pidof /usr/bin/Thunar> ~/thunar.txt  Но если наличие этого "один раз нужного" файла слишком нервирует, то для его удаления можно добавить команду rm ~/thunar.txt

Все варианты равнозначны. Результатом их выполнения является завершение процессов thunar --daemon и Thunar (соответствует открытому окну с содержимым каталога pCloudDrive).

По вопросу "важности" процесса thunar --daemon на англоязычном форуме была найдена информация, что на функциональность Thunar и системы в целом это существенного влияния не оказывает. Единственный минус заключается в том, что без этого процесса подсоединённый съёмный носитель (например, флэшка) автоматически смонтирован будет только при открытом окне Thunar. Если никакого экземпляра Thunar не запущено, то съёмный носитель автоматически не монтируется. В этом случае придётся открыть Thunar и осуществить монтирование вручную, например:


В любом случае после очередного запуска системы thunar --daemon будет запущен автоматически


что определяется содержанием файла

/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml  (см. --daemon)

<property name="Client2_PerScreen" type="bool" value="false"/>
      <property name="Client3_Command" type="array">
        <value type="string" value="Thunar"/>
        <value type="string" value="--daemon"/>
      </property>

Итого, скрипт завершения работы клиента pCloud (например pcloud3.sh) может быть следующего содержания (выбирается один вариант и один способ):

#!/bin/bash
вариант  1, 2, 3, 4, 5
sleep 5
способ   а, б, с
sleep 5 && exit

Команда 5-секундной паузы slеep 5 была введена в целях тестирования  скрипта для наблюдения за процессами. В рабочем скрипте её можно не использовать.


Пример пользовательского задания cron для ежедневной 40-минутной автоматической синхронизации с облаком pCloud с 21:40 до 22:20

40 21 * * * export DISPLAY=:0 && /home/user/Tools/scripts/pcloud1.sh
41 21 * * * /home/user/Tools/scripts/pcloud2.sh
20 22 * * * /home/user/Tools/scripts/pcloud3.sh

Если ограничиться только скриптами запуска и выключения, то есть pcloud1.sh и pcloud3.sh, то скрипт pcloud3.sh должен выключать pcloud c процессом pid не наименьшим, а на единицу больше, то есть из полученного ряда значений, например,

28354 28355 28359 28371 28399 28426 28449 28684 ,

должно быть выбрано второе (28355). Объясняется тем, то 28354 соответствует активному скрипту pcloud1.sh.

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

pgrep pcloud> ~/pcloud.txt
VAR=`sed -n '2p' ~/pcloud.txt`
kill -15 $VAR

Тогда пользовательское задание приобретает вид, например:

40 21 * * * export DISPLAY=:0 && /home/user/Tools/scripts/pcloud1.sh
20 22 * * * /home/user/Tools/scripts/pcloud3.sh