февраля 08, 2023, 18:42:03

Новости:

Перейти на сайт 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. Но в ней всё-таки больше телодвижений, чтобы начать и остановить запись экрана.