понедельник, 27 ноября 2023 г.

Перекодировать flac в mp3

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

Создаётся сценарий sh и кнопка запуска, указывающая на созданный сценарий. 

Сценарий (скрипт sh)

#!/bin/bash
dir=$(zenity --file-selection --directory)
find "$dir" -name "*.flac" -exec ffmpeg -i {} -acodec libmp3lame -ab 320k {}.mp3 \;
find "$dir" -name "*.flac" -exec rm {} \;
find "$dir" -name '*.flac.mp3' -exec sh -c 'mv "$0" "${0%.flac.mp3}.mp3"' {} \;

Что он делает:
1. Запрашивает папку расположения файлов flac.
2. В указанной папке рекурсивно перекодирует файлы flac в файлы формата mp3 с указанным битрейтом. В данном примере битрейт указан как 320k. Укажите желаемую вами степень сжатия (например, 196k).
3. Удаляются все исходные файлы с раcширением flac
4. Поскольку перекодированные в формат mp3 файлы имеют расширение flac.mp3, то осуществляется переименование их расширения в mp3

Кнопка запуска представляет собой файл вида .desktop (пример создания здесь). 

Пример содержания файла .desktop кнопки запуска:
[Desktop Entry]
Version=1.0
Type=Application
Name=flac-mp3
Comment=
Exec=/home/minter/Tools/scripts/modules/flac-mp3.sh
Icon=audio-x-flac
Path=
Terminal=true
StartupNotify=false

После создания кнопки запуска переместите её с рабочего стола в папку своего профиля ~/.local/share/applications  После этого созданная кнопка запуска будет отображаться в главном меню в разделе "Прочее", "Разное" или ей подобной (зависит от дистрибутива). Если есть необходимость её отображения в разделе "Мультимедиа", то откройте созданную вами кнопку в текстовом редакторе, например,

xed /home/ваш_профиль/.local/share/applications/ваша_кнопка.desktop

в впишите в него строку  Categories=AudioVideo;Audio;

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

суббота, 25 ноября 2023 г.

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

Про автоматическое монтирование дисков при старте системы имеется достаточное количество материалов. Но в большинстве случаев такие решения сводятся к внесению изменений в файл /etc/fstab. У меня же возникла необходимость выдачи запроса на монтирование дисков. При положительном ответе "да" диски будут смонтированы, при отрицательном "нет" монтирование производится не будет. 

Обусловлено личными потребностями, так как упоминаемые диски могут быть временно изъяты из компьютера и при обычном автомонтировании через /etc/fstab система будет на некоторое время сильно задумываться, пока не сообразит, что упоминаемых дисков не имеется и загрузка может быть продолжена.

Для удобства целесообразно создать стартовый сценарий, например, start.sh, который будет автоматически выполняться при каждом входе пользователя в систему. То есть, создать файл и установить его в автозагрузку. В Linux xfce это настраивается в Система/Сеансы и запуск, а в Cinnamon – Параметры/Автозагрузка. 

 #!/bin/bash
...
...
exit

Создаются 2 файла sh, которые собственно и командуют монтирование дисков. При этом каждый диск у меня идетифицируется не как /dev/sd... , а по своему uuid. Связано с тем, что при обратной установке шлейфы могут быть воткнуты не туда где были раньше, то есть порядок определения дисков по /dev/sd... может быть перепутан. А так как мои диски монтируются в папки AG-2 и AN-2 моего домашнего каталога, то не хочется быть удивлённым тому, что содержание данных папок потом будет не таким, как было раньше. uuid дисков определяется через команду 

sudo blkid

Для 1-го диска файл  mount-g2.sh

#!/bin/bash
mount --uuid="c57e4566-84ed-4d54-8cd4-1e0eaeac5b4e" /home/minter/AG-2 &
exit

Для второго диска файл mount-n2.sh

#!/bin/bash
mount --uuid="b72b0384-9782-4eaf-9606-ca48469ef6da" /home/minter/AN-2 &
exit

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

sudo xed /etc/sudoers и внести строки (пример):

minter ALL=NOPASSWD: /home/minter/Tools/scripts/modules/mount-g2.sh
minter ALL=NOPASSWD: /home/minter/Tools/scripts/modules/mount-n2.sh

minter – это мой логин в системе.

Создаются 2 файла запросов на монтирование каждого из дисков. Пример приводится для 1-го диска (для второго будет аналогично):

#!/bin/bash
log=/home/minter/Документы/Reports/$(date '+%d').txt
zenity --width=150 --height=50 --question --timeout=10 --title="Запрос" --text="\nМонтировать G-2? \n$task" \
--ok-label="Нет" \
--cancel-label="Да"
answer=$?
if [ "$answer" -eq 0 ]; then
    :
    echo "$(date '+%H.%M.%S') – G-2 not mounted" >> $log
    echo "0" >> /tmp/mount1.txt
elif [ "$answer" -eq 1 ]; then
    sudo /home/minter/Tools/scripts/modules/mount-g2.sh
    echo "$(date '+%H.%M.%S') – G-2 mounted" >> $log
    echo "1" >> /tmp/mount1.txt
elif [ "$answer" -eq 5 ]; then
    sudo /home/minter/Tools/scripts/modules/mount-g2.sh
    echo "$(date '+%H.%M.%S') – G-2 mounted" >> $log
    echo "1" >> /tmp/mount1.txt
fi
exit 0

Если не нужно вести протокола и записывать результат "смонтировано" или "не смонтировано" в файлы /tmp/mount...txt, то строку log= и начинаются с echo  строки можно удалить. Мне они нужны для протоколирования отработки стартового сценария в целом, а также процедур по автоматической очистке Корзин на монтируемых дисках с удалением из них всех объектов (папки и файлы) старше 3 суток.

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

sudo /home/minter/Tools/scripts/modules/mount-g2.sh

Если выбрано "Нет", то монтирование диска не производится.

В start.sh вносятся команды с запросами монтирования с интервалом между ними 5 секунд и 5-секундным интервалом после запроса на монтирование 2-го диска. Интервал в 5 секунд необходим для того, чтобы окно запроса на монтирование 2-го диска не перекрывало окно запроса на монтирование 1-го диска. Вспомним, что система ожидает решения пользователя 10 секунд.

sleep 5
$do/modules/querry-mount-g2.sh
sleep 5
$do/modules/querry-mount-n2.sh
sleep 5

И, собственно, результат:


четверг, 23 ноября 2023 г.

Создание в меню кнопки запуска для приложения Cozy Drive

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

Что такое облако Cozy на русском можно прочитать здесь.

Откройте текстовый редактор и впишите в него следующее (пример):

[Desktop Entry]
Name=Cozy Drive
Comment=Cozy Drive cloud client
Exec=/home/minter/Tools/Cozy-Drive-3.39.0-x86_64.AppImage
Terminal=false
Type=Application
Icon=emblem-cozy-drive-1
Categories=Network;

В строке Exec= указывается полный путь файла AppImage.

В строке Icon= указывается имя значка для приложения.

Сохраните этот файл с расширением .desktop  

Переместите его в папку вашего профиля ~/.local/share/applications

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


Как это выглядит у меня в папке ~/.local/share/applications~/.local/share/application и в меню:



Набор из трёх эмблем для папок (размеры 16, 22, 24, 32, 48) можно взять здесь.

Создайте две папки в своём профиле:

mkdir /home/ваш_профиль/.local/share/icons

mkdir  /home/ваш_профиль/.local/share/icons/gnome

Поместите содержимое скачанного архива в папку /home/ваш_профиль/.local/share/icons/gnome

Скопируйте в папку gnome своего профиля 2 нужных файла:

cp /usr/share/icons/gnome/icon-theme.cache /home/ваш_профиль/.local/share/icons/gnome

cp /usr/share/icons/gnome/index.theme /home/ваш_профиль/.local/share/icons/gnome

Выполните в терминале обновление кэша значков для своего профиля:

gtk-update-icon-cache /home/ваш_профиль/.local/share/icons/gnome/