суббота, 18 сентября 2021 г.

Dukto на Linux Mint 20

В настоящее время проект Dukto автором закрыт. Но в своё время работа с этим инструментом мне настолько понравилась, что долгое время после прекращения его сопровождения автором меня посещали сожаления о невозможности установить Dukto на Linux Mint 20 из сохранённого ранее пакета deb.

Главной причиной поиска возможности запуска Dukto на Linux Mint 20 является невозможность установить на электронную читалку Ritmix с ОС Android 4 программы Warpinator, так как для установки Warpinator требуется Android 5. 

Однако не так давно было найдено решение о своего рода реинкарнации программы Dukto на Linux Mint 20. Оказалось, что версия Dukto для Linux использует элементы Qt4, который уже в более новых версиях Linux Mint был заменён на Qt5. 

Добавление Qt4 осуществляется командой:

sudo add-apt-repository -y ppa:rock-core/qt4 && sudo apt update && sudo apt upgrade

Далее следует собственно установка Dukto либо из сохранённого пакета deb (скачать), либо  его установка из репозитория OpenSUSE (если ещё доступно):

wget -nv -c http://download.opensuse.org/repositories/home:/colomboem/xUbuntu_16.04/amd64/dukto_6.0-1_amd64.deb -ODukto.deb && sudo gdebi -n Dukto.deb

При установке Dukto будут также добавлены и необходимые пакеты Qt4:



Так как для мобильных устройств в Google play утилита Dukto отсутствует (проект закрыт), то скачайте найденный мной когда-то файл apk и установите Dukto через файл apk.

Если не получается передать файл apk на устройство по USB, но имеется возможность подключения к Интернет, то попробуйте передать его через облако, зарегистрировав аккаунт в Dropbox, pCloud либо Koofr

Для установки на Windows используйте Dukto для Windows (скачать exe).

Значок запуска Dukto расположен в категории "Прочее" главного меню.

Чтобы передавать и получать файлы между устройствами Dukto должен быть запущен на каждом из устройств, принимающих участие в обмене файлами и папками.


Настройки Dukto (Settings)



Для изменения папки (каталога) получаемых файлов нажмите "Change folder".
Для изменения цветового оформления двигайте ползунок и кружок или выберите тему из набора.

Чтобы передать файлы/папки на устройство необходимо щёлкнуть по нему два раза мышкой (на рисунке ниже User at RBK 497):



После этого указать для передачи файл(ы) – Send some files или папку (папки с файлами) – Send a folder:


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

пятница, 10 сентября 2021 г.

Адаптер wifi usb теряет связь с роутером по случайному закону

Проблема возникла при использовании на Linux подключаемого по usb wifi адаптера Realtek r8188eu (производства КНР) и роутера MikroTik 931-2nD r2. Сначала под подозрением оказался сам роутер MikroTik. Впоследствии выяснилось, что он "не виновен". Далее под подозрение попало устройство Realtek r8188eu в привязке именно к рассматриваемому компьютеру. Аналогичные r8188eu, подключаемые к другим компьютерам Windows и Linux, "вели себя" штатно.

Внешнее проявление выражалось в пропадании в какой-то момент времени связи с Интернет. При этом сам значок сетевого соединения на панели наличие соединения по wifi показывал, информация об IP-адресе и скорости соединения с точкой wifi присутствовала. Но команда ping роутера приводила к отрицательному результату, хотя ping своего IP-адреса,  полученного от DHCP роутера, выдавал положительный ответ. 

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

Было обнаружено, что если через значок менеджера сетевых соединений выключить и затем снова включить либо поддержку сети, либо Wi-Fi, связь компьютера с роутером восстанавливается.

Может быть сам r8188eu оказался немного дефектным, может быть он не совсем "дружит" с конкретным железом, может быть требуется осуществить ряд тонких настроек точки wifi роутера – это вопросы теоретических изысканий и долгого разбирательства. А причин может быть, как говорят, воз и маленькая тележка. Поэтому было принято решение оттолкнуться от результата выключения/включения поддержки сети и сделать такие действия выполняемыми автоматически при условии пропадания соединения с роутером. 

✔  Примечание. Решение было создано для своих нужд и не претендует как на корректность реализации, так и на изящность кода команд на bash.

Проверка состояния "видимости" роутера

