декабря 08, 2024, 09:12:50

Новости:

Перейти на сайт https://xubuntu-ru.net


Лень-двигатель прогресса

Автор danwer, июля 17, 2022, 16:06:34

« предыдущая - следующая »

danwer

января 06, 2023, 15:22:45 #15 Последнее редактирование: января 11, 2023, 14:00:32 от danwer
Цитата: butjapka от января 05, 2023, 22:53:24
Цитата: danwer от января 05, 2023, 13:27:47скрипт fsaBackup.sh:
а если в этот скрипт, в случае отсутствия необходимых пакетов добавить команду по установке их и после установки продолжить выполнение скрипта
Отличное предложение!  :smile:
Поправил скрипт fsaBackup.sh:
#!/bin/bash

#              --СОХРАНЕНИЕ/ВОССТАНОВЛЕНИЕ БЭКАПА СИСТЕМЫ--


#Проверка установки дополнительных пакетов
yad=$(dpkg --status "yad" 2>/dev/null | grep "ok installed")
fsarchiver=$(dpkg --status "fsarchiver" 2>/dev/null | grep "ok installed")
wmctrl=$(dpkg --status "wmctrl" 2>/dev/null | grep "ok installed");
if ! [[ $yad = "Status: install ok installed" && $fsarchiver = "Status: install ok installed" && $wmctrl = "Status: install ok installed" ]]
then
# запуск терминала с параметром -e
x-terminal-emulator -e sh -c 'apt update && apt install -y yad fsarchiver wmctrl'                            
fi

bootrepair=$(dpkg --status "boot-repair" 2>/dev/null | grep "ok installed")
if ! [[ $bootrepair = "Status: install ok installed" ]]
then
# запуск терминала с параметром -e
x-terminal-emulator -e sh -c 'add-apt-repository -y ppa:yannubuntu/boot-repair && apt update && apt install -y boot-repair'
fi

#Сохранение в переменную списка всех устройств /dev/sd*
dev=( $(ls /dev/sd* -1 | cut -c6-) ) \


#Функция "Выбор системного раздела"
select_systemdrive(){
systemdrive=$(yad --list --column="":tip "${dev[@]}" \
--title "fsaBackup" \
--text "\n  Выбор системного раздела:" \
--window-icon=/usr/local/icons/app/yad/fsaBackup.png \
--geometry=300x500 \
--button="gtk-cancel:35" --button="gtk-ok:0" \
)
if [[ $? = 35 || $? = 252 ]]; then
exit
fi

# Удаление последнего символа | , т.к yad косячно добавляет его в конце
if [[ "$systemdrive" == *\| ]]; then
systemdrive=${systemdrive::-1}
fi
}


#Функция "Выбор домашнего раздела"
select_homedrive(){
homedrive=$(yad --list --column="":tip "${dev[@]}" \
--title "fsaBackup" \
--text "\n  Выбор домашнего раздела:" \
--window-icon=/usr/local/icons/app/yad/fsaBackup.png \
--geometry=300x500  \
--button="gtk-cancel:35" --button="gtk-ok:0" \
)
if [[ $? = 35 || $? = 252 ]]; then
exit
fi

# Удаление последнего символа | , т.к yad косячно добавляет его в конце
if [[ "$homedrive" == *\| ]]; then
homedrive=${homedrive::-1}
fi
}


#Функция "Выбор каталога сохранения бэкапа"
select_dir(){
dirplace=$(yad --file --directory \
--window-icon=/usr/local/icons/app/yad/fsaBackup.png \
--title "Выбор пустого каталога для сохранения бэкапа" \
--geometry=900x600 \
--button="gtk-cancel:35" --button="gtk-ok:0" \
  )

if [[ $? = 35 || $? = 252 ]]; then
exit
fi

if ! [ -z "$(ls -A "$dirplace")" ]; then
yad --skip-taskbar --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/error.png --title="" --geometry=300x100 --text="\nВыбранный каталог не пустой!" --button=Выход:0
exit
fi
}


#Функция "Выбор сохранённого файла бэкапа"
select_file(){
filebackup=$(yad --file \
--window-icon=/usr/local/icons/app/yad/fsaBackup.png \
--title "Выбор сохранённого файла бэкапа" \
--geometry=900x600 \
--button="gtk-cancel:35" --button="gtk-ok:0" \
  )

if [[ $? = 35 || $? = 252 ]]; then
exit
fi
}


#Функция "Выбор типа бэкапа"
select_option_backup(){
option=$(yad --list --column="                 Какой бэкап?":tip "Бэкап полный" "Бэкап системного раздела" "Бэкап домашнего раздела" \
--title "fsaBackup" \
--text "" \
--window-icon=/usr/local/icons/app/yad/fsaBackup.png \
--geometry=300x300 \
--button="gtk-cancel:35" --button="gtk-ok:0" \
)

if [[ $? = 35 || $? = 252 ]]; then
exit
fi

# Удаление последнего символа | , т.к yad косячно добавляет его в конце
if [[ "$option" == *\| ]]; then
option=${option::-1}
fi
}



#Функция "Индикация сохранения бэкапа с помощью прогресс-бара Yad"
indicate_savebackup(){
yad --progress --title="         Идёт сохранение бэкапа.." --auto-close --pulsate --button=Отмена:35 --progress-text="ждём.." --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=400x70 &
sleep 1

# цикл, пока не завершится распаковка(процесс $pid1)
while test -d /proc/$pid1/
do
sleep 0.5
if ! wmctrl -l | grep -e '         Идёт сохранение бэкапа..' ;then  #если принудительно закрыть окно Yad (кнопка "Отмена"), то
kill -15 $pid1
break
fi
done

#Закрытие окна Yad
wmctrl -F -c '         Идёт сохранение бэкапа..'
}



#Функция "Индикация восстановления бэкапа с помощью прогресс-бара Yad"
indicate_restorebackup(){
yad --progress --title="         Идёт восстановление бэкапа.." --auto-close --pulsate --button=Отмена:35 --progress-text="ждём.." --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=400x70 &
sleep 1

# цикл, пока не завершится распаковка(процесс $pid1)
while test -d /proc/$pid1/
do
sleep 0.5
if ! wmctrl -l | grep -e '         Идёт восстановление бэкапа..' ;then  #если принудительно закрыть окно Yad (кнопка "Отмена"), то
kill -15 $pid1
break
fi
done

#Закрытие окна Yad
wmctrl -F -c '         Идёт восстановление бэкапа..'
}





backup=$(yad --list --column="                 Что сделать?":tip "Сохранить бэкап" "Восстановить бэкап" \
--title "fsaBackup" \
    --text "" \
--window-icon=/usr/local/icons/app/yad/fsaBackup.png \
--geometry=300x300 \
--button="gtk-cancel:35" --button="gtk-ok:0" \
)

if [[ $? = 35 || $? = 252 ]]; then
exit
fi


# Удаление последнего символа | , т.к yad косячно добавляет его в конце
if [[ "$backup" == *\| ]]; then
backup=${backup::-1}
fi



if [[ $backup == "Сохранить бэкап" ]]; then

#вызов функции
select_option_backup


if [[ $option == "Бэкап полный" ]]; then

#вызов функций
select_systemdrive
select_homedrive

#Отмонтирование смонтированных дисков
if mount|grep /dev/"$systemdrive" ;then
umount /dev/"$systemdrive"
fi

if mount|grep /dev/"$homedrive" ;then
umount /dev/"$homedrive"
fi

#вызов функции
select_dir

#Проверка
yad --title="fsaBackup" --text="\n\nСистемный каталог:  /dev/"$systemdrive"  \n\nДомашний каталог:  /dev/"$homedrive" \n\nКаталог для сохранения бэкапа:  "$dirplace" \n\n\nЕсли всё правильно выбрано, то жмём ОК. " --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=600x300 --button="gtk-cancel:35" --button="gtk-ok:0"

if [[ $? = 35 || $? = 252 ]]; then
exit
fi


#Сохранение полного бэкапа (индикация процесса с помощью yad)
fsarchiver savefs "$dirplace"/full-backup.fsa /dev/"$systemdrive" /dev/"$homedrive" &
pid1=$!

#вызов функции
indicate_savebackup

        yad --title="fsaBackup" --text="\n  Сохранение полного бэкапа \n  успешно завершено!  " --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=300x100 --button="gtk-ok:0"

        exit

fi



if [[ $option == "Бэкап системного раздела" ]]; then

#вызов функции
select_systemdrive


#Отмонтирование смонтированного диска
if mount|grep /dev/"$systemdrive" ;then
umount /dev/"$systemdrive"
fi

#вызов функции
select_dir


#Проверка
yad --title="fsaBackup" --text="\n\nСистемный каталог:  /dev/"$systemdrive" \n\nКаталог для сохранения бэкапа:  "$dirplace" \n\n\nЕсли всё правильно выбрано, то жмём ОК. " --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=600x300 --button="gtk-cancel:35" --button="gtk-ok:0"

if [[ $? = 35 || $? = 252 ]]; then
exit
fi


#Сохранение бэкапа системного раздела (индикация процесса с помощью yad)
fsarchiver savefs "$dirplace"/system-backup.fsa /dev/"$systemdrive" &
pid1=$!

#вызов функции
indicate_savebackup

        yad --title="fsaBackup" --text="\n  Сохранение бэкапа системного \n  раздела успешно завершено!  " --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=300x100 --button="gtk-ok:0"

        exit

fi



if [[ $option == "Бэкап домашнего раздела" ]]; then

#вызов функции
select_homedrive


#Отмонтирование смонтированного диска
if mount|grep /dev/"$homedrive" ;then
umount /dev/"$homedrive"
fi

#вызов функции
select_dir

#Проверка
yad --title="fsaBackup" --text="\n\nДомашний каталог:  /dev/"$homedrive" \n\nКаталог для сохранения бэкапа:  "$dirplace" \n\n\nЕсли всё правильно выбрано, то жмём ОК. " --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=600x300 --button="gtk-cancel:35" --button="gtk-ok:0"

if [[ $? = 35 || $? = 252 ]]; then
exit
fi


#Сохранение бэкапа домашнего раздела (индикация процесса с помощью yad)
fsarchiver savefs "$dirplace"/home-backup.fsa /dev/"$homedrive" &
pid1=$!

#вызов функции
indicate_savebackup

        yad --title="fsaBackup" --text="\n  Сохранение бэкапа домашнего \n  раздела успешно завершено!  " --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=300x100 --button="gtk-ok:0"

        exit

fi


fi



if [[ $backup == "Восстановить бэкап" ]]; then

#вызов функции
select_option_backup

if [[ $option == "Бэкап полный" ]]; then

#вызов функций
select_systemdrive
select_homedrive

#Отмонтирование смонтированных дисков
if mount|grep /dev/"$systemdrive" ;then
umount /dev/"$systemdrive"
fi

if mount|grep /dev/"$homedrive" ;then
umount /dev/"$homedrive"
fi

#вызов функции
select_file

#Проверка
yad --title="fsaBackup" --text="\n\nСистемный каталог:  /dev/"$systemdrive"  \n\nДомашний каталог:  /dev/"$homedrive" \n\nФайл бэкапа:  "$filebackup" \n\n\nЕсли всё правильно выбрано, то жмём ОК. " --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=600x300 --button="gtk-cancel:35" --button="gtk-ok:0"

if [[ $? = 35 || $? = 252 ]]; then
exit
fi


#Восстановление полного бэкапа (индикация процесса с помощью yad)
fsarchiver restfs "$filebackup" id=0,dest=/dev/"$systemdrive" id=1,dest=/dev/"$homedrive" &
pid1=$!

#вызов функции
indicate_restorebackup

        yad --title="fsaBackup" --text="\n  Восстановление полного бэкапа \n  успешно завершено!  " --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=300x100 --button="gtk-ok:0"

        exit

fi


if [[ $option == "Бэкап системного раздела" ]]; then

#вызов функции
select_systemdrive

#Отмонтирование смонтированного диска
if mount|grep /dev/"$systemdrive" ;then
umount /dev/"$systemdrive"
fi

#вызов функции
select_file

#Проверка
yad --title="fsaBackup" --text="\n\nСистемный каталог:  /dev/"$systemdrive"  \n\nФайл бэкапа:  "$filebackup" \n\n\nЕсли всё правильно выбрано, то жмём ОК. " --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=600x300 --button="gtk-cancel:35" --button="gtk-ok:0"

if [[ $? = 35 || $? = 252 ]]; then
exit
fi


#Восстановление бэкапа системного раздела (индикация процесса с помощью yad)
fsarchiver restfs "$filebackup" id=0,dest=/dev/"$systemdrive" &
pid1=$!

#вызов функции
indicate_restorebackup

        yad --title="fsaBackup" --text="\n  Восстановление бэкапа системного \n  раздела успешно завершено!  " --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=300x100 --button="gtk-ok:0"

        exit

fi


if [[ $option == "Бэкап домашнего раздела" ]]; then

#вызов функции
select_homedrive

#Отмонтирование смонтированного диска
if mount|grep /dev/"$homedrive" ;then
umount /dev/"$homedrive"
fi

#вызов функции
select_file

#Проверка
yad --title="fsaBackup" --text="\n\nДомашний каталог:  /dev/"$homedrive" \n\nФайл бэкапа:  "$filebackup" \n\n\nЕсли всё правильно выбрано, то жмём ОК. " --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=600x300 --button="gtk-cancel:35" --button="gtk-ok:0"

if [[ $? = 35 || $? = 252 ]]; then
exit
fi


#Восстановление бэкапа домашнего раздела (индикация процесса с помощью yad)
fsarchiver restfs "$filebackup" id=0,dest=/dev/"$homedrive" &
pid1=$!

#вызов функции
indicate_restorebackup

        yad --title="fsaBackup" --text="\n  Восстановление бэкапа домашнего \n  раздела успешно завершено!  " --window-icon=/usr/local/icons/app/yad/empty.png --image=/usr/local/icons/app/yad/fsaBackup.png --geometry=300x100 --button="gtk-ok:0"

        exit

fi


fi



danwer

января 23, 2023, 13:57:42 #16 Последнее редактирование: января 25, 2023, 01:05:55 от danwer
С подачи el guahiro с его командой на ПКМ Thunar для записи скринкастов родился такой скрипт screencast.sh:
#!/bin/bash
#            ЗАПИСЬ ЭКРАНА

#Если существует временный файл .tmp1, то
if [ -f .tmp1 ]; then
#Закрытие индикатора записи в трее
pid2=$(<.tmp2)
kill -15 $pid2
exit
else

#Узнаём разрешение экрана
r=$(xdpyinfo -display :0.0 | grep dimensions | egrep -o "[0-9]+x[0-9]+ pixels" | egrep -o "[0-9]+x[0-9]+")

#Запись
ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 25 -s $r -i :0.0 -vcodec libx264 -pix_fmt yuv420p -crf 26 -threads 0 -acodec pcm_s16le -y ~/Видео/ScreenCasts/screencast_$(date +%d-%m-%Y_%H:%M:%S).mkv &
pid1=$!
echo "$pid1" > .tmp1

#Индикация записи в трее
yad --notification --image=/usr/local/icons/app/yad/screencast.png --text='Идёт запись экрана' &
pid2=$!
echo "$pid2" > .tmp2

#Пока присутствует индикатор записи в трее
while test -d /proc/$pid2/
do
sleep 0.1
done

#Стоп записи и удаление временных файлов
kill -15 $pid1 && rm -f .tmp1 .tmp2
sleep 0.5
notify-send -t 7000 -i /usr/local/icons/app/yad/screencast-2.png 'Готово! Скринкаст лежит в ~/Видео/ScreenCasts/'
fi

Должны быть установлены ffmpeg и yad.
Задаём хоткей на screencast.sh (у меня Ctrl+R). Жмём Ctrl+R - запись пошла. В трее появился индикатор. Снова жмём Ctrl+R - запись остановилась с извещением notify-send. Индикатор исчез. Всё просто. До этого я пользовался неплохой утилитой SimpleScreenRecorder. Но в ней всё-таки больше телодвижений, чтобы начать и остановить запись экрана.






danwer

Утилита yt-dlp для скачивания контента с различных видеохостингов относится к утилитам МАСТ ХЭВ ! Её также удобно использовать в связке с плейером mpv, о чём я писал раннее. В интернетах рассказывается о различных способах установки yt-dlp, причём для различных версий xubuntu да и вообще для других дистрибутивов могут возникнуть нюансы во время установки и во время использования. Связано это с наличием питоновских зависимостей, а как известно в различных дистрибутивах и версии питона различные. Короче хотелось бы какой-то универсальный способ установки yt-dlp для любого дистрибутива. И такой способ есть !
Ложим в /usr/local/bin/ скрипт yt-dlp_upgrade.sh:
#!/bin/bash

# ------------------Установка/Обновление yt-dlp-----------------------

wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux -O /usr/local/bin/yt-dlp &
pid1=$!

yad --progress \
--title="       Идёт обновление yt-dlp.." \
--auto-close \
--pulsate \
--button=Отмена:35 \
--progress-text="ждём.." \
--window-icon=/usr/local/icons/app/yad/empty.png \
--image=/usr/local/icons/app/yad/yt-dlp_upgrade.png \
--geometry=400x70 &
sleep 1

#цикл, пока не завершится обновление(процесс $pid1)
while test -d /proc/$pid1/
do
sleep 0.5
if ! wmctrl -l | grep -e "      Идёт обновление yt-dlp.." ;then
kill -15 $pid1
rm -f /usr/local/bin/yt-dlp
sleep 1
yad --title="" \
--text "\nОбновление отменено! \nНедокачаный файл /usr/local/bin/yt-dlp удалён!" \
--window-icon=/usr/local/icons/app/yad/empty.png \
--image=/usr/local/icons/app/yad/warning.png \
--button=Выход:0
exit
fi
done

#Закрытие окна Yad
wmctrl -F -c "       Идёт обновление yt-dlp.."

chmod 755 /usr/local/bin/yt-dlp

yad --skip-taskbar \
--title="" \
--text "\n            Готово!                   " \
--window-icon=/usr/local/icons/app/yad/empty.png \
--image=/usr/local/icons/app/yad/info.png \
--button=OK:0


Делаем значок запуска yt-dlp_upgrade.desktop и ложим его в ~/.local/share/applications/ или в /usr/share/applications/
[Desktop Entry]
Name=
Comment= Установка/Обновление yt-dlp
Exec=bash -c 'pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY /usr/local/bin/yt-dlp_upgrade.sh'
Type=Application
Categories=AudioVideo;
Icon=/path/to/icon
Terminal=false

Должны быть предварительно установлены  wget, yad, wmctrl.
В меню whisker кликаем по значку "Установка/Обновление yt-dlp". В результате в /usr/local/bin/ появится бинарник yt-dlp, содержащий в себе все необходимые библиотеки для успешного применения на любых дистрибутивах. Этакий а-ля appimage. Всё будет работать независимо от используемого дистра. Тем не менее через какое-то время yt-dlp перестаёт корректно работать. Например во время просмотра в mpv онлайн-видео кэш прогружается только на 2-4 сек. В результате просмотр превращается в слайд-шоу. Или же вообще не запускается видео в mpv, выдавая какие-то ошибки в терминале. В этом случае запустив тот же скрипт yt-dlp_upgrade.sh, произойдёт обновление yt-dlp и всё заработает как прежде.  Всё просто ))


danwer

Настройкой xfce-панелей каждый занимается в силу своих личных предпочтений. Одним из популярных вариантов компоновки элементов на панеле является вариант когда слева значок меню Whisker, посередине часы с датой, а справа всё остальное (значки часто используемых приложений, элементы трея, системная информация и т.д.). Погуглив можно найти информацию как расположить часы именно посередине панели. В основном рекомендации сводятся к тому, чтобы с обоих сторон от часов с датой поместить разделители с функцией расширения. Есть даже видео на ютубе где юзер показывает как он это сделал. Действительно, часы с датой у него посередине панели. Лично у меня не получилось сделать чётко посередине. Но дело даже не в этом. Часы с датой не зафиксированы, а смещаются если справа в трее появляются новые значки. Чего-то я не догоняю как он реализовал без смещения. В результате экспериментов у меня всё-таки появился рабочий способ решения проблемы. Вместо одной панели нужно делать три. И да, кстати по поводу трёх панелей вместо одной тоже информация мелькала где-то в сети. 1-я панель - основная (та, где трей, системные значки и т.д.), 2-я - часы с датой, 3-я - whisker. Таким образом нужно, чтобы 1-я панель была прижата к правому краю, 3-я - к левому, а 2-я по центру. Основная идея в том, что расширяемые разделители нужно поместить не во 2-ю панель с обоих краёв, а в 1-ю и 3-ю. В 1-й панеле помещаем разделитель до всех значков, а в 3-й панеле после значка whisker. И теперь часы с датой чётко зафиксированы в центре и никуда не смещаются.





Важный нюанс. В настройках всех 3 панелей должна отсутствовать галка на "Автоматически увеличивать длину". Иначе через некоторое время становятся видны стыки на границах панелей.

Раз уж пошёл разговор о xfce-панелях, то добавлю ещё один момент. В xfce 4.18 толи баг толи непонятно что, вобщем имеется проблема с прозрачностью панели. Суть в том, что если для панели настроена какая-то прозрачность, то иногда сразу же после загрузки системы и появления панели эта прозрачность слетает и фон панели становится чёрным. В этом случае нужно перезапустить панель с помощью команды в терминале xfce4-panel -r. А чтобы не делать это вручную лучше прописать в автозапуске:
bash -c "sleep 5 && xfce4-panel -r"