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

Особенности установки Koodo Reader в Ubuntu и Linux Mint

Установка читалки электронных книг Koodo Reader была обусловлена тем, что в имеющемся аналогичном ПО fbreader из источников приложений Linux Mint у меня не функционирует перелистывание страниц по клавише пробел, перелистывание возможно лишь клавишей "вниз". Другая читалка Foliate не непонятным причинам имела свойство часто притормаживать, а затем просто закрываться.

Предыдущий опыт установки Koodo Reader был признан неудачным в силу того, что в интерфейсе программы отсутствовало отображение настроек. Но вчера была найдена информация, что перед установкой Koodo Reader в Ubuntu и Ubuntu-подобных дистрибутивах необходимо установить компонент libappindicator3-1 (sudo apt install libappindicator3-1).

После установки libappindicator3-1 и запуска пакета deb проявился "сюрприз": gdebi сообщил, что установленные у меня autokey-gtk и transmission-gtk в процессе установки будут автоматически удалены. Справедливости ради следует отметить, что установленное ПО Koodo Reader запустилось без нареканий и настройки программы отобразились должным образом:


Так как, похоже, transmission и autokey версии gtk с Koodo Reader "не дружат", то при необходимости их использования установите их версии qt: 

sudo apt install autokey-qt transmission-qt

К слову, transmission-qt в диспетчере задач показал расход ресурсов, сопоставимый с его конкурентом qbittorrent. Поэтому, если если желание, то можно, не устанавливая transmission версии qt, сразу установить qbittorrent. 

🔰  Примечание. В системе остаются не удалёнными компонент transmission-common, а также данные, относящиеся к работе этого клиента. Их можно удалить одной командой:

sudo apt purge transmission-common && rm -Rf /home/user/.cache/transmission  && rm -Rf /home/user/.config/transmission

где user указывает на домашнюю папку пользователя. Вместо user указать свой логин.

Если в интерфейсе transmission-qt или qbittorrent у вас наблюдаются слишком большие буквы, то укажите наиболее подходящий для вас шрифт в настройках Qt5, например:


Если у вас не отображается значок qbittorrent на нижней панели, то отредактируйте файл environment (sudo xed /etc/environment), вписав в него строку:

export QT_QPA_PLATFORMTHEME=gtk2

вторник, 19 декабря 2023 г.

Boinc 7.20.5 в Linux Mint 21 (Ubuntu 22.04)

Результат установки и запуска имеющегося в комплекте поставки Linux Mint 21 (Ubuntu 22.04) ПО Boinc 7.18 может привести к лотерее: запустится, не запустится. Поиск в сети выдаёт информацию, что версия 7.18 является своего рода "сырой" и однозначного решения заставить её работать не существует. В одном из случаев даже пришлось запускать Boinc через wine.

Интересно, что на одном из форумов была найдена информация о существовании неофициального РРА для Boinc 7.20.5  Попробуем его установить и запустить.

sudo add-apt-repository -y ppa:costamagnagianfranco/boinc
sudo apt update 
sudo apt install -y boinc

Результат выполненная в терминале команды boincmgr выдаст, что BOINC не является активным, то есть ПО не запущено. Поскольку ситуация уже известная, то его можно запустить вручную и установить автоматический запуск службы boinc при старте системы. Как это сделать читайте здесь.

Далее возникает ситуация из области юмора.  😁 
Ожидание: вот оно, счастье то.
Реальность: а вот нет, снова опыт.


Но "счастье", всё-таки, существует. Потому что выполненная в терминале команда boincmgr выдаёт то, что и ожидалось, то есть должным образом функционирующее ПО.

В результате недолгих размышлений было принято решение предпринять попытку подправить команду запуска BOINC Manager в меню. Если имеется возможность отредактировать значок запуска в GUI, как, например, в xfce, то в строке "Рабочая папка" убираем запись /var/lib/boinc-client, то есть приводим эту строку к пустому значению.


Нажимаем кнопку сохранения внесённых изменений. Если увидите предупреждение типа указанного ниже, то не обращайте на него внимания и просто нажмите кнопку "Закрыть".


Проверьте теперь запуск BOINC Manager через меню. BOINC Manager должен отобразиться.

Если описанной возможности не имеется, то в своём домашнем каталоге ~/.local/share/applications создайте файл значка запуска boinc-manager.desktop с правом выполнения как программы и содержанием:

[Desktop Entry]
Version=1.1
Type=Application
Name=BOINC Manager
GenericName=BOINC monitor and control utility
Comment=Configure or monitor a BOINC core client
Icon=boincmgr
Exec=boincmgr
Actions=
Categories=GTK;Monitor;System;
Keywords=computation;science;

Любопытно, что в системе будет иметься 2 значка запуска BOINC Manager. Один расположен в папке /usr/share/applications, а второй – в вашем домашнем каталоге ~/.local/share/applications  Сравните их содержание. Можно заметить, что в значке запуска вашего домашнего каталога отсутствует строка  Path=/var/lib/boinc-client 

Бонусом к установленному из PPA Boinc 7.20.5 идут 5 обложек, посмотреть которые можно через "Вид – Обложка". Можно подобрать ту, которая вам понравится. У меня, например, такая:

пятница, 15 декабря 2023 г.

Исправление в Linux Mint 21 (Ubuntu 22.04) – systemd timesync не понимает серверы NTP от DHCP

В различных материалах, посвящённых синхронизации времени через systemd, можно найти утверждение, что если сервер DHCP выдаёт адрес сервера NTP, то время будет синхронизироваться именно по этому источнику, так как имеет приоритет над настройками в строках NTP= и FallbackNTP= конфигурационного файла /etc/systemd/timesyncd.conf  Это было отмечено как примечание в публикации "Переключение синхронизации времени в Linux Mint xfce на systemd" и это же утверждает русскоязычный источник interface31.ru 

К сожалению, лично у меня реальное состояние дел опровергло данное утверждение. Несмотря на то что сервер DHCP выдавал 2 адреса серверов NTP, синхронизация времени велась либо от серверов NTP в настройках файла  timesyncd.conf, либо от сервера ntp.ubuntu.com, когда данный файл был приведен в "исходное" состояние, которое он имеет после установки системы:

[Time]
#NTP=
#FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

Имеется два варианта "заставить" компьютер синхронизировать своё время от серверов NTP, адреса которых предоставляет сервер DHCP:

1) перевести синхронизацию времени с systemd на ntp (подробности);

2) использовать корректирующий скрипт. 

Корректирующий скрипт был найден на этом ресурсе.

Под правами root создаётся файл 10-update-timesyncd

sudo xed /etc/NetworkManager/dispatcher.d/10-update-timesyncd

с содержанием:

#! /usr/bin/bash
[ -n "$CONNECTION_UUID" ] || exit
INTERFACE=$1
ACTION=$2
case $ACTION in
    up | dhcp4-change | dhcp6-change)
        [ -n "$DHCP4_NTP_SERVERS" ] || exit
        mkdir -p /etc/systemd/timesyncd.conf.d/
        cat<<EOF > /etc/systemd/timesyncd.conf.d/$CONNECTION_UUID.conf
[Time]
NTP=$DHCP4_NTP_SERVERS
RootDistanceMaxSec=15
EOF
        systemctl restart systemd-timesyncd
       ;;
    down)
        rm -f /etc/systemd/timesyncd.conf.d/$CONNECTION_UUID.conf
        systemctl restart systemd-timesyncd
        ;;
esac

и установленным правом на выполнение (как программы).

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

При проведении проверки мой DHCP сервер (в локальной сети) предоставлял серверы NTP 194.158.196.171 и 194.158.196.172  При запросе состояния синхронизации времени  timedatectl timesync-status  был получен ответ:


Информацию о серверах NTP от DHCP systemd-timesync берёт из созданного файла /etc/systemd/timesyncd.conf.d/$CONNECTION_UUID.conf  
В моём случае это был файл  61ba6df5-3c5b-3075-8e05-993158de5fb4.conf с содержанием:

[Time]
NTP=194.158.196.171 194.158.196.172
RootDistanceMaxSec=15

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

Если у вас имеется свой локальный сервер NTP, то можно либо настроить перенаправление на него всех запросов по udp порт 123 (пример для MikroTik), либо в DNS создать псевдонимы для нужных серверов NTP. Если в DNS создать псевдоним для ntp.ubuntu.com, то даже при всех закомментированных строках файла timesyncd.conf своё время компьютер будет синхронизировать с локальным сервером NTP. Пример:

      Server: 192.168.224.81 (ntp.ubuntu.com)
Poll interval: 17min 4s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 3
    Reference: 1F82C802
    Precision: 123us (-13)
Root distance: 24.932ms (max: 5s)
       Offset: -13.038ms
        Delay: 412us
       Jitter: 5.028ms
 Packet count: 5
    Frequency: -45,227ppm

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

Клиент Filezilla – выключить отображение скрытых файлов и папок

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


Чтобы убрать отображение скрытых файлов и папок вызовите в верхнем меню "Вид – Фильтры построения списка каталогов" и установите галочку в полях "Configuration files. В результате испытаете "чувство глубокого удовлетворения" 😁 


пятница, 8 декабря 2023 г.

Кнопка запуска пакетной передачи папок и файлов через rclone

Цель: передавать данные (файлы и/или папки с файлами) на облачные ресурсы через rclone c помощью вызова кнопки запуска приложения.

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

Необходимые условия:
1) папка, откуда будут передаваться данные;
2) установленное и соответствующим образом настроенное ПО rclone;
3) сценарий для указания адреса передачи в синтаксисе rclone (скрипт bash);
4) сценарий запуска передачи (скрипт bash);
5) собственно сама кнопка запуска.

Сценарий для указания адреса передачи в синтаксисе rclone

#!/bin/bash
out=/tmp/to.txt # файл, в который будет записан адрес передачи
zenity --width=200 --title "Cloud" --text="Адрес в формате rclone:" --entry > $out
exit


Пример ввода адреса в формате rclone: ydn1:Audio
Если в адресе имеются вложенные папки, то, к примеру, ydn1:Audio/папка1/папка2 
Если адрес имеет пробелы, то вводимые данные берутся в кавычки: "адрес"

Сценарий запуска передачи (пример)

#!/bin/bash
/home/minter/Tools/scripts/modules/what-cloud.sh
rclone move --delete-empty-src-dirs --progress /home/minter/Документы/Send $(cat /tmp/to.txt)
exit

$(cat /tmp/to.txt) подставляет в строку команды считанное из файла /tmp/to.txt значение адреса передачи.

Строка move --delete-empty-src-dirs --progress указывает rclone, что должно быть осуществлено перемещение данных в облако (со всей иерархией папок), а оставшиеся после перемещения данных пустые папки должны быть удалены. При этом передача будет сопровождаться отображением хода процесса, например:


Кнопка запуска приложения

На рабочем столе создаётся значок запуска (xfce), либо кнопка запуска (Cinnamon), в которой указывается вызов сценария запуска (передачи), в параметрах которой указано выполнение в терминале. Созданный значок запуска (кнопку запуска) переместите в свою папку ~/.local/share/applications  Значок/кнопка запуска представляет из себя исполняемый файл .desktop, который можно редактировать в текстовом редакторе. Пример:

[Desktop Entry]
Version=1.0
Type=Application
Name=Upload
Comment=
Exec=/home/minter/Tools/scripts/modules/upload.sh
Icon=mintupload
Path=
Terminal=true
StartupNotify=false

По умолчанию, значок/кнопка запуска будет отображаться в категории "Прочее" (xfce) или "Прочие" (Cinnamon). Для указания другой категории добавьте в файл строку Categories= , в которой после знака равенства укажите необходимые значения. Например, для "Разработка" (xfce) или "Программирование" (Cinnamon) это будет иметь вид Categories=GTK;Development; , а для категории "Интернет" – Categories=Network;

Если надо, чтобы кнопка отображалась по-русски, то добавьте строку Name[ru]= и после знака равенства напишите русский текст, например, Передача файлов (без кавычек).

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

четверг, 7 декабря 2023 г.

Запуск Boinc в Wine

Запуск Boinc в Wine обусловлен ситуацией, при которой установленное из официального репозитория Linux Mint 21.2 ПО Boinc принципиально отказывается штатно функционировать. Ранее уже наблюдались проблемы с запуском Boinc в Linux Mint 21, но при установке Boinc на свежую систему Linux Mint 21.2 даже включение службы в автозапуск не даёт результата: всё сбрасывается в дамп.

Необходимость Boinc обусловлена невозможностью отключить автопарковку головок в "злочастном" винчестере Toshiba MQ01ABD050 (AX002K), к которому отсутствует необходимая утилита от производителя для выключения автопарковки в прошивке контроллера этого жёсткого диска. Если не добиваться выключения парковки, то значение параметра 193 SMART будет расти настолько быстрыми темпами, что за год-два интенсивной работы на компьютере может достигнуть значений в 300 тысяч, что уже может являться пределом жизненной стойкости механизма позиционирования головок диска.

Было принято решение попробовать запускать ПО Boinc через Wine. 

1. Устанавливается WineHQ по инструкции с сайта.

2. Скачивается и устанавливается ПО Boinc для Windows с сайта проекта Boinc

В секции Windows 64 bit имеется 2 варианта нужного ПО: Вownload BOINC + VirtualBox и просто Вownload BOINC (файл exe). Было выбрано второе, так как интересующий проект Boinc для своей работы не предъявляет требований к наличию ПО виртуальной среды. При запуске установки через Wine система установит нужный для работы ПО Boinc в Wine отсутствующий компонент Mono.

Запуск производится через главное меню, секция Wine – BOINC Manager. 



3. Далее необходимо включить BOINC в автозагрузку Linux. Это обусловлено тем, что процесс вычислений в Liknux при работе в Wine не начинается. Запуск работы производится именно через BOINC Manager, подтверждением чему служит то, что процесс boinc.exe запускается следующим образом:

C:\Program Files\BOINC\boinc.exe --redirectio --launched_by_manager

Файл .desktop, при вызове которого будет запущен BOINC Manager расположен не в корне папки пользователя ~/.local/share/applications, а вложен в дочерние папки:


Для автозапуска BOINC Manager при старте системы указанный на рисунке файл .desktop необходимо скопировать в папку пользователя ~/.config/autostart 



Только тогда запись BOINC Manager появится в списке загружаемого ПО при старте системы. Если использовать графическое окружение Cinnamon, то при этом можно установить и желаемую задержку автостарта (до 99 секунд), например:



После старта BOINC Manager (в Wine) можно нажать на крестик закрытия окна, после чего ПО будет работать в фоновом режиме с отображением значка на панели (на рисунке крайний слева):



Проект BOINC воспринимает такую реализацию как компьютер с Microsoft Windows. Отображаемая версия Windows берётся из настройки Wine (winecfg): Приложения – Версия Windows.  

Решение, конечно, "так себе", но времени разбираться с причинами невозможности работы штатного ПО Boinc времени не было. На многих сайтах говорится о том, что версия 7.18, которая используется в Ubuntu 22.04 (Linux Mint 21) является "сырой" или частично работоспособной. Установка предыдущей версии 7.16 в системе может оказаться невозможной, а версия 7.20 может появиться в официальных источниках приложений, а может и не появиться вплоть до следующего релиза ОС. Так что пока вот так. Может кому и пригодится.

По большому счёту пора бы и заменить этот упоминаемый в самом начале винчестер на что-либо другое, но покупка SSD аналогичной ёмкости в ближайшее время не планируется. Системный блок представляет из себя мини-бокс в безвентиляторном исполнении, АКБ отсутствует. Так что он больше относится к стационарному системному блоку, несмотря на ноутбучные комплектующие.

📗  Примечание. Как вариант, можно попробовать Boinc 7.20.5 из неофициального PPA.

понедельник, 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/

воскресенье, 1 октября 2023 г.

Исключение из синхронизации Syncthing файлов в папке. Файл stignore

При использовании в Windows стороннего ПО по назначению значков на папки всё, на первый взгляд, выглядит красиво:


Но эта "красота неописуемая" может быть моментально разрушена пользователем Syncthing, у которого используется Linux, а одна из указанных выше покрашенных папок назначена в синхронизацию через Syncthing. Дело в том, что за отрисовку таких папок отвечают файлы desktop.ini и, не обязательно, но в описываемом случае это имеет место, файлы с расширением ico. Если в Windows данные файлы являются скрытыми и по умолчанию в папке не отображаются, то в Linux они будут показаны явно. Ниже пример для папки WL-1 (см. рис. выше), которая через Syncthing синхронизируется с компьютером под управлением Linux:


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

Чтобы избежать такой ситуации в Windows создайте в синхронизируемой через Syncthing папке специального файла игнорирования .stignore (начинается с точки и расширения не имеет) и впишите в него нужные файлы. Сохраните и закройте текстовый редактор. В свойствах файлы укажите, что он скрытый. Пример ниже: 




После этого любые действия с этой папкой с использованием синхронизации её содержания через Syncthing не будут затрагивать указанные в .stignore файлы. Можно даже попросить респондента удалить файлы ini и ico – ваши файлы ini и ico эта операция не затронет. В панели управления Syncthing видно, что количество синхронизируемых объектов уменьшено шаблонами игнорирования:




В данной заметке изложен только частный случай использования возможностей синтакисиса файла .stignore  Перейдите в раздел документации (нижняя часть страницы панели управления Syncthing) и прочитайте документацию по файлу .stignore от разработчиков Syncthing.




среда, 2 августа 2023 г.

Командой "Снимок экрана" в Cinnamon делать снимок выбранной области экрана по умолчанию

При использовании xfce после запуска команды сделать снимок экрана или его части (xfce4-screenshooter) у меня запоминался выбор действия: сделать снимок экрана полностью или его части. И при последующем запуске этой команды действие выполнялось с последним выбором автоматически, что позволяло назначить на данную команду комбинацию горячих клавиш через настройку клавиатуры либо ПО autokey:

import subprocess
subprocess.Popen(["/usr/bin/xfce4-screenshooter"])

🔰  Примечание. Установить autokey в Linux Mint можно командой sudo apt install autokey-gtk

К своему сожалению, при использовании Cinnamon при вызове аналогичной команды "Снимок экрана" (gnome-screenshoter) выбор по последнему действию не сохранялся, снова предлагая сделать выбор "что фотографировать".

При обращении к справке (gnome-screenshoter --help) было обнаружено, что сразу делать снимок выделенной части экрана необходимо командой gnome-screenshoter -a

Если такую команду указать в программе autokey

import subprocess
subprocess.Popen(["/usr/bin/gnome-screenshoter -a"]) 

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

subprocess.Popen(["/home/minter/Tools/scripts/modules/screenshot.sh"])

Листинг скрипта screenshot.sh простой:

#!/bin/bash
gnome-screenshot -a
exit

Для добавления команды gnome-screenshoter -a в главное меню (секция "Стандартные") откройте каталог /usr/share/applications с правами root, например, 

sudo nemo /usr/share/applications

Найдите файл кнопки запуска "Снимок экрана" и и откройте его в текстовом редакторе:



Сохраните его "как" (с другим именем), например Screenshot-part.desktop  

Измените содержание нового файла на примерно такое:

[Desktop Entry]
Name=Screenshot part screen
Comment=Save images of your individual windows
# Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
Keywords=snapshot;capture;print;screenshot;
Exec=gnome-screenshot -a
Terminal=false
Type=Application
# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
Icon=org.gnome.Screenshot
StartupNotify=true
Categories=GTK;GNOME;Utility;X-GNOME-Utilities;
NotShowIn=KDE;
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-utils
X-GNOME-Bugzilla-Component=screenshot
Actions=screen-shot;window-shot;
DBusActivatable=true

Сохраните изменения и закройте текстовый редактор. Найдите свой созданный файл по имени  Screenshot part screen  и в его свойствах (Права) отметьте "Разрешить исполнять как программу".

Пример того, что должно получиться:


Теперь такое наименование дополнительной кнопки запуска будет отображаться в меню Cinnamon. Чтобы созданную новую кнопку запуска "русифицировать" добавьте в конец файла Screenshot-part.desktop строку (пример):

Name[ru]=Снимок части экрана

В результате новая кнопка запуска будет отображаться по-русски:



После этого в меню Cinnamon (Стандартные) будет иметься 2 кнопки запуска c одним и тем же значком фотоаппарата: "Снимок части экрана" (созданная вами) и "Снимок экрана" (по умолчанию).

🔰  Примечание. Аналогично для xfce листинг скрипта screenshot.sh :

#!/bin/bash
xfce4-screenshooter -r
exit

или для кнопки вызова (файл desktop) Exec=xfce4-screenshooter -r

воскресенье, 30 июля 2023 г.

Найти в папке все файлы sh и сделать их исполняемыми

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

Проблема была решена выполнением команды, которая ищет по указанному пути все файлы sh и делает их исполняемыми:

find /home/minter/Tools/scripts -name "*.sh" -exec chmod u+x {} \;

Вместо  /home/minter/Tools/scripts укажите нужный вам путь к папке с файлами sh.

вторник, 25 июля 2023 г.

Посчитать число файлов fb2 в выбранной папке (действие в Nemo)

По аналогии с подсчётом числа файлов fb2 в выбранной папке через правое контекстное меню в xfce аналогичное действие в Nemo выполняется следующим образом.

Выполните в терминале команду nemo ~/.local/share/nemo/actions У вас откроется нужная папка, в которой создайте файл с расширением .nemo_action

В описываемом примере рассматривается файл count_fb2_files.nemo_action  Его содержание:

[Nemo Action]

Active=true
Name=Подсчет fb2
Comment=Сколько всего файлов fb2 в папке
Exec=sh -c 'find %F -name "*.fb2" | wc -l | cat - /dev/tty'
Icon-Name=emblem-hexagon-green
Selection=s
Extensions=dir;
Quote=double
Terminal=true

В строке Icon-Name= указано имя значка, под которым будет отображаться команда в правом контекстном меню (ПКМ).

В свойствах файла (Права) отметьте, что его разрешено выполнять как программу.

Для подсчёта числа любых файлов в выбранной папке строку Exec= укажите в виде:

Exec=sh -c 'find %F -type f | wc -l | cat - /dev/tty'

Количество файлов в выбранной папке будет отображено в окне терминала.

четверг, 20 июля 2023 г.

Кнопка запуска (лаунчер) для запланированного выключения Linux Mint

Как указано в различных публикациях на тему запланированного выключения Linux, для этого необходимо выполнить в терминале одну из команд: 

shutdown часов:минут для выключения в определённое время, например, 22:59 – shutdown 22:59;

shutdown +40 для выключения через 40 минут.

✅  Примечание. Обычно приводится команда shutdown -h часов:минут, но, как показала практика, достаточно команды shutdown часов:минут.

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

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

1. Скрипт (сценарий) представляет из себя файл текста (с расширением sh или без него), в свойствах которого (Права) указано, что его разрешено выполнять как программу.

#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате, например,\n в часов:минут – 23:59 или\n через 15 минут – +15\nНичего не вводить или\nОтменить – через 1 минуту\n" --entry > /tmp/down.txt
shutdown $(cat /tmp/down.txt) &
exit

Выполняется запрос ввода времени когда или через сколько необходимо выключить компьютер. Введённое значение записывается во временный файл, например, /tmp/down.txt :

zenity --width=220 --title "Когда выключить" --text="Ввод в формате, например,\n в часов:минут – 23:59 или\n через 15 минут – +15\nНичего не вводить или\nОтменить – через 1 минуту\n" --entry > /tmp/down.txt

Значение --width=220 указывает на ширину окна формы запроса. Изменяя значение после знака = можно отрегулировать желаемую ширину окна формы запроса.

Символы \n указывают переходы на следующую строку.

shutdown $(cat /tmp/down.txt) & соответствует выполнению команды shutdown и значения, которое считывается из сохранённого файла /tmp/down.txt, после чего выполнение самого скрипта (сценария) завершается. Символ & означает переход к выполнению следующей команды, не дожидаясь завершения выполнения предыдущей.

Как это выглядит:


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

zenity --width=220 --title "Когда выключить" --entry > /tmp/down.txt

2. Кнопка запуска (лаунчер) создаётся на рабочем столе через правое контекстное меню мыши. Примеры для Cinnamon и xfce смотрите по ссылкам: Cinnamonxfce. Указывать выполнение команды в терминале не требуется.

При создании кнопки запуска она по умолчанию создаётся на рабочем столе и в меню в категории "Разное". После создания кнопки запуска её с рабочего стола можно удалить (для поддержания его в чистоте 😀).

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

Categories=GTK;Development;

и сохраните его. После этого ваша кнопка будет отображаться в категории "Программирование" (Cinnamon) или "Разработка" (xfce).

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

🔔  Будьте внимательны при вызове созданной кнопки запуска. Если вы даже ничего не вводили или нажали кнопку "Отменить", то у вас уже передана команда shutdown. Команда shutdown без аргументов соответствует команде выключения компьютера через 60 секунд.

При необходимости подбора ширины окна формы запроса времени выключения вводите в терминале команду: 

zenity --width=220 --title "Когда выключить" --text="Ввод в формате, например,\n в часов:минут – 23:59 или\n через 15 минут – +15\nНичего не вводить или\nОтменить – через 1 минуту\n" --entry > /tmp/down.txt

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

суббота, 15 июля 2023 г.

Открыть книгу fb2 в читалке fb2less через правое контекстное меню Nemo

Иногда возникает необходимость быстро просмотреть начало книги. К тому же, неплохо иметь в своём арсенале ещё одну читалку, особенно когда читаешь несколько книг "одновременно" (то есть периодически переключаясь с книги на книгу) в разных читалках (например, fbreader, foliate, coolreader), и "терять" в одной из читалок возможность при запуске определённой читалки ставиться на последнее прочитанное место не хочется.

Консольную читалку, то есть запускаемую в окне терминала можно установить командой sudo apt install fbless 

Сразу оговорюсь, что файла настроек и кэша, как описано здесь и здесь, на своей системе Linux Mint 21.2 найдено не было. Тем не менее, читалка была признана рабочей.

Однако использование команды fbless путь_к_книге навевало определённую тоску 😟

В результате было принято решение попробовать открыть файл с помощью fbless через правое контекстное меню файлового менеджера Cinnamon.

Открыть книгу fb2

В папке ~/.local/share/nemo/actions (~ означает папки своего профиля) создайте файл fbless.nemo_action и в его свойствах (секция "Права") установите галочку в поле "Выполнение" – Разрешить исполнять как программу. Содержание файла:

[Nemo Action]

Active=true
Name=fbless
Comment=Открыть файл в fbless
Exec=sh -c 'fbless %F; exec bash'
Icon-Name=FBReader
Selection=s
Extensions=fb2;
Mimetypes=text/plain;
Quote=double
Terminal=true

Icon-Name=FBReader соответствует значку раскрытой книги голубого цвета.

Теперь при выделении книги fb2 и вызове правого контекстного меню мыши можно вызвать пункт fbless (его название указывается в строке Name=, поэтому можно указать своё), после чего выбранная книга будет открыта в терминальной читалке fbless.

Вторым вариантом команды в строке Exec может являться просто  fbless %F


Открыть книгу fb2 и перейти на место чтения в %, которое вы запомнили с прошлого сеанса чтения

По аналогии с предыдущим пунктом в папке ~/.local/share/nemo/actions (~ означает папки своего профиля) создайте файл fbless-proc.nemo_action и в его свойствах (секция "Права") установите галочку в поле "Выполнение" – Разрешить исполнять как программу. Содержание файла:

[Nemo Action]

Active=true
Name=fbless proc
Comment=Открыть файл в fbless в месте %
Exec=sh -c 'fbless %F -g $(/home/minter/Tools/scripts/modules/fbless-proc.sh && cat /tmp/proc.txt); exec bash'
Icon-Name=fbreader
Selection=s
Extensions=fb2;
Mimetypes=text/plain;
Quote=double
Terminal=true

Icon-Name=fbreader соответствует значку раскрытой книги фиолетового цвета.

В строке Exec= присутствует команда /home/minter/Tools/scripts/modules/fbless-proc.sh, указывающая на полный путь к скрипту, в котором вы будете вводить нужное значение %. В описываемом примере этот путь /home/minter/Tools/scripts/modules. У вас он будет другим, зависящим от местоположения созданного вами скрипта fbless-proc.sh

Скрипт fbless-proc.sh представляет из себя обычный текстовый файл, в свойствах которого указано, что его разрешено исполнять как программу (секция "Права"). Текст скрипта:

#!/bin/bash
zenity --width=180 --height=50 --question --text="Перейти на место,\nобозначенное % ?$task" --timeout 5
answer=$?
if [ "$answer" -eq 0 ]; then
    zenity --width=100 --title  "Ввод цифры" --entry > /tmp/proc.txt
elif [ "$answer" -eq 1 ]; then
    echo '0' > /tmp/proc.txt
elif [ "$answer" -eq 5 ]; then
    echo '0' > /tmp/proc.txt
fi
exit

Вводимое в строку запроса значение % записывается в файл /tmp/proc.txt, откуда он потом считывается при выполнении команды правого контекстного меню Nemo. Если в течение 5 секунд не было введено никакой цифры, то в файл автоматически записывается значение 0, соответствующее самому началу книги. 

Короткий ролик, демонстрирующий выполнение описанных настроек смотрите здесь.

📌   Примечание. Значение 13% вместо введённых 14% обусловлено небольшим расхождением в несколько строк текста книги. В то же время программа "не понимает" дробных значений, например, 18,6 , поэтому в место, например, 35% может укладываться несколько десятков строк текста.

Похожее решение для Thunar здесь.

понедельник, 10 июля 2023 г.

Удаление лишних шрифтов в Linux Mint 21

По умолчанию Linux Mint устанавливает большое количество шрифтов, которые для русскоговорящего пользователя являются ненужными, так как не имеют практического применения. К таким шрифтам относятся специфические шрифты азиатских и частично африканских языков. Целью описанных ниже операций является избавление от таких компонентов системы, чтобы в итоге остались шрифты вида  dejavu, droid, freefont, liberation, liberation2, mathjax, opensymbol, ubuntu, urw-base35.

1. Вызвать "Настройки ‒ Языки ‒ Установка и удаление языков". Отобразится список, в котором выделять по одному языку и нажимать кнопку "Удалить".


 У себя оставляю только 2 языка: английский (США) и русский. Если отображается "Отсутствуют некоторые языковые пакеты", то выделить язык и в нижней части окна нажать на кнопку "Установить языковые пакеты". После выполнения необходимых операций в строке присутствующих языков должна быть надпись "Полностью установлено".



2. После удаления языков шрифты удалённых языковых пакетов всё равно ещё присутствуют. В этом можно убедиться, вызвав менеджер пакетов Synaptic и введя в поле запрос fonts:


Удалим эти шрифты. Чтобы не выделять вручную "ненужные" шрифты (которых много и среди которых можно запутаться) имеет смысл удалить их пакетным заданием ‒ командой терминала в 1 строку:

 sudo apt purge -y fonts-beng* fonts-deva* fonts-gargi fonts-gubbi fonts-gujr* fonts-guru* fonts-indic fonts-kacst* fonts-kalapi fonts-khmeros-core fonts-knda fonts-lao fonts-lklug-sinhala fonts-lohit* fonts-mlym fonts-nakula fonts-navilu fonts-noto-cjk fonts-orya* fonts-pagul fonts-sahadeva fonts-samyak* fonts-sarai fonts-sil* fonts-smc* fonts-taml fonts-telu* fonts-thai* fonts-tibetan* fonts-tlwg* fonts-yrsa-rasa

Символ * означает, что кроме самого шрифты также будут удалены и сопутствующие ему шрифты, например, telu и teluguvijayam. 

Появление предупреждения, например, dpkg: предупреждение: при удалении fonts-lohit-gujr каталог «/usr/share/fonts/truetype/lohit-gujarati» не пуст, поэтому не удалён означает, что в системной папке шрифтов после удаления ненужного шрифты всё ещё остаётся папка с именем удалённого шрифта.

3. Для удаления оставшихся папок удалённых шрифтов удалите эти папки, открыв в менеджере папок под правами суперпользователя /usr/share/fonts/truuetype. Кроме того в папке /usr/share/fonts/opentype удалите папку malayalam.

Чтобы не удалять папки вручную можно выполнить команду в терминале (в одну строку):

sudo rm -r /usr/share/fonts/opentype/malayalam /usr/share/fonts/truetype/abyssinica /usr/share/fonts/truetype/fonts-beng-extra /usr/share/fonts/truetype/fonts-deva-extra /usr/share/fonts/truetype/fonts-gujr-extra /usr/share/fonts/truetype/fonts-guru-extra /usr/share/fonts/truetype/fonts-kalapi /usr/share/fonts/truetype/fonts-orya-extra /usr/share/fonts/truetype/fonts-telu-extra /usr/share/fonts/truetype/fonts-yrsa-rasa /usr/share/fonts/truetype/Gargi /usr/share/fonts/truetype/Gubbi /usr/share/fonts/truetype/kacst /usr/share/fonts/truetype/kacst-one /usr/share/fonts/truetype/lao /usr/share/fonts/truetype/malayalam /usr/share/fonts/truetype/Nakula /usr/share/fonts/truetype/Navilu /usr/share/fonts/truetype/padauk /usr/share/fonts/truetype/pagul /usr/share/fonts/truetype/Sahadeva /usr/share/fonts/truetype/Sarai /usr/share/fonts/truetype/sinhala /usr/share/fonts/truetype/teluguvijayam /usr/share/fonts/truetype/tibetan-machine /usr/share/fonts/truetype/tlwg /usr/share/fonts/truetype/ttf-khmeros-core /usr/share/fonts/truetype/lohit* /usr/share/fonts/truetype/samyak*

В идеале содержание папок /usr/share/fonts/opentype и /usr/share/fonts/truetype должно быть таким:


Если какая-либо папка не была удалена или при выполнении операции удаления папок возникли какие-либо ошибка (неверная команда, объект отсутствует), то лишние папки можно удалить в менеджере файлов вручную под правами суперпользователя.