пятница, 15 марта 2024 г.

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

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


Указанное на рисунке выше третье значение +155 является результатом сложения чисел 60, 60, 35. То есть, оно является указанием значения в минутах ( для тех, кто не понял 😊 ).

Понятно, что после ввода в строку значения и последующего нажатия кнопки OK будет запланировано выключение компьютера "в" или "через". Если ничего не вводить и нажать ОК или нажать Отмена (пользователь передумал), или просто закрыть окно формы, то компьютер выключится через 1 минуту, так как будет выполнена команда shutdown без указания параметров. Но этого можно избежать, если после завершения работы формы будет произведена проверка на наличие введённого значения, то есть, чтобы файл не был пустым, например:


Собственно сам скрипт (исполняемый файл):

#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате xx:yy или + x\nПримеры ввода:\n23:59  = в 23 часа 59 минут.\n+15      = через 15 минут.\n+155   = через 2 часа 35 минут." --entry > /tmp/down.txt
if [[ ! -z $(cat /tmp/down.txt) ]] ; then
    shutdown $(cat /tmp/down.txt) &
  else
    zenity --width=150 --height=50 --info --timeout=5 --title="Уведомление" --text="Не указано время\nвыключения.\nЗадание не назначено."
fi
exit

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

--width= и --height= определяют ширину и высоту форм.

--timeout=5 указывает на интервал в 5 секунд, после которого форма уведомления автоматически будет закрыта. Если это не востребовано, то используйте:

#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате xx:yy или + x\nПримеры ввода:\n23:59  = в 23 часа 59 минут.\n+15      = через 15 минут.\n+155   = через 2 часа 35 минут." --entry > /tmp/down.txt
if [ -s /tmp/down.txt ]; then
    shutdown $(cat /tmp/down.txt) &
  else
    :
fi
exit

или так:

#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате xx:yy или + x\nПримеры ввода:\n23:59  = в 23 часа 59 минут.\n+15      = через 15 минут.\n+155   = через 2 часа 35 минут." --entry > /tmp/down.txt
if [[ ! -z $(cat /tmp/down.txt) ]] ; then
    shutdown $(cat /tmp/down.txt) &
fi
exit

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

✅    Добавление подтверждающих сообщений

Результат ввода значений можно отобразить информационным сообщением. Примеры:



Чтобы отображалось нужное сообщение, поскольку ввод может быть как в формате ЧЧ:ММ (часов минут), так и в формате +М (минут), то в скрипт вводится проверка введённого значения на наличие символа двоеточия (или +, но тогда следует поменять местами порядок выполнения по условию).

var=`cat /tmp/down.txt`
if [[ $var =~ ":" ]]; then
    zenity --width=150 --height=50 --info --timeout=7 --title="Подтверждение" --text="Компьютер будет\nвыключен в $(cat /tmp/down.txt)"
  else
    zenity --width=150 --height=50 --info --timeout=7 --title="Подтверждение" --text="Компьютер будет\nвыключен\n через $(cut -c2- <<< $(cat /tmp/down.txt)) мин."
fi

Если в считанном значении будет найден символ двоеточия, то результатом будет вывод сообщения о выключении ЧЧ:ММ. В ином случае будет выводиться сообщение о выключении через М минут. При выводе второго сообщения не отображается символ +, что обеспечивается инструкцией $(cut -c2- <<< $(cat /tmp/down.txt)). --timeout=7 указывает, что после 7 секунд выводимое сообщение автоматически исчезнет. Таким образом, листинг скрипта с информационными сообщениями имеет вид: 

#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате xx:yy или + x\nПримеры ввода:\n23:59  = в 23 часа 59 минут.\n+15      = через 15 минут.\n+155   = через 2 часа 35 минут." --entry > /tmp/down.txt
if [[ ! -z $(cat /tmp/down.txt) ]] ; then
    shutdown $(cat /tmp/down.txt) &
      var=`cat /tmp/down.txt`
      if [[ $var =~ ":" ]]; then
            zenity --width=150 --height=50 --info --timeout=7 --title="Уведомление" --text="Компьютер будет\nвыключен в $(cat /tmp/down.txt)"
         else
           zenity --width=150 --height=50 --info --timeout=7 --title="Уведомление" --text="Компьютер будет\nвыключен\n через $(cut -c2- <<< $(cat /tmp/down.txt)) мин."
      fi
  else
    zenity --width=150 --height=50 --info --timeout=5 --title="Уведомление" --text="Не указано время\nвыключения.\nЗадание не назначено."
fi
exit

✅   Чтобы сделать кнопку вызова созданного скрипта в главном меню создайте файл .desktop, например, Shutdown-at.dеsktop, который должен располагаться в скрытой папке вашего домашнего каталога (папки) ~/.local/share/applications и впишите в него:

[Desktop Entry]
Name=Shutdown-at
Exec=полный путь к файлу sh
Comment=Назначить время выключения
Terminal=false
PrefersNonDefaultGPU=false
Icon=укажите значок для кнопки, например, application-exit или system-shutdown
Type=Application
Categories=GTK;Development;

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

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

Демонстрационный ролик (ниже или на Google Drive):

вторник, 12 марта 2024 г.

Монтирование облака с помощью rclone через форму выбора

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

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

Несмотря на то что в источниках программного обеспечения Ubuntu или Linux Mint имеется программа графического управления работой rclone (rclone-browser) вопрос о монтировании выбранного облака можно решать через свой скрипт.

Пример:

В указанной форме в столбце выбора щелчком мыши выделяется желаемое облако и после нажатия кнопки OK оно будет смонтировано в папку для монтирования внешних ресурсов. К примеру, в рассматриваемом скрипте это папка /home/minter/Mount

Создаётся файл sh с содержанием (пример):

#!/bin/bash
zenity --width=50 --height=330 --list --title="Монтировать облако" --checklist --editable --column=" Выбор " --column " Имя по rclone " --text= "" "dropbox" "" "koofr" "" "pcloud" "" "mailru" "" "yandex" "" "mega"  "" "onedrive" "" "box.net" "" "jottacloud" > /tmp/mount.txt
rclone mount --vfs-cache-mode writes $(cat /tmp/mount.txt): /home/minter/Mount &
exit

Первые три строки определяют форму запроса (см. рисунок выше) и осуществляют запись выбранного облака в файл /tmp/mount.txt

Если ничего не будет выбрано или окно формы будет закрыто по кнопке закрытия окна, то ничего смонтировано не будет, так как создаваемый файл /tmp/mount.txt будет пустым, то есть будет иметь нулевой размер. 

Записи dropbox, koofr, pcloud ... в качестве примера. Вам необходимо будет указать имя подключения, которое было назначено при настройке ПО rclone. Эти имена можно подсмотреть в файле настроек rclone. Для этого откройте файл rclone.conf, который расположен по пути ~/.config/rclone в вашей домашней папке. Имя подключения будет указано в квадратных скобках, например, [kgm2]. 

Далее запускается собственно монтирование облака в выбранную папку. В данном примере это папка /home/minter/Mount  Имя подключения считывается из файла /tmp/mount.txt и подставляется в команду монтирования через $(cat /tmp/mount.txt):  Обратите внимание, что в команде подключения всего облака имя подключения должно завершаться двоеточием (синтаксис rclone). Следующий за командой монтирования символ & означает, что завершение выполнения монтирования облака ожидаться не будет и собственно скрипт sh прекратит свою работу. Активной останется только выполняемая команда 

rclone mount --vfs-cache-mode writes $(cat /tmp/mount.txt): /home/minter/Mount

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

☑  Дополнение. Как вариант, можно организовать автоматическое открытие папки Mount в новом окне файлового менеджера. При этом производится дополнительная проверка файла mount.txt на введённое значение. То есть, если нажимается кнопка "Отменить", то в файл mount.txt ничего записано не будет и не будет производиться ни попытки монтирования, ни автоматического открытия папки Mount. Пример:

#!/bin/bash
zenity --width=50 --height=330 --list --title="Монтировать облако" --checklist --editable --column=" Выбор " --column " Имя по rclone " --text= "" "dropbox" "" "koofr" "" "pcloud" "" "mailru" "" "yandex" "" "mega"  "" "onedrive" "" "box.net" "" "jottacloud" > /tmp/mount.txt
if [ -s /tmp/mount.txt ]; then
    rclone mount --vfs-cache-mode writes $(cat /tmp/mount.txt): /home/minter/Mount &
    #  ✔  Дать системе время, чтобы она успела смонтировать облако.
   
#  Цифру (число задержки в секундах) подберите экспериментально,
   
#   исходя из быстродействия вашей системы и скорости Интернет.
    sleep 2
❗ Выберите одну из двух следующих строк, исходя из применяемого Вами менеджера файлов (графического окружения)
    
nemo --tabs /home/minter/Mount & # для Cinnamon
    thunar /home/minter/Mount & # для xfce
  else
    :
fi
exit

Создайте в своей папке ~/.local/share/applications файл (например, mount.desktop), который будет являться кнопкой запуска скрипта sh  Пример:

[Desktop Entry]
Name=Mount cloud
Exec=полный_путь_до_скрипта_sh
Comment=Смонтировать Cloud
Terminal=false
PrefersNonDefaultGPU=false
Icon=имя_значка_под_которым_ кнопка_будет_отображаться
Type=Application
Categories=GTK;Development;
Name[ru]=Смонтировать облако

В приводимом примере кнопка отображается в меню "Разработка". Если нужно чтобы кнопка отображалась в "Прочие", то удалите эту строку.

Строка Name[ru]= указывает, что кнопка запуска должна отображаться не как "Mount cloud", а как "Смонтировать облако". Строка не обязательная и её также можно убрать.

Сделайте созданный файл исполняемым.

воскресенье, 10 марта 2024 г.

Предупреждение в окне терминала при обновлении списка пакетов после удаления FDM (Free Downloaf Manager)

После удаления программы FDM (Free Download Manager) при очередном ручном обновлении источников приложений sudo apt update в окне терминала появилась запись:

 https://debrepo.freedownloadmanager.org/dists/bionic/InRelease: Ключ хранится в унаследованной связке ключей trusted.gpg (/etc/apt/trusted.gpg), подробности см. в разделе DEPRECATION в apt-key(8).

Процедура "лечения" известна и сводится к нескольким действиям.

Выполните команду sudo apt-key list и найдите запись, относящуюся к этому ПО. Скопируйте последние 8 цифр (см. рисунок ниже).

Выполните команду sudo apt-key del 093B2149 (цифры указываются без пробела).

При удалении FDM запись об источнике этого ПО может остаться нетронутой. Откройте папку /etc/apt/sources.list.d  Если в ней присутствует файл  freedownloadmanager.list , то его можно удалить:  sudo rm /etc/apt/sources.list.d/freedownloadmanager.list 

При запуске sudo apt update указанное выше сообщение отображаться не должно.

вторник, 5 марта 2024 г.

Склеить файл, разрезанный при помощи split, в терминале без указания терминальной команды

В данной публикации рассматривается обратная операция склеить файл, который был разрезан на части посредством терминальной команды split. Несмотря на выполнение команды именно в терминале от пользователя потребуется только пару раз щёлкнуть кнопкой мыши. 

 Создайте исполняемый файл sh с содержанием:

#!/bin/bash
echo " "
echo " "
echo "     Выберите папку с исходными файлами,"
echo "     имена которых начинаются на x..."
echo " "
echo " "
sleep 3
dir=$(zenity --file-selection --directory)
zenity --width=280 --question --title "Имя файла" --text="Укажите полное имя склеиваемого файла,\nвключая его расширение, например:\n\nХудожественный фильм.mkv или\nДокументальная телепередача.mp4\n $task" \
--ok-label="Да" \
--cancel-label="Нет"
answer=$?
if [ "$answer" -eq 0 ]; then
    zenity --width=100 --title "Ввод текста" --text "Ввод имени файла с расширением:" --entry > /tmp/output.txt
      elif [ "$answer" -eq 1 ]; then
      > /tmp/output.txt
      elif [ "$answer" -eq 5 ]; then
      > /tmp/output.txt
fi
if [ -s /tmp/output.txt ]; then
    cd "$dir"
    echo "     Производится склейка частей"
    echo "     в файл с указанным именем."
    echo " "
    echo "     По завершении процесса Вы получите"
    echo "     сообщение в этом же окне."
    cat x* > "$dir/$(cat /tmp/output.txt)"
    find "$dir" -maxdepth 1 -name 'x*' -exec rm {} \;
    echo " "
    echo " "
    echo "     Процесс успешно завершён."
    echo "     Исходные файлы х... удалены."
    echo " "
    echo " "
    sleep 7
    xdg-open "$dir" &
  else
    echo " "
    echo "     Вы не указали имя файла."
    echo " "
    sleep 3
fi
rm /tmp/output.txt
exit

В процессе работы сценария (скрипта bash) отображаются две формы запросов:



C вариантами ответов "Да" и "OK" всё понятно. В результате выполнения указанных выше форм создаётся файл /tmp/output.txt , содержащий имя выходного файла с его расширением.

Если же выбрано "Нет" в первой форме или "Отменить" во второй, либо нажата кнопка закрытия окна запроса, то также создаётся файл /tmp/output.txt , но без какого-либо содержания. То есть, с точки зрения его наполнения он является пустым.

Далее при помощи инструкции if [ -s /tmp/output.txt ] файл анализируется на наличие в нём содержания. Если он признаётся как "не пустой", то в выбранной в самом начале папке содержание всех файлов, имена которых начинаются на букву x, копируются в файл, имя которого считывается из файла /tmp/output.txt  По завершении процесса исходные файлы x... удаляются и в сопоставленном приложении (как правило, файловом менеджере) открывается папка со склеенным файлом.

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

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

Если файл признаётся как "пустой", то никаких действий не производится, а просто отображается сообщение о том, что имя файла не указано.

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

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

xed /home/minter/.local/share/applications/join.desktop

и впишите в него следующее:

[Desktop Entry]
Name=Join
Exec=/home/minter/Tools/scripts/modules/join.sh
Comment=
Terminal=true
PrefersNonDefaultGPU=false
Icon=emblem-plus
Type=Application
Categories=GTK;Development;
Name[ru]=Склеить файлы

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

Icon= указывает на значок, под которым эта кнопка запуска будет отображаться в меню.

Categories=GTK;Development; означает, что кнопка будет расположена в меню "Программирование" в Cinnamon или "Разработка" в xfce. Если эту строку убрать, то кнопка будет расположена в меню "Прочие" в Cinnamon или "Прочее" в xfce.

 Name[ru]=Склеить файлы является необязательной строкой, указывающей на то, что кнопка должна отображаться не под именем Join, а под именем "Склеить файлы".

Перейдите в каталог applications

xdg-open /home/user/.local/share/applications

(user – это ваша домашняя папка) и в свойствах созданной кнопки запуска в разделе "Права" укажите, что его можно исполнять как программу. В Cinnamon он будет отображён как файл Склеить файлы без расширения, а в xfce как файл Join.desktop  Чтобы в файловом менеджере Thunar вместо значка шестерёнки отображался значок, указанный в строке Icon= в свойствах файла перейдите в раздел "Значок запуска" и поставьте галочку в поле "Установить этот файл как доверенный".

понедельник, 4 марта 2024 г.

Добавить своё фоновое изображение в системные фоновые рисунки Linux Mint

В Linux Mint Cinnamon через правое контекстное меню "Изменить фон рабочего стола" можно добавить своё фоновое изображение, нажав на кнопку + в левом нижнем углу окна. Но своё фоновое изображение можно добавить и в стандартный набор поставки Linux Mint. В данной заметке показано как добавить своё фоновое изображение в раздел Linux Mint.

При указании фонового изображения рабочего стола Linux Mint 21.3 в левом столбце окна с перечислением фоновых рисунков отображены разделы, из которых можно выбрать фоновый рисунок: Linux Mint, Vanessa, Vera, Victoria, Virginia, Изображения. Чтобы добавляемое фоновое изображение отобразилось в каком-либо разделе необходимо осуществить два действия: добавить своё изображения в нужную папку и дополнить соответствующую запись в файл настроек.

Добавляю своё фоновое изображение файл Orion,jpg в раздел Linux Mint:

sudo cp /home/minter/Orion.jpg /usr/share/backgrounds/linuxmint

Для внесение изменения в файл настроек откройте папку 

/usr/share/cinnamon-background-properties 

под правами root, например 

sudo nemo /usr/share/cinnamon-background-properties

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

<wallpaper deleted="false">
    <name>Linux Mint</name>
    <filename>/usr/share/backgrounds/linuxmint/Orion.jpg</filename>
    <options>zoom</options>
    <shade_type>solid</shade_type>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <artist>Network</artist>
</wallpaper>

В строке <name></name> указан путь к моему файлу Orion.jpg

Строка <artist></artist> указывает на автора изображения. Так как моё изображение было получено из Интернет, то мной было указано, что автором является Network. Результат:


🔰  Примечание. Как сделать аналогичную операцию в xfce читать здесь.
 

пятница, 1 марта 2024 г.

Папка /tmp как tmpfs в Ubuntu и Linux Mint

Перевод папки /tmp в файловую систему tmpfs, что по сути дела равносильно её перемещению в оперативную память компьютера, может в некоторой степени способствовать экономии ресурса твердотельного  накопителя SSD.

В сети имеется большое количество различных публикаций на эту тему. Но, как оказалось, в Ubuntu / Linux Mint это делается проще простого.

– Так ведь кражи не будет.
– Всё уже урадено до нас.
                     (операция "Ы")    
😁

Выполните в терминале две команды:

sudo cp /usr/share/systemd/tmp.mount /etc/systemd/system/

sudo systemctl enable tmp.mount

Перезагрузите систему и выполните команду cat /etc/mtab

У вас должна присутствовать строка  tmpfs /tmp tmpfs ...

 
Другим вариантом проверки является команда df 
Предпоследняя строка на рисунке ниже показывает, что /tmp в tmpfs:






При таком решении в интересах /tmp может быть задействовано до 50% от общего размера оперативной памяти. Например, в моём случае размер оперативной памяти составляет 3655644k (свой размер можно узнать по команде free ), а в соответствующей строке вывода cat /etc/mtab указано, что

tmpfs /tmp tmpfs rw,nosuid,nodev,size=1827824k 

вторник, 27 февраля 2024 г.

Выполнение составной команды через ПКМ Thunar и Nemo

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

В файловом менеджере Thunar вопрос решился просто – в строке команды особых действий указывается: 1-я команда && 2-я команда. Пример:

realpath %f > /tmp/filename.txt && /home/minter/Tools/scripts/modules/replace.sh

Остаётся только указать условия появления этого пункта в ПКМ Thunar и значок.

В файловом менеджере Nemo реализация осуществляется по-другому, так как указанная выше составная команда, будучи указанной в строке Exec файла скрипт.nemo_action не выполняется. Чтобы указанная последовательность команд была выполнена в строке Exec= необходимо указать (всё в одну строку):

Exec=sh -c 'realpath %F > /tmp/filename.txt && /home/minter/Tools/scripts/modules/replace.sh; exec bash'