четверг, 18 марта 2021 г.

Погода в терминале через кнопку запуска в xfce

В xfce имеется возможность установить на панель элемент "Обновление погоды". Однако после установки данного элемента

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

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

Постоянно набирать в терминале необходимую команду curl wttr.in?lang=ru представляет некоторое неудобство, а выводимая в терминале информация в окне не помещается и приходится каждый раз разворачивать окно терминала в полный размер. Поэтому для себя на панели была создана кнопка запуска с командой, обеспечивающей отображение информации в необходимых размерах, которые для своего экрана подбирались экспериментально. 

xfce4-terminal --geometry=130x160 -x sh -c 'curl wttr.in?lang=ru; exec bash' 

Размеры окна окна определяются цифрами 130 и 160. Результат ниже:


 

среда, 17 марта 2021 г.

Удаление старых ядер и очистка системы в Linux Mint 20x

В настройках системы имеется пункт об удалении ненужных ядер, который доступ при обращении к менеджеру обновлений в разделе "Правка – Параметры – Автоматизация". Если в строке "Автоматическое обслуживание" положение движка установить в положение "Включено", то задание будет выполняться еженедельно от имени суперпользователя.

Однако мне более привычен старый способ удаления лишних ядер и очистки системы от ненужных файлов, который, как показала практика, в Linux Mint 20x не работает. Чтобы он работал в условии необходимо изменить значение vmlinuz* на config*

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

Задачу можно выполнять при каждой загрузке системы, для чего создаваемый сценарий sh поместить в автозагрузку. Файл sh должен иметь разрешение на запуск как программы.

Так как операции могут быть выполнены только с правами суперпользователя (напр., sudo /home/user/clean.sh), то самому скрипту ( clean.sh – так называется у меня. Вы можете ему назначить какое угодно имя ) можно назначить запуск от имени суперпользователя без ввода пароля. Для этого выполните в терминале sudo xed /etc/sudoers и добавьте в него строку:

user ALL=NOPASSWD: путь_к_вашему_скрипту (напр., /home/user/clean.sh)  

user – это ваш логин в системе.

При запуске сценария производится подсчёт ядер в системе. Если количество ядер будет больше 1, то будет осуществлено удаление всех ядер кроме текущего, а также выполнены команды автоочистки и автоудаления ненужных пакетов. Также в процессе будут удалены неиспользуемые модули ядра из каталога /lib/modules

Текст сценария (на примере моего).

#!/bin/bash
folder=/home/minter
kern=`find /boot -name config* | wc -l`
if [ $kern -gt 1 ];
  then
     apt purge -y $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1)
     apt autoclean
     apt autoremove -y
     rm $folder/.bash_history
     > 
$folder/.bash_history
fi
exit

Обратите внимание на переменную folder, которая указывает на домашнюю папку пользователя, соответствующую логину пользователя в системе (в приводимом примере – minter). Не ошибитесь, иначе вы получите свой "самый чистый домашний каталог в мире".

Если вам нужно протоколирование действий, то добавьте их в протокол событий, например:

#!/bin/bash
folder=/home/minter
log= ... указать расположение файла
kern=`find /boot -name config* | wc -l`
if [ $kern -gt 1 ];
   then
      echo "$(date '+%H-%M-%S') -- в системе ядер - $kern, удаление ядер." >> $log
      apt purge -y $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1)
      echo "$(date '+%H-%M-%S') -- запуск автоочистки." >> $log
      apt autoclean
      echo "$(date '+%H-%M-%S') -- запуск автоудаления." >> $log
      apt autoremove -y
      rm $folder/.bash_history
      > $folder/.bash_history
      echo "$(date '+%H-%M-%S') -- история bash очищена." >> $log
   else
      echo "$(date '+%H-%M-%S') -- очистка системы не требуется." >> $log
fi
exit


Пример практического выполнения.

Листинг каталога /boot до работы clean.sh :

config-5.4.0-66-generic
config-5.4.0-67-generic
grub
initrd.img
initrd.img-5.4.0-66-generic
initrd.img-5.4.0-67-generic
initrd.img.old
System.map-5.4.0-66-generic
System.map-5.4.0-67-generic
vmlinuz
vmlinuz-5.4.0-66-generic
vmlinuz-5.4.0-67-generic
vmlinuz.old

Листинг каталога /boot после работы clean.sh :

config-5.4.0-67-generic
grub
initrd.img
initrd.img-5.4.0-67-generic
initrd.img.old
System.map-5.4.0-67-generic
vmlinuz
vmlinuz-5.4.0-67-generic
vmlinuz.old