✔  Примечание. Так как для запуска инструмента управления роутером MikroTik – winbox – в Linux требуется установка дополнительного ПО wine, то для управления роутером используется доступ через браузер и на MikroTik запущена служба www, хотя из соображений безопасности её не всегда рекомендуется использовать. Однако поскольку доступ к роутеру по www ограничен конкретной сетью (192.168.190.0/28), то её включение на MikroTik было сочтено приемлемым.

Сам роутер через DHCP выдаёт домен vot и в DNS имеет запись router.vot  Поэтому был создан сценарий, запускаемый через cron каждые 20 минут, который при отсутствии ответа от узла router.vot выполняет какое-то действие:

#!/bin/bash
echo -e "GET http://router.vot HTTP/1.0\n\n" | nc router.vot 80 > /dev/null 2>&1
if [ $? -eq 0 ]; then
     :
  else
     действие
fi
exit

Для внесения в cron задания выполните в терминале команду 

crontab -e

впишите новую строку

*/20 * * * * путь к сценарию sh

осуществите перевод каретки на новую строку и сохраните внесённые изменения.

✔  Примечание.  Если сценарий дополнить записью результата проверки в протокол, то получится, например:

#!/bin/bash
day=`date '+%d'`
log=/home/minter/Reports/system/$day.txt
echo -e "GET http://router.vot HTTP/1.0\n\n" | nc router.vot 80 > /dev/null 2>&1
if [ $? -eq 0 ]; then
  :
else
  echo "$(date '+%H.%M.%S') -- wifi is not active" >> $log
fi
exit

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

13.00.12 -- wifi is not active

Действия при отсутствии ответа от роутера

К сожалению, планировавшиеся изначально остановка и последующий запуск сети к желаемому результату не привели:

/etc/init.d/networking stop

/etc/init.d/networking up

Поэтому было решено выключать wifi, а затем включать его снова.

Требуется указание на конкретную wifi, которое и было получено из ifconfig (или iwconfig). В моём случае этим wifi явилось устройство wlx000b819543a2 

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

Действия выполняются по сценарию sh:

#!/bin/bash
ifconfig wlx000b819543a2 down
sleep 20
ifconfig wlx000b819543a2 up
exit

который необходимо запускать под правами root.

Чтобы пароль не запрашивался, через команду sudo xed /etc/sudoers в файл sudoers была внесена строка:

minter ALL=NOPASSWD: путь с сценарию sh

minter – это моё имя пользователя в системе.

Итог

#!/bin/bash
day=`date '+%d'`
log=/home/minter/Reports/system/$day.txt
echo -e "GET http://router.vot HTTP/1.0\n\n" | nc router.vot 80 > /dev/null 2>&1
if [ $? -eq 0 ]; then
  :
else
  echo "$(date '+%H.%M.%S') -- wifi is not active" >> $log
  sudo /home/minter/Dropbox/scripts/modules/connect-net.sh
  echo "$(date '+%H.%M.%S') -- wifi restarted" >> $log
fi
exit

connect-net.sh – это сценарий перезапуска wifi

log – это файл протокола, из которого будет понятно в какое примерно время с точностью до 20 минут пропала связь с роутером.

✔   Примечание.  При тесте перезапуска wifi значок состояния сети на панели не изменялся. 

При тестировании сценария перезапуска wifi в логах роутера были получены записи:

00:0B:81:95:43:A2@wlan: disconnected, received deauth: sending station leaving (3)
00:0B:81:95:43:A2@wlan: connected, signal strength -58

Через 2 часа после публикации данной заметки состоялось практическая проверка реализации предложенного решения. Из протокола работы системы:

17.20.12 -- no wifi exists
17.20.12 -- wifi is not active
17.20.33 -- network restarted

Из лога MikroTik:

Sep/10/2021 17:06:13
00:0B:81:95:43:A2@wlan: disconnected, extensive data loss
Sep/10/2021 17:20:35
00:0B:81:95:43:A2@wlan: connected, signal strength -54

После этого связь с Интернет была восстановлена.

пятница, 3 сентября 2021 г.

Пакетное преобразование аудиокниг mp3 в формат ogg с заданным битрейтом


Возникла необходимость уменьшения размера аудиокниг. Как правило, аудиокниги распространяются в формате mp3 с битрейтом 128 и более. Вследствие этого зачастую одно произведение может достигать размеров в среднем 500-600 Мб.

Экспериментальным образом выяснено, что если такие произведения преобразовать с формат ogg с битрейтом 16, который мне показался вполне достаточным для нормального прослушивания речи, то можно получить выигрыш в размерах произведений в несколько раз. Строго фиксированное значение указать сложно, но в среднем оно у меня достигало величин в 6-10, а то и более раз. В частности, конвертация 50-минутного произведения Альфреда Бестера "Кто-то там наверху меня любит", представленного исходным файлом mp3 128 кбит/с размером в 120 Мб позволила получить на выходе вполне комфортно воспринимаемый на слух файл ogg размером в 6,5 Мб.
 
Для преобразования вам понадобится пакет ffmpeg, который можно установить командой  sudo apt install -y ffmpeg   

Сама команда для преобразования имеет вид:
 
ffmpeg -i file.mp3 -b:a 16k -acodec libopus file.ogg
 
На первых порах через особое действие в правом контекстном меню оболочки XFCE она мной использовалась как действие для каждого файла с выводом уведомления о том, что файл ogg готов:

ffmpeg -i %f -b:a 16k -acodec libopus %f.ogg && zenity --width=130 --height=50 --info --text "\nogg ready" 2>/dev/null

Однако неудобство заключалось в том, что результирующие файлы имели расширение mp3.ogg, что приводило к необходимости переименования их расширения в ogg вручную, а также то, что исходные файлы mp3 также приходилоcь удалять вручную.

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

1) указывается папка с файлами mp3, которые необходимо преобразовать;

2) осуществляется поиск в указанной папке файлов mp3 и каждый найденный фал преобразовывается в формат ogg;

3) после преобразования исходные файл mp3 удаляются;

4) расширение файлов mp3.ogg приводится к виду ogg.

Текст сценария:

#!/bin/bash
dir=$(zenity --file-selection --directory)
find "$dir" -name "*.mp3" -exec ffmpeg -i {} -b:a 16k -acodec libopus {}.ogg \;
find "$dir" -name "*.mp3" -exec rm {} \;
find "$dir" -name '*.mp3.ogg' -exec sh -c 'mv "$0" "${0%.mp3.ogg}.ogg"' {} \;

В XFCE можно создать значок запуска, присвоив ему какую-либо картинку, например:


и запускать его через команду "Выполнить" правого контекстного меню мыши. Либо для такого сценария sh добавить на панель элемент "Запуск приложений", впоследствии указав в нём путь к файлу sh и отображаемый значок.

В процессе преобразования сценарий может осуществлять преобразование файлов не последовательно, а по ему одному известной  😀  очерёдности, что, впрочем, никак не влияет на функциональность. Ход процесса отображается в окне терминала:


Если sh запускался не по команде в окне терминала, а по кнопке запуска, то после завершения всех процессов окно терминала будет закрыто. В папке с файлами аудиокниги будут присутствовать только файлы ogg.

четверг, 2 сентября 2021 г.

Пакетное преобразование mp3 в ogg

Пакет dir2ogg является сценарием Python, расписывающим порядок совместной работы различных программ – раскодировщиков и кодировщиков ogg, что позволяет облегчить работу ему или ей по преобразованию своих музыкальных файлов в другой формат. dir2ogg преобразовывает файлы MP3, M4A, WMA, FLAC, и WAV в открытый формат OGG. Сайт автора – https://jak-linux.org/projects/dir2ogg 

Для установки dir2ogg в систему выполните в терминале команду

 sudo apt install -y dir2ogg

Моё знакомство с dir2ogg состоялось в ходе поисков инструмента для пакетного преобразования аудиокниг mp3 в файлы c более низким чем оригиналы битрейтом. И хотя dir2ogg мою проблему решить не смог (вследствие наиболее низкого битрейта на выходе – 80) сам по себе представляет интересное решение, к тому же работающее весьма шустро.

Использование dir2ogg описывается короткой справкой, которую можно получить по команде терминала dir2ogg --help

Для конвертации всех файлов mp3 в выбранной папке папке можно использовать команду:

dir2ogg -d "$(zenity --file-selection --directory)" -q N

N является цифрой, которая укажет с каким битрейтом осуществлять процесс перекодирования. К сожалению, в справке по пользованию это соответствие не приводится. Указывается только, что диапазон N составляет от 1 до 10, а значение по умолчанию равно 3. Соответствие значений N битрейту пришлось выяснять экспериментально:

  1 – 80
  2
96
  3
112
  4
128
  5
160
  6
192
  7
224
  8
256
  9
320
10
499

Пример работы dir2ogg указан на рисунке ниже: