воскресенье, 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 должно быть таким:


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

среда, 5 июля 2023 г.

Скрыть отображение отдельных элементов меню Linux

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

Если такие файлы являются системными (при установке программ или после установки системы), то  откройте их с редакторе текста с правами суперпользователя:

  sudo xed /usr/share/applications/файл.desktop  

xed является текстовым редактором по умолчанию в Linux Mint. В других системах он будет иным, например, gedit в Ubuntu. 

В конце файла, который должен быть скрыт от отображения в меню допишите строку  OnlyShowIn=None  Проверьте результат. Если необходимо его отображать снова, то перед записью установите значок комментария  # .