debian.org / О Debian Где взять Debian Поддержка Уголок разработчика Новости Wiki

Автор Тема: Полезные и удобные GUI скрипты для Caja (scripts for Caja)  (Прочитано 6000 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Aalexeey

  • Topic Author
  • Сообщений: 418
  • ASUS_Q400A, Winmate_I771 GTK2/Qt4_MATE
Выкладываю несколько GUI скриптов для Caja. Так сказать посильный вклад в сообщество. Делались в отсутствии рядом семьи, но наличии свободного времени. Скрипты предназначены в первую очередь для недавних виндо-пользователей, каким был и я, ещё совсем недавно. Всё работает на Wheezy MATE 1.8.1 с некоторыми GTK2 пакетами из MATE 1.6. Некоторые скрипты найдены на просторах и поправлены для большего удобства, некоторые написал сам с огромными время-затратами т.к. в Bash нихрена не сображал и всё по крупицам выискивал в сети. Ссылки на подходящие иконки находятся в каждом скрипте, на ваше усмотрение.
Предложения принимаются, а разбор полётов нет, как я уже написал всё написано методом проб и ошибок (тыка), и по прежнему полируется.
Присоединяйтесь!
¹Ctrl+C_Всё_имя_объекта: (¹ - добавлена чтобы скрипт был вверху первым, ², ³ и º - только эти четыре есть во всех шрифтах)
#! /bin/bash

# AUTHOR:    (c) Aalexeey :-)
# NAME:    Ctrl+C Whole name
# DESCRIPTION:     GUI скрипт для Caja, копирующий имя файла с расширением
# REQUIRES:    xsel, mate-notification, libnotify-bin
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/actions/dialog-apply.png

#Имя выбранного файла
file=$(basename "$1")

#Записать содержимое файла (без переноса) в лог
echo -n "$file" > /tmp/ctrl_c_xsel.log
notify-send "Ctrl+C Whole name" "Имя выделенного объекта, в буфере обмена"

sleep 1

#Взять имя файла
cat /tmp/ctrl_c_xsel.log | xsel -i -b

sleep 1

#Отчистка лога
cp /dev/null /tmp/ctrl_c_xsel.log

#Удаление лога (если пользователи часто меняются)
rm /tmp/ctrl_c_xsel.log

fi
¹Ctrl+C_Имя_до_точки:
#! /bin/bash

# AUTHOR:    (c) Aalexeey :-)
# NAME:    Ctrl+C Name to point
# DESCRIPTION:     GUI скрипт для Caja, копирующий имя файла без расширения
# REQUIRES:    xsel, mate-notification, libnotify-bin
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/actions/dialog-apply.png

#Имя выбранного файла
file=$(basename "$1")

#Имя файла без расширения (и без точки)
name=${file%.*}

#Записать содержимое файла (без переноса) в лог
echo -n "$name" > /tmp/ctrl_c_xsel.log
notify-send "Ctrl+C Name to point" "Имя объекта без расширения, в буфере обмена"

sleep 1

#Взять имя файла
cat /tmp/ctrl_c_xsel.log | xsel -i -b

sleep 1

#Отчистка лога
cp /dev/null /tmp/ctrl_c_xsel.log

#Удаление лога (если пользователи часто меняются)
rm /tmp/ctrl_c_xsel.log

fi
CD&DVD_в_ISO: (Добавлено отображение модели привода)
#!/bin/bash

# AUTHOR:    (c) Caio Geraldi Conechoni, deeply modified and translated by Aalexeey :-)
# NAME:    CDtoISO
# DESCRIPTION:     GUI скрипт для dd создающий ISO образ из CD или DVD
# REQUIRES:    dd, mate-dialogs, mate-dialogs-gnome, mate-notification, libnotify-bin
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    http://www.vivaolinux.com.br/script/Criar-imagem-ISO-a-partir-de-CD , https://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/apps/rip.png

#Проверка количества примонтированных оптических приводов.
cdmounted=`mount | grep cdrom* | wc -l`

if [ $cdmounted = 0 ]; then
   zenity --warning --text="Нет примонтированных CD"
   exit
fi

if [ $cdmounted -ge 2 ]; then
   zenity --error --text="Оставьте только один \nпримонтированный CD"
   exit
fi

#Выбор каталога для сохранения образа
save_dir=$(zenity --file-selection --directory --title="Где сохраняем ISO образ?");

if [[ "$?" != 0 ]];then
   zenity --info --text="Каталог не выбран....\nCDtoISO остановлен."
   exit 0;
fi

#Выбор примонтированного привода в каталоге /dev
cdchoose=`mount | grep cdrom* | head -c 8`

#Выбор его марки в каталоге /dev/disk/by-id
cdname=`find -L /dev/disk/by-id -samefile $cdchoose | cut -c 21-`
notify-send "CDtoISO" "Привод:  $cdname"

#Считывание имени примонтированного диска
cdlabel=`find -L /dev/disk/by-label -samefile $cdchoose | tr -s '\x20',' ' '_' | tr -d '\' | cut -c 20-`

sleep 2

#Выбор имени и директории сохранения образа
zenity --question --title="Сделайте выбор" --text="Сохранить $cdlabel.iso в \n$save_dir?\n\n<b>Нет</b>, чтобы изменить папку и имя образа.\nНе допускается пробелов в имени файла!\nРасширение ...iso указывать обязательно,\nнапример Very_Large_Bootable_Image.iso"

choice=$?

if [ $choice = 0 ]; then
   output=$save_dir/$cdlabel.iso
   notify-send "CDtoISO" "Инициализация и снятие ISO образа диска,\nвызывает активность оптического привода!"
   sleep 3
#  notify-send "CDtoISO" "Копирование CD или DVD в образ\n$output\nможет занять несколько минут!"
   coproc { echo 0; dd if=$cdchoose of=$output; echo 100; }
   sleep 3
   zenity --progress --pulsate --text=" Создание ISO образа с диска....\n Может занять несколько минут!\n $cdname" --auto-close <&${COPROC[0]} || kill $!
   sleep 2
   notify-send "CDtoISO" "Создание образа завершено или прервано \n$output" &
   killall dd
else
   file=$(zenity --file-selection --save --confirm-overwrite --title="Выбор папки и имени для сохраняемого образа...");
   if [ "$?" = 1 ]; then
      zenity --info --title="Внимание" --text="Каталог не выбран....\nCDtoISO остановлен!"
      exit     
   else
      notify-send "CDtoISO" "Инициализация и снятие ISO образа диска,\nвызывает активность оптического привода!"
      sleep 3
#     notify-send "CDtoISO" "Копирование CD или DVD в образ\n$file\nможет занять несколько минут!" 
      coproc { echo 0; dd if=$cdchoose of=$file; echo 100; }
      sleep 3
      zenity --progress --pulsate --text=" Создание ISO образа с диска....\n Может занять несколько минут!\n $cdname" --auto-close <&${COPROC[0]} || kill $!
      sleep 2                         
      notify-send "CDtoISO" "Создание образа завершено или прервано \n$file" &
      killall dd
   fi
fi
EXIF_Просмотр:
#!/usr/bin/perl -w

# AUTHOR:    (c) Tuomas Kuosmanen and Jakub Steiner, modified and translated by Aalexeey :-)
# NAME:    EXIF Dump
# DESCRIPTION:     Shows various things modern digital cameras embed in the image files
#                  like exposure time and aperture and other interesting information.
# REQUIRES:    perl, jhead, mate-dialogs, mate-dialogs-gnome
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    http://www.sentex.net/~mwandel/jhead , https://debianforum.ru/index.php?topic=9141.0
#                          e-mails: tigert@ximian.com , jimmac@ximian.com
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/apps/internet-news-reader.png

use POSIX;
use Digest::MD5 qw(md5_hex);

die "Нет файлов... Лёгкая работа." unless @ARGV;

$hash = md5_hex(localtime);
$tempfile = "/tmp/foo.$hash";

foreach $file (@ARGV) {
$reply=`jhead \"$file\" 2>&1 > $tempfile`;
# print("REPLY:: $reply\n");
if ($reply =~ "прервано") {
  system("gdialog --title \"Сбой EXIF\" --msgbox \"Файл $file не содержит никакой EXIF информации.\" 100 100");
} else {
  system("gdialog --title \"EXIF для $file\" --textbox $tempfile 62 52");
}
}
system("rm $tempfile");
PDF_Сжать:
#! /bin/bash

# AUTHOR:    (c) Ricardo Ferreira, modified and translated by Aalexeey :-)
# NAME:    PDF Compress
# DESCRIPTION:     GUI скрипт для Caja оптимизирующий PDF файлы
# REQUIRES:    ghostscript, poppler-utils, mate-dialogs, mate-dialogs-gnome, mate-notification, libnotify-bin
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://launchpad.net/compress-pdf , https://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/apps/adobe-reader.png

#Сообщения
case $LANG in

ru* )
# Russian (ru-RU)
error_nofiles="Не выбран файл."
error_noquality="Вы отказались от оптимизации."
error_ghostscript="Скрипт использует ghostscript,\nкоторый не установлен."
error_nopdf="Выбранный файл не содержит признаков PDF."
label_filename="Сохранить PDF как..."
label_level="Выберите уровень оптимизации..."
optimization_level="Уровень оптимизации"
level_default="Нормальное качество"
level_screen="Экранное качество"
level_low="Низкое качество"
level_high="Высокое качество"
level_color="Наилучшее качество"
job_done="удачно уменьшен/оптимизирован";;

esac

ZENITY=$(which zenity)

#Имя выбранного файла
filename=$(basename "$1")

#Расширение файла (без точки)
extension=${filename##*.}

#Имя файла без расширения (и без точки)
pdf_file=${filename%.*}

#Проверить установлен ли Ghostscript
GS="/usr/bin/ghostscript"
if [ ! -x $GS ]; then
        $ZENITY --error --text="$error_ghostscript"
        exit 0;
fi

#Проверить выбран ли какойнибудь файл
if [ -z "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then
        $ZENITY --warning --text="$error_nofiles"
        exit 0;
fi
 
#Убедится что выбран PDF файл
mimetype=$(file -b -i "$1")
if [ -z "`echo $mimetype | grep -i 'pdf' `" ]; then
$ZENITY --warning --text="$error_nopdf"
        exit 0;
fi

#Спросить пользователя выбрать уровень оптимизации
selected_level=$($ZENITY  --list  --title="PDF Compress" --text "$label_level" --radiolist  --column "" --column "$optimization_level" TRUE "$level_default" FALSE "$level_screen" FALSE "$level_low" FALSE "$level_high" FALSE "$level_color")
if [ -z "$selected_level" ]; then
        $ZENITY --error --title="PDF Compress" --text="$error_noquality"
        exit 0;
fi

#Выбор уровня оптимизации
case $selected_level in
        "$level_default")
                COMP_COMMAND="/default"
        ;;
        "$level_screen")
                COMP_COMMAND="/screen"
        ;;
        "$level_low")
                COMP_COMMAND="/ebook"
        ;;
        "$level_high")
                COMP_COMMAND="/printer"
        ;;
        "$level_color")
                COMP_COMMAND="/prepress"
        ;;
esac

#Выбор имени сохраняемого файла
temp_filename="$pdf_file"_"$extension".temp
suggested_filename="$pdf_file"[small]."$extension"
output_filename=$($ZENITY --file-selection --save --confirm-overwrite --filename="$suggested_filename" --title="$label_filename")

if [ "$?" = 1 ] ; then
        exit 0;
fi

#Извлечь metadata из PDF файла
pdfinfo "$1" | sed -e 's/^ *//;s/ *$//;s/ \{1,\}/ /g' -e 's/^/  \//' -e '/CreationDate/,$d' -e 's/$/)/' -e 's/: / (/' > .pdfmarks
sed -i '1s/^ /[/' .pdfmarks
sed -i '/:)$/d' .pdfmarks
echo "  /DOCINFO pdfmark" >> .pdfmarks

#Запустить ghostscript одновременно с панелью состояния
(echo "0" ;
 gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=$COMP_COMMAND -dNOPAUSE -dQUIET -dBATCH -sOutputFile="$temp_filename" "$1" .pdfmarks
 rm .pdfmarks
 echo "100") | (if `$ZENITY --progress --no-cancel --pulsate --auto-close --text="Выполняется компрессия pdf файла...." --width=300`;
                 then
                     mv -f "$temp_filename" "$output_filename" &
                     notify-send "PDF Compress" "$pdf_file.$extension\n$job_done"
                 else
                     killall gs
                     rm "$temp_filename"
                     exit
                 fi)
A2[4xA4]Плакат: (Пацану в школу надо было напечатать плакат :'(, вот тут всё интересное и началось  ???)
#!/bin/bash

# AUTHOR:    (c) Aalexeey :-)
# NAME:    A2[4xA4]Poster
# DESCRIPTION:     GUI скрипт для Caja, создаёт из изображения постер A2
# REQUIRES:    imagemagick, mate-dialogs, mate-dialogs-gnome, mate-notification, libnotify-bin
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome/16x16/actions/edit-cut.png

IFS=$'\t\n';

function jpg2png {

#Определение размеров оригинала
imageheight=$(identify -format "%h" $fileselect);
imagewidth=$(identify -format "%w" $fileselect);

name=$(basename $fileselect);
if [ $imageheight -ge $imagewidth ]; then
   (
   echo
   convert -quality 100 poster.png -resize 2362x3340 +repage -crop 2x2@ +adjoin -units PixelsPerInch -density 150 $fileselect $save_dir/${name%%.*}.png
   ) | zenity --progress --no-cancel --pulsate --text=" Разделяю на четыре листа A4\n $name" --auto-close
   notify-send "A2[4xA4]Poster" "Ваши четыре PNG файла сейчас в каталоге\n$save_dir"
# Здесь 100 — качество, 2362x3340 - условный размер A2 при dpi150, 2x2@ — на сколько⨯сколько разбить (A2 состоит из 4xA4)
fi

if [ $imageheight -lt $imagewidth ]; then
   (
   echo
   convert -quality 100 poster.png -resize 3340x2362 +repage -crop 2x2@ +adjoin -units PixelsPerInch -density 150 $fileselect $save_dir/${name%%.*}.png
   ) | zenity --progress --no-cancel --pulsate --text=" Разделяю на четыре листа A4\n $name" --auto-close
   notify-send "A2[4xA4]Poster" "Ваши четыре PNG файла сейчас в каталоге\n$save_dir"
# Здесь 100 — качество, 3340x2362 - условный размер A2 при dpi150, 2x2@ — на сколько⨯сколько разбить (A2 состоит из 4xA4)
fi
}

# Если ничего не выбрано то сразу выходим из программы
if [[ $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS == "" ]];
then
zenity --warning --text="Ничего не выбрано\!\nРабота сценария закончена\!";
exit 0;
else

# Выбор каталога для сохранения изображений
save_dir=$(zenity --file-selection --directory --title="Где сохраняем?");

if [[ "$?" != 0 ]]
then
zenity --warning --text="Каталог для сохраниния не выбран!\n\nРабота скрипта прекращена!"
exit 0;
fi

# Цыкл перебора выделенных файлов
for fileselect in `echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"`
do

# Если выделенный файл jpg
if [[ $fileselect =~ \.jpg ]] || [[ $fileselect =~ \.JPG ]] || [[ $fileselect =~ \.jpeg ]] || [[ $fileselect =~ \.JPEG ]] || [[ $fileselect =~ \.png ]] || [[ $fileselect =~ \.PNG ]]
then

# то вызываем функцию конвертирования
jpg2png

else
notify-send "A2[4xA4]Poster" "$(basename $fileselect) не PNG или JPG файл\nРабота скрипта досрочно прервана!"

fi
done
sleep 2
zenity --width 200 --info --text="Работа завершена....";

fi
Hash_Сумма: (было удалено предложение посетить Google)  :P
#!/bin/bash

# AUTHOR:    (c) Sergei Chistyakov, modified by Aalexeey :-)
# NAME:    Hash Sum
# DESCRIPTION:     GUI для проверки хеша md5/sha1/sha256
# REQUIRES:    mate-dialogs, mate-dialogs-gnome, libnotify-bin
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://debianforum.ru/index.php?topic=9141.0
#                          e-mail: cooleech@gmail.com
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/mimetypes/text-x-readme.png

HConFile="$HOME/.HashCheck/HC.conf"
SavedSettings=`cat $HConFile`

which xdg-user-dirs-update
if [ $? = 0 ]; then
. ~/.config/user-dirs.dirs # Import variables
fi

# Set desktop icon dir
if [ "$XDG_DESKTOP_DIR" = "" ]; then
if [ -d "$HOME/Desktop" ]; then
XDG_DESKTOP_DIR="$HOME/Desktop"
else
XDG_DESKTOP_DIR="$HOME"
fi
fi

if [ -e $HConFile ]; then
. $HConFile # Import variables
fi

if [ "$1" = "" ]; then
SelectedFile=`zenity --title="Укажите файл для подсчёта" --file-selection`
fi

if [ "$SelectedFile" = "" ]; then
if [ $# -gt 1 ]; then
zenity --error --text="Вы должны указать только один файл"
exit 1
fi
if [ "$1" = "" ]; then
exit 1
fi
fi

if [ -d "$1" ]; then
zenity --error --text="<b>$1</b> это каталог.
Этот скрипт не работает с каталогами!"
exit 1
fi

if [ "$SelectedFile" = "" ]; then
SelectedFile="$1"
fi

SelectedFileNameFix="${SelectedFile//'&'/&amp;}" # Fix for ampersand simbol

if [ `stat --printf="%s" "$SelectedFile"` = "0" ]; then
zenity --warning --text="<b>$SelectedFileNameFix</b> 0 байт!
Хэш проверка для данного файла не имеет смысла!"
exit 1
fi

if [ -d "${SelectedFile%/*}" ]; then # Check if dir or file
FileNoPath="${SelectedFileNameFix##*/}"
FilePath="${SelectedFile%/*}/" # md5sum, sha1sum and sha256sum need file path
else
FileNoPath="$SelectedFileNameFix"
FilePath="./" # md5sum, sha1sum and sha256sum need file path
fi

function DELETE_OLD_HASH_FILE {
zenity --question --title="Hash Sum" --text="Найден старый хеш-файл:\n<b>$FileNoPath$HashFile</b>\n\nЖелаете удалить его (рекомендуется)?" \

if [ $? = 0 ]; then
rm -f "$SelectedFile$HashFile" # Must keep path
fi
}

if [ -e "$SelectedFile".md5sum ]; then # Must keep path
HashFile=".md5sum"
DELETE_OLD_HASH_FILE
fi

if [ -e "$SelectedFile".sha1sum ]; then # Must keep path
HashFile=".sha1sum"
DELETE_OLD_HASH_FILE
fi

if [ -e "$SelectedFile".sha256sum ]; then # Must keep path
HashFile=".sha256sum"
DELETE_OLD_HASH_FILE
fi

# Get last states
if [ "$MD5_HASH_CHECKED" = "" ]; then
MD5state="TRUE"
else
MD5state="$MD5_HASH_CHECKED"
fi

if [ "$SHA1_HASH_CHECKED" = "" ]; then
SHA1state="FALSE"
else
SHA1state="$SHA1_HASH_CHECKED"
fi

if [ "$SHA256_HASH_CHECKED" = "" ]; then
SHA256state="FALSE"
else
SHA256state="$SHA256_HASH_CHECKED"
fi

if [ "$SAVE_TO_TEXT_FILE" = "" ]; then
TextFileState="FALSE"
else
TextFileState="$SAVE_TO_TEXT_FILE"
fi

if [ -r "$SelectedFile" ]; then
TypeOfHash=`zenity --width=400 --height=250 --list --checklist --title="Hash Sum" --text="Выберите алгоритм хеширования для <b>$FileNoPath</b> файла" \
--column "Что" --column "проверяем" $MD5state MD5 $SHA1state SHA1 $SHA256state SHA256 $TextFileState "Результат записать в текстовый файл"`
else
zenity --error --text "У Вас нет прав для чтения данного файла!"
exit 1
fi

if ! [ -e "$SelectedFile" ]; then
zenity --error --text "Файл <b>$FileNoPath</b> не найден!\nВозможно файл переименован, удалёнили перемещён!"
exit 1
fi
# Reset all
MD5state="FALSE"
SHA1state="FALSE"
SHA256state="FALSE"
TextFileState="FALSE"

case $TypeOfHash in
MD5*) # MD5 with any other
MD5state="TRUE"
(
echo "# Проверка MD5 хэш. Пожалуйста подождите, в зависимости от размера файла '$FileNoPath'\nи производительности вашего ПК, подсчет может занять некоторое время..."
md5sum "$SelectedFile" > /tmp/"$FileNoPath".md5sum
) | zenity --width="400" --progress --title="Проверка MD5 хэш" --text="" --percentage=0 --auto-close --no-cancel --pulsate
esac

case $TypeOfHash in
*SHA1*) # SHA1 with any other
SHA1state="TRUE"
(
echo "# Проверка SHA1 хэш. Пожалуйста подождите, в зависимости от размера файла '$FileNoPath'\nи производительности вашего ПК, подсчет может занять некоторое время..."
sha1sum "$SelectedFile" > /tmp/"$FileNoPath".sha1sum
) | zenity --width="400" --progress --title="Проверка SHA1 хэш" --text="" --percentage=0 --auto-close --no-cancel --pulsate
esac

case $TypeOfHash in
*SHA256*) # SHA256 with any other
SHA256state="TRUE"
(
echo "# Проверка SHA256 хэш. Пожалуйста подождите, в зависимости от размера файла '$FileNoPath'\nи производительности вашего ПК, подсчет может занять некоторое время..."
sha256sum "$SelectedFile" > /tmp/"$FileNoPath".sha256sum
) | zenity --width="400" --progress --title="Проверка SHA256 хэш" --text="" --percentage=0 --auto-close --no-cancel --pulsate
esac

case $TypeOfHash in
*Сохранить*) # Save in text file with any other
TextFileState="TRUE"
esac

case $TypeOfHash in
Сохранить*) # Save in text file only
exit 1
esac

case $TypeOfHash in
"") # No selection
exit 1
esac

CurrentSettings="# HASH CHECKER SETTINGS

MD5_HASH_CHECKED=$MD5state
SHA1_HASH_CHECKED=$SHA1state
SHA256_HASH_CHECKED=$SHA256state
SAVE_TO_TEXT_FILE=$TextFileState"

if [ ! "$SavedSettings" = "$CurrentSettings" ]; then
echo "$CurrentSettings" > $HConFile
fi

if [ -e /tmp/"$FileNoPath".md5sum ]; then
MD5hash=`cat /tmp/"$FileNoPath".md5sum`
MD5WithoutPath="${MD5hash%%  $SelectedFile}"
else
MD5WithoutPath="N/A"
fi

if [ -e /tmp/"$FileNoPath".sha1sum ]; then
SHA1hash=`cat /tmp/"$FileNoPath".sha1sum`
SHA1WithoutPath="${SHA1hash%%  $SelectedFile}"
else
SHA1WithoutPath="N/A"
fi

if [ -e /tmp/"$FileNoPath".sha256sum ]; then
SHA256hash=`cat /tmp/"$FileNoPath".sha256sum`
SHA256WithoutPath="${SHA256hash%%  $SelectedFile}"
else
SHA256WithoutPath="N/A"
fi

if [ "$TextFileState" = "TRUE" ]; then
if [ -e /tmp/"$FileNoPath".md5sum ]; then
md5hashFile=`cat /tmp/"$FileNoPath".md5sum`
echo "$md5hashFile" >> "$SelectedFile".md5sum
fi
if [ -e /tmp/"$FileNoPath".sha1sum ]; then
sha1hashFile=`cat /tmp/"$FileNoPath".sha1sum`
echo "$sha1hashFile" >> "$SelectedFile".sha1sum
fi
if [ -e /tmp/"$FileNoPath".sha256sum ]; then
sha256hashFile=`cat /tmp/"$FileNoPath".sha256sum`
echo "$sha256hashFile" >> "$SelectedFile".sha256sum
fi
fi

zenity --info --title="Hash Sum" --no-wrap --text="Файл: <b>$FileNoPath</b>
\nMD5 hash: <b>$MD5WithoutPath</b>\nSHA1 hash: <b>$SHA1WithoutPath</b>\nSHA256 hash: <b>$SHA256WithoutPath</b>"

if [ $? = 0 ]; then
   fi
fi

# Cleanup /tmp
if [ -e /tmp/"$FileNoPath".md5sum ]; then
rm -f /tmp/"$FileNoPath".md5sum
fi
if [ -e /tmp/"$FileNoPath".sha1sum ]; then
rm -f /tmp/"$FileNoPath".sha1sum
fi
if [ -e /tmp/"$FileNoPath".sha256sum ]; then
rm -f /tmp/"$FileNoPath".sha256sum
fi

exit 0
MD5_Сумма:
#!/usr/bin/perl

# AUTHOR:    (c)Brian Connelly, modified and translated by Aalexeey :-)
# NAME:    MD5 Sum
# DESCRIPTION:     GUI скрипт для Caja, определяет MD5
# REQUIRES:    perl, mate-dialogs, mate-dialogs-gnome
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://debianforum.ru/index.php?topic=9141.0
#                          e-mails: pub@bconnelly.net, connelly@purdue.edu
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/mimetypes/text-x-readme.png

$script_title="MD5 Sum";
$temp_file = "/tmp/md5" . "-" . `date +'%s'`;

if(!@ARGV)
{
system("gdialog --title \"$SCRIPT_TITLE Error\" --msgbox \"Файл не выбран\" 400 400 2>&1");
exit;
}

$num_files = @ARGV;

if($num_files < 30)
{
  $num_rows = $num_files * 5;
}
elsif($num_files < 100)
{
  $num_rows = $num_files
}
else
{
#Убедитесь что выходное окно не слишком большое
  $num_rows = 80;
}

foreach $file (@ARGV)
{
if(-d $file)
{
system("echo \"Не возможно вывести MD5 сумму для каталога '$file'\" 2>&1 >> $temp_file");
}
else
{
system("md5sum \"$file\" 2>&1 >> $temp_file");
}
}

chomp($temp_file);
system("gdialog --title \"$script_title Результат\" --textbox $temp_file $num_rows 80 2>&1");

system("rm $temp_file");
PNG&JPG_в_PDF: (Сохраняется оригинальное разрешение и соответственно размер при печати)
#!/bin/bash

# AUTHOR:    (c) Aalexeey :-)
# NAME:    PNG&JPGtoPDF
# DESCRIPTION:     GUI скрипт для Caja, конвертирует png и jpg в pdf
# REQUIRES:    imagemagick, mate-dialogs, mate-dialogs-gnome, mate-notification, libnotify-bin
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/apps/conduit.png

IFS=$'\t\n';

function jpg2pdf {

#Определение и округление до целого разрешения оригинала
xresolution=$(identify -units PixelsPerInch -format "%x" $fileselect | head -c 5 | tr " ","[:alpha:]" ".","0");
xrounded=$(echo "($xresolution + 1.5)/1" | bc);
yresolution=$(identify -units PixelsPerInch -format "%y" $fileselect | head -c 5 | tr " ","[:alpha:]" ".","0");
yrounded=$(echo "($yresolution + 1.5)/1" | bc);

name=$(basename $fileselect);
(
echo
convert -quality 100 -units PixelsPerInch -density $xroundedx$yrounded $fileselect $save_dir/${name%%.*}.pdf
) | zenity --progress --no-cancel --pulsate --text=" Конвертирую выбранный файл\n $name" --auto-close
notify-send "PNG_JPGtoPDF" "Ваш файл ${name%%.*}.pdf\nв каталоге $save_dir"
}

# Если ничего не выбрано то сразу выходим из программы
if [[ $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS == "" ]];
then
zenity --warning --text="Ничего не выбрано\!\nРабота сценария закончена\!";
exit 0;
else

# Выбор каталога для сохранения изображений
save_dir=$(zenity --file-selection --directory --title="Где сохраняем?");

if [[ "$?" != 0 ]]
then
zenity --warning --text="Каталог для сохраниния не выбран!\n\nРабота скрипта прекращена!"
exit 0;
fi

# Цыкл перебора выделенных файлов
for fileselect in `echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"`
do

# Если выделенный файл png или jpg
if [[ $fileselect =~ \.png ]] || [[ $fileselect =~ \.PNG ]] || [[ $fileselect =~ \.jpg ]] || [[ $fileselect =~ \.JPG ]] || [[ $fileselect =~ \.jpeg ]] || [[ $fileselect =~ \.JPEG ]]
then

# то вызываем функцию конвертирования
jpg2pdf

else
notify-send "PNG_JPGtoPDF" "$(basename $fileselect) не PNG или JPG файл\nРабота скрипта досрочно прервана!"

fi
done
sleep 2
zenity --width 200 --info --text="Работа завершена....";

fi
PNG&PDF_в_JPG: (Сохраняется оригинальное разрешение и соответственно размер при печати)
#!/bin/bash

# AUTHOR:    (c) Aalexeey :-)
# NAME:    PDF&PNGtoJPG
# DESCRIPTION:     GUI скрипт для Caja, конвертирует pdf и png в jpg
# REQUIRES:    imagemagick, mate-dialogs, mate-dialogs-gnome, mate-notification, libnotify-bin
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/apps/conduit.png

IFS=$'\t\n';

function pdf2jpg {

#Определение и округление до целого разрешения оригинала
xresolution=$(identify -units PixelsPerInch -format "%x" $fileselect | head -c 5 | tr " ","[:alpha:]" ".","0");
xrounded=$(echo "($xresolution + 1.5)/1" | bc);
yresolution=$(identify -units PixelsPerInch -format "%y" $fileselect | head -c 5 | tr " ","[:alpha:]" ".","0");
yrounded=$(echo "($yresolution + 1.5)/1" | bc);

name=$(basename $fileselect);
(
echo
convert -quality 100 -units PixelsPerInch -density $xroundedx$yrounded $fileselect $save_dir/${name%%.*}.jpg
) | zenity --progress --no-cancel --pulsate --text=" Конвертирую выбранный файл\n $name" --auto-close
notify-send "PDF_PNGtoJPG" "Ваш файл ${name%%.*}.jpg\nв каталоге $save_dir"
}

# Если ничего не выбрано то сразу выходим из программы
if [[ $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS == "" ]];
then
zenity --warning --text="Ничего не выбрано\!\nРабота сценария закончена\!";
exit 0;
else

# Выбор каталога для сохранения изображений
save_dir=$(zenity --file-selection --directory --title="Где сохраняем?");

if [[ "$?" != 0 ]]
then
zenity --warning --text="Каталог для сохраниния не выбран!\n\nРабота скрипта прекращена!"
exit 0;
fi

# Цыкл перебора выделенных файлов
for fileselect in `echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"`
do

# Если выделенный файл pdf или png
if [[ $fileselect =~ \.pdf ]] || [[ $fileselect =~ \.PDF ]] || [[ $fileselect =~ \.png ]] || [[ $fileselect =~ \.PNG ]]
then

# то вызываем функцию конвертирования
pdf2jpg

else
notify-send "PDF_PNGtoJPG" "$(basename $fileselect) не PDF или PNG файл\nРабота скрипта досрочно прервана!"

fi
done
sleep 2
zenity --width 200 --info --text="Работа завершена....";

fi
JPG&PDF_в_PNG: (Сохраняется оригинальное разрешение и соответственно размер при печати)
#!/bin/bash

# AUTHOR:    (c) Aalexeey :-)
# NAME:    JPG&PDFtoPNG
# DESCRIPTION:     GUI скрипт для Caja, конвертирует jpg и pdf в png
# REQUIRES:    imagemagick, mate-dialogs, mate-dialogs-gnome, mate-notification, libnotify-bin
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/apps/conduit.png

IFS=$'\t\n';

function jpg2png {

#Определение и округление до целого разрешения оригинала
xresolution=$(identify -units PixelsPerInch -format "%x" $fileselect | head -c 5 | tr " ","[:alpha:]" ".","0");
xrounded=$(echo "($xresolution + 1.5)/1" | bc);
yresolution=$(identify -units PixelsPerInch -format "%y" $fileselect | head -c 5 | tr " ","[:alpha:]" ".","0");
yrounded=$(echo "($yresolution + 1.5)/1" | bc);

name=$(basename $fileselect);
(
echo
convert -quality 100 -units PixelsPerInch -density $xroundedx$yrounded $fileselect $save_dir/${name%%.*}.png
) | zenity --progress --no-cancel --pulsate --text=" Конвертирую выбранный файл\n $name" --auto-close
notify-send "JPG_PDFtoPNG" "Ваш файл ${name%%.*}.png\nв каталоге $save_dir"
}

# Если ничего не выбрано то сразу выходим из программы
if [[ $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS == "" ]];
then
zenity --warning --text="Ничего не выбрано\!\nРабота сценария закончена\!";
exit 0;
else

# Выбор каталога для сохранения изображений
save_dir=$(zenity --file-selection --directory --title="Где сохраняем?");

if [[ "$?" != 0 ]]
then
zenity --warning --text="Каталог для сохраниния не выбран!\n\nРабота скрипта прекращена!"
exit 0;
fi

# Цыкл перебора выделенных файлов
for fileselect in `echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"`
do

# Если выделенный файл pdf или jpg
if [[ $fileselect =~ \.pdf ]] || [[ $fileselect =~ \.PDF ]] || [[ $fileselect =~ \.jpg ]] || [[ $fileselect =~ \.JPG ]] || [[ $fileselect =~ \.jpeg ]] || [[ $fileselect =~ \.JPEG ]]
then

# то вызываем функцию конвертирования
jpg2png

else
notify-send "JPG_PDFtoPNG" "$(basename $fileselect) не PDF или JPG файл\nРабота скрипта досрочно прервана!"

fi
done
sleep 2
zenity --width 200 --info --text="Работа завершена....";

fi
« Последнее редактирование: 22 Март 2017, 21:49:19 от Aalexeey »
https://debianforum.ru/index.php?topic=6879 100% защиты от "Ааааа у меня всё поломалось"
 
Пользователи, которые поблагодарили этот пост: ulyssesd

Оффлайн Aalexeey

  • Topic Author
  • Сообщений: 418
  • ASUS_Q400A, Winmate_I771 GTK2/Qt4_MATE
MO‹–›PO: (конвертирует файлы локализаций mo и po, облегчает использование Poedit)
#!/bin/bash

# AUTHOR:    (c) Abhijit Jathar, modified and translated by Aalexeey :-)
# NAME:    MO PO Converter
# DESCRIPTION:     GUI скрипт для Caja, конвертирует po в mo и наоборот
# REQUIRES:    gettext, mate-dialogs, mate-dialogs-gnome, mate-notification, libnotify-bin
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://launchpad.net/mopoco , https://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/apps/conduit.png

fileselect="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS";
name=$(basename $fileselect);

if [ $# = 0 ]
then
        zenity --error --text="Файл не выбран!"
        exit 0;
fi

# Если выделенный файл po или mo
if [[ $fileselect =~ \.mo ]] || [[ $fileselect =~ \.MO ]] || [[ $fileselect =~ \.po ]] || [[ $fileselect =~ \.PO ]]
then

# то вызываем функцию конвертирования
        for file in $*
        do
          filename=`echo $file | cut -f1 -d.`
          extn=`echo $file | cut -f2 -d.`
          #echo $extn
          if [ "$extn" = "mo" ]
          then
                #echo "MO -> PO"
                out1=`echo "MO конвертирован в PO\n$file -> $filename.po"`
                out2=`nohup msgunfmt -v -o $filename.po $file | zenity --progress --no-cancel --pulsate --text=" Конвертирую файл\n $name" --auto-close`
          elif [ "$extn" = "po" ]
          then
        #echo "PO -> MO"
        out1=`echo "PO конвертирован в MO\n$file -> $filename.mo"`
        out2=`nohup msgfmt -c -v -o $filename.mo $file | zenity --progress --no-cancel --pulsate --text=" Конвертирую файл\n $name" --auto-close`
          fi
          out=`echo -ne $out1 $out2`
          done
          #echo $out
echo -ne "Следующие операции выполнены:\r$out" | zenity --text-info --title='PO_MO_Конвертер' --width 300

else
notify-send "PO_MO_Конвертер" "'$name' не MO или PO файл\nРабота скрипта досрочно прервана!"
fi
Process_Killer:
#!/bin/bash

# AUTHOR:    (c) Cezar Matei, modified and translated by Aalexeey :-)
# NAME:    Process Killer
# DESCRIPTION:     GUI скрипт для Caja принудительно завершающий процесс/приложение
# REQUIRES:    mate-dialogs, mate-dialogs-gnome
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/actions/process-stop.png

#Сообщения
case $LANG in

ru* )
# Russian (ru-RU)
sel_proc="Выбирете процесс для остановки:"
list_all="Все"
        proc_s="Процессы"
        of_u="пользователя"
        proc="Процесс"
        pid="с pid"
        was_k="был остановлен"
        not_f="<b>не</b>\nбыли остановленны"
        cancel="Остановка отменена....";;

esac

process=`ps -u $USER | sed 's/  PID TTY/PID TTY  /' | sed 's/?/?       /' | zenity --list --column "$sel_proc" --text=" $proc_s $of_u <b>$USER</b>:" --width 400 --height 570`

ans=`echo $?`

if test "$ans" -eq "0" ;
then

select=`echo $process | cut -d" " -f1`

kill -KILL $select
ans1=`echo $?`
if [ "$ans1" == "0" ] ;
then
select1=`echo $process | cut -d":" -f3  | cut -d" " -f2`
            slt1=`echo $select1 | head -c 6`
  echo | zenity --info --text="$proc <b>$slt1</b>.... $pid\n<b>$select</b> $was_k!" --width 200 --height 100
else
  echo | zenity --error --text="$proc_s $pid $not_f!" --width 200 --height 100
fi
exit 0
  fi

if test "$ans" -eq "1" ;
then
echo | zenity --warning --text="$cancel" --width 200 --height 100
exit 0
fi
°USB_Извлечь:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# AUTHOR:    (c) P.L. Lucas, modified and translated by Aalexeey :-)
# NAME:    USB Detach
# DESCRIPTION:     GUI скрипт для Caja, безопастное извлечение USB
# REQUIRES:    python, python-gtk2
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/actions/media-eject.png

import shlex, subprocess
import pygtk
pygtk.require('2.0')
import gtk
import os
import dbus


class USBsGUI:


        def delete_event(self, widget, event, data=None):
                return False


        def destroy(self, widget, data=None):
                gtk.main_quit()
       
        def get_active_text(self, combobox):
                model = combobox.get_model()
                active = combobox.get_active()
                if active < 0:
                        return None
                return model[active][0]
       
        def get_devices_list(self):
                model=self.seats_treeview.get_model()
                seats_usbs_list=[]
                n=0
                for seat_iter in self.iter_seats_list:
                        if model.iter_has_child(seat_iter):
                                usb_iter=model.iter_children(seat_iter)
                        else:
                                usb_iter=None
                        seats_usbs_list.append([])
                        x=0
                        while usb_iter!=None:
                                seats_usbs_list[n].append(str(model[usb_iter][0]))
                                x+=1
                                usb_iter=model.iter_next(usb_iter)
                        n+=1
                return seats_usbs_list


        def umount_callback(self, widget, data=None):
                (model_usb, iter_usb) = self.ubs_treeview.get_selection().get_selected()
                usb=model_usb.get_value(iter_usb,0)
                #print usb
                try:
                        unmount_and_detach(usb)
                except:
                        md = gtk.MessageDialog(self.window, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO,  gtk.BUTTONS_CLOSE, "Сбой: Невозможно извлечь устройство")
                        md.run()
                        md.destroy()
                self.reload_callback(widget)
       
        def reload_callback(self, widget, data=None):
                model=self.ubs_treeview.get_model()
                iters=[]
                itera=model.get_iter_first()
                while itera!=None:
                        iters.append(itera)
                        itera=model.iter_next(itera)
                for itera in iters:
                        path = model.get_path(itera)
                        model.remove(itera)
                        model.row_deleted(path)
                for usb in usb_list():
                        model.append(None, usb)
       
        def init_treeview(self, labels):
                treestore = gtk.TreeStore(str, str)
                # create the TreeView using treestore
                treeview = gtk.TreeView(treestore)
                n=0
                for label in labels:
                        if label!=None:
                                # create the TreeViewColumn to display the data
                                tvcolumn = gtk.TreeViewColumn(label)
                                # add tvcolumn to treeview
                                treeview.append_column(tvcolumn)
                                # create a CellRendererText to render the data
                                cell = gtk.CellRendererText()
                                # add the cell to the tvcolumn and allow it to expand
                                tvcolumn.pack_start(cell, True)
                                # set the cell "text" attribute to column n - retrieve text
                                # from that column in treestore
                                tvcolumn.add_attribute(cell, 'text', n)
                        n+=1
                # make it searchable
                treeview.set_search_column(0)
                # Allow sorting on the column
                tvcolumn.set_sort_column_id(0)
                treeview.get_selection().set_mode(gtk.SELECTION_SINGLE)
                return treeview
       
        def init_gui_area(self):
                # create the TreeView using treestore
                self.ubs_treeview = self.init_treeview([None, 'Mount point'])
               
                #self.scrolled_window=self.init_usb_list_gui()
                vbox=gtk.VBox()
                hbox=gtk.HBox()
                vbox.pack_start(hbox, True, True)
                vbox1=gtk.VBox()
               
                hbox.pack_start(vbox1, True, True)
               
                scrolled_window = gtk.ScrolledWindow(hadjustment=None, vadjustment=None)
                scrolled_window.add_with_viewport(self.ubs_treeview)
                scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
                scrolled_window.show()
                vbox1.pack_start(scrolled_window, True, True)
               
                remove_button=gtk.Button(stock=gtk.STOCK_REMOVE)
                remove_button.connect("clicked", self.umount_callback, None)
                vbox1.pack_start(remove_button, False, False)
                remove_button.show()
               
                refresh_button=gtk.Button(stock=gtk.STOCK_REFRESH)
                refresh_button.connect("clicked", self.reload_callback, None)
                vbox1.pack_start(refresh_button, False, False)
                refresh_button.show()
                refresh_button.connect("clicked", self.reload_callback, None)
               
                hbox.show_all()
                vbox1.show_all()
                vbox.show_all()
               
                return vbox


        def __init__(self):
                pass
       
        def init_window(self):
                # create a new window
                self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
                self.window.connect("delete_event", self.delete_event)
                self.window.connect("destroy", self.destroy)
                self.window.set_border_width(10)
                self.window.add(self.init_gui_area())
                # and the window
                self.window.resize(300,300)
                self.window.show()
                self.reload_callback(None)


        def main(self):
                gtk.main()






#This function looks for usb pendrives connected to this computer and returns a list with host plugged
def usb_list():
        usb_list=parse_udisks()
        return usb_list


def list_partitions(bus, devices, parent_path):
        partitions_list=[]
        for path in devices:
                if path.startswith(parent_path):
                        udisks_device = bus.get_object("org.freedesktop.UDisks", path)
                        if udisks_device!=None:
                                device_props = dbus.Interface(udisks_device, dbus.PROPERTIES_IFACE)
                                drive_ok=device_props.Get('org.freedesktop.UDisks.Device', "DeviceIsDrive")
                                if not drive_ok:
                                        for mount_path in device_props.Get('org.freedesktop.UDisks.Device', "DeviceMountPaths"):
                                                partitions_list.append(mount_path)
        if len(partitions_list)==0:
                        partitions_list.append(parent_path)
        return partitions_list


def parse_udisks():
        usb_list=[]
        bus = dbus.SystemBus()
        udisks = bus.get_object("org.freedesktop.UDisks", "/org/freedesktop/UDisks")
        udisks = dbus.Interface(udisks, 'org.freedesktop.UDisks')
        devices = udisks.get_dbus_method('EnumerateDevices')()
        for path in devices:
                udisks_device = bus.get_object("org.freedesktop.UDisks", path)
                if udisks_device!=None:
                        device_props = dbus.Interface(udisks_device, dbus.PROPERTIES_IFACE)
                        native_path=device_props.Get('org.freedesktop.UDisks.Device', "NativePath")
                        can_detach=device_props.Get('org.freedesktop.UDisks.Device', "DriveCanDetach")
                        available=device_props.Get('org.freedesktop.UDisks.Device', "DeviceIsMediaAvailable")
                        drive_ok=device_props.Get('org.freedesktop.UDisks.Device', "DeviceIsDrive")
                        if 'usb' in native_path and can_detach and available and drive_ok:
                                #print path
                                partitions_list=list_partitions(bus, devices, path)
                                for partition in partitions_list:
                                        usb_list.append([path, partition])
        return usb_list


def unmount_and_detach(parent_path):
        bus = dbus.SystemBus()
        udisks = bus.get_object("org.freedesktop.UDisks", "/org/freedesktop/UDisks")
        udisks = dbus.Interface(udisks, 'org.freedesktop.UDisks')
        devices = udisks.get_dbus_method('EnumerateDevices')()
        for path in devices:
                if path.startswith(parent_path):
                        udisks_device = bus.get_object("org.freedesktop.UDisks", path)
                        if udisks_device!=None:
                                device_props = dbus.Interface(udisks_device, dbus.PROPERTIES_IFACE)
                                drive_ok=device_props.Get('org.freedesktop.UDisks.Device', "DeviceIsDrive")
                                mounted_ok=device_props.Get('org.freedesktop.UDisks.Device', "DeviceIsMounted")
                                if not drive_ok and mounted_ok:
                                        #print path
                                        device_methods = dbus.Interface(udisks_device, 'org.freedesktop.UDisks.Device')
                                        device_methods.get_dbus_method('FilesystemUnmount')('')
        udisks_device = bus.get_object("org.freedesktop.UDisks", parent_path)
        device_methods = dbus.Interface(udisks_device, 'org.freedesktop.UDisks.Device')
        return device_methods.get_dbus_method('DriveDetach')('')


if __name__ == "__main__":
        gui = USBsGUI()
        gui.init_window()
        gui.main()
°Открыть_как_Text:
#!/bin/bash

# AUTHOR:    (c) Aalexeey :-)
# NAME:    Open as a Text
# DESCRIPTION:     GUI скрипт для Caja, поможет быстрей открыть файлы типа .desktop
# REQUIRES:    pluma
# LICENSE:    GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:    https://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome-colors-common/16x16/apps/accessories-text-editor.png

file=$CAJA_SCRIPT_SELECTED_URIS
pluma $file

fi
³deb_Repacker: (немного переработанный)
#!/bin/bash

# AUTHOR:      (c) Aalexeey :-)
# NAME:        deb Repacker
# DESCRIPTION: GUI скрипт для Caja, для разборки и сборки deb пакетов
# REQUIRES:    awk/gawk/mawk, dpkg, mate-dialogs, mate-dialogs-gnome, mate-notification, libnotify-bin
# LICENSE:     GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:     http://debianforum.ru/index.php?topic=9141.0
# ICON_USED:   /usr/share/icons/gnome-colors-common/16x16/actions/extract-archive.png

case $LANG in

ru* )
# Russian (ru-RU)
target="Поставленная задача"
rebuild="Воссоздать deb пакет"
extract="Распаковать deb пакет"
cancel="Работа скрипта прекращена!"
deb_file="Для запуска скрипта выделяйте deb файл"
no_deb="Не был выбран Debian пакет!"
refused="Вы отказались от намеченного"
deb_folder="Содержимое deb пакета в папке"
unpacking="удалён, ждите распаковывается"
choose="Выберите подготовленный каталог, должен быть!"
no_folder="Ни один каталог не выбран."
md5_gen="сгенерирован, ожидайте...."
deb_build="Собирается ваш deb пакет, возможно,\nэтот процесс займёт некоторое время!"
deb_save="Ваш пакет сохранён в одной\nс его каталогом директории."
panic="Что то пошло совсем не так,\nвозможно это файл";;

esac

fileselect="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
filetype=$(file -b $fileselect | awk '{ print $1}' | tr -d '\n')
defaultdir="./"`basename $1 .deb`"_new"
dirlog=`basename $1 .deb`"_new"

selectedjob=$(zenity --list --radiolist  --column "" --column "$target" TRUE "$rebuild" FALSE "$extract");

if  [ "$?" = 1 ]; then
    zenity --warning --text="$refused\n$cancel"
    exit 0;
fi

if  [ "$filetype" != "Debian" ] && [ "$selectedjob" = "$extract" ]; then
    notify-send "deb_Repacker" "$deb_file"
    zenity  --error --text "$no_deb" --width=300;
    exit -1;
fi

if  [ "$selectedjob" = "$extract" ]; then
    dpkg-deb -R $fileselect $defaultdir/ | notify-send "deb_Repacker" "md5sums $unpacking"
    rm $defaultdir/DEBIAN/md5sums
    rm $defaultdir/DEBIAN/md5sum
    cat /tmp/deb_repack_dpkg.log
    echo -n "$dirlog" > /tmp/deb_repack_dpkg.log
    sleep 1
    zenity --info --text "$deb_folder\n$defaultdir" --width=300
exit 0;
fi

savedlog=`cat /tmp/deb_repack_dpkg.log`

dirselect=$(zenity --file-selection --directory --title="$choose $savedlog");

if  [ "$?" = 1 ]; then
    zenity --warning --text="$no_folder\n$cancel"
    exit 0;
fi

if  [ "$selectedjob" = "$rebuild" ]; then
    cd $dirselect && find . -type f ! -regex '.*.hg.*' ! -regex '.*?debian-binary.*' ! -regex '.*?DEBIAN.*' -printf '%P ' | xargs md5sum > $dirselect/DEBIAN/md5sums
    notify-send "deb_Repacker" "md5sums $md5_gen"
    dpkg-deb -b $dirselect | zenity --progress --no-cancel --pulsate --text="$deb_build" --auto-close --width=300
    cp /dev/null /tmp/deb_repack_dpkg.log
    sleep 1
fi

control=`echo $dirselect/DEBIAN/control`

if  [ -f "$dirselect.deb" ]; then   
    zenity --info --text "$deb_save" --width=300
else
    zenity --error --text="$cancel\n$panic <b>control</b>" --width=300
    zenity --text-info --title ./DEBIAN/control --filename $control --width=500 --height=600
exit 0;
fi
« Последнее редактирование: 28 Март 2017, 21:37:37 от Aalexeey »
https://debianforum.ru/index.php?topic=6879 100% защиты от "Ааааа у меня всё поломалось"
 
Пользователи, которые поблагодарили этот пост: ulyssesd

Оффлайн Aalexeey

  • Topic Author
  • Сообщений: 418
  • ASUS_Q400A, Winmate_I771 GTK2/Qt4_MATE
°USB_Detacher:
#!/bin/bash

# AUTHOR:      (c) Mircea Moldovan, deeply modified and translated by Aalexeey :-)
# NAME:        USB Detacher
# DESCRIPTION: GUI скрипт для Caja - безопастное извлечение USB
# REQUIRES:    awk/gawk/mawk, util-linux, mate-dialogs, mate-dialogs-gnome, mate-notification, libnotify-bin
# LICENSE:     GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:     http://debianforum.ru/index.php?topic=9141.0
#              e-mail: mirceamld@gmail.com
# ICON_USED:   /usr/share/icons/gnome-colors-common/16x16/actions/media-eject.png

case $LANG in

ru* )
# Russian (ru-RU)
can_t_do="Необнаружено доступных устройств!"
choose_it="USB устройство для извлечения"
drive_no="№"
drive_id="ФС"
drive_size="Объём"
vendor_model="Модель"
nothing="Не выбрано USB устройств!"
can_do="может быть извлечён!";;

esac

usbdlist1=$(find /sys/bus/usb/drivers/usb-storage/ -name '[0-9]-[0-9]:1.0' | wc -l)
usbdlist2=$(find /sys/bus/usb/drivers/usb-storage/ -name '[0-9]-[0-9].[0-9]:1.0' | wc -l)
usbdlist=$[$usbdlist1+$usbdlist2]
alldlist=$(awk '($4 ~ /sd[b-m]/)&&($4 !~ /sd[b-m][1-9]/) {print "/dev/"$4}' < /proc/partitions | wc -l)
nonusbdlist=$[$alldlist-$usbdlist+1]

if [ $usbdlist = 0 ]; then
   notify-send "USB_Detacher" "$can_t_do"
   exit
fi

declare -a device
declare -a devicesize
declare -a devicelabel

i=0
for dev in $(lsblk --noheadings --list | awk '($1 ~ /sd[b-m]/)&&($1 !~ /sd[b-m][1-9]/) {print "/dev/"$1}' | sort)
do
device[$i]=$dev
devicesize[$i]=$(lsblk $dev --noheadings --nodeps --output size)
devicelabel[$i]=$(lsblk $dev --noheadings --nodeps --output model)
let "i++"
done

if [ $i -eq 0 ]
then
   notify-send "USB_Detacher" "$can_t_do"
   exit 0
fi

index=`for ((j=$nonusbdlist; j<=i; j++))
do
echo $j
echo ${device[$j-1]}
echo ${devicesize[$j-1]}
echo ${devicelabel[$j-1]}
done | zenity --hide-column=1,2 --list\
--title="$choose_it"\
--column="$drive_no" --column="$drive_id" --column="$drive_size" --column="$vendor_model"`

if [ -z $index ]
then
   notify-send "USB_Detacher" "$nothing"
   exit 0
fi

for partition in $(awk -v hdd="${device[$index-1]}" '$1 ~ hdd {print $1}' < /proc/mounts)
do
mountpoint=$(awk -v partition="$partition" '$1 ~ partition { print $2 }' < /proc/mounts)
udisks --unmount $partition
done
udisks --detach ${device[$index-1]}
sleep 1
notify-send "USB_Detacher" "${devicelabel[$index-1]} $can_do"

exit 0
« Последнее редактирование: 28 Март 2017, 21:38:50 от Aalexeey »
https://debianforum.ru/index.php?topic=6879 100% защиты от "Ааааа у меня всё поломалось"
 

Оффлайн CoolAller

  • Сообщений: 805
Aalexeey, вот если бы вы сообразили как сделать скрипт показывающий в Caja тип файловой системы, exFat, FAT16, FAT32, NTFS и т.д. и позволяющий форматировать носители в эти FS по клику правой кнопки мыши)) Вот тогда Caja можно было бы считать вполне годным) 
 

Оффлайн Aalexeey

  • Topic Author
  • Сообщений: 418
  • ASUS_Q400A, Winmate_I771 GTK2/Qt4_MATE
CoolAller, выкладываю здесь то что сделал для себя, интереса делать то что мне не надо нет.
https://debianforum.ru/index.php?topic=6879 100% защиты от "Ааааа у меня всё поломалось"
 

Теги: