Всем привет, мои поздравления по-поводу выхода релиза 14.04! С праздником!
Я хотел напомнить, или рассказать если кто еще не знает, как добавить один из экшнов в меню thunar, самый простой способ:
1. Открываем файл ~/.config/Thunar/uca.xml любым текстовым редактором:
leafpad $HOME/.config/Thunar/uca.xml||mousepad $HOME/.config/Thunar/uca.xml||geany $HOME/.config/Thunar/uca.xml||nano -w $HOME/.config/Thunar/uca.xml
2. С форума копируем текст экшна - т.е. то что находится в code-листе (например, таком):
<action>
<icon>gnome-app-install-star</icon>
<name>Открыть в Leafpad...</name>
<command>leafpad %f||mousepad %f||geany %F</command>
<description>Просмотр файла в Leafpad</description>
<patterns>*</patterns>
<image-files/>
<other-files/>
<text-files/>
</action>
(Этот текст всегда начинается с тега "action" и им же заканчивается "/action")
3. Возвращаемся к открытому в редакторе файлу и листаем в самый конец, текст надо вставить ПЕРЕД последней строчкой </actions>
Примерно так:
<command>leafpad %f||mousepad %f||geany %F</command>
<description>Просмотр файла в Leafpad</description>
<patterns>*</patterns>
<image-files/>
<other-files/>
<text-files/>
</action>
</actions>
4. Сохраняем то что получилось - выходим из редактора.
PS Передвигать по меню вверх(вниз) полученый экшен можно в меню Thunar: Правка-Особые действия и если нужно удалить, то это тоже можно сделать там.
Докину несколько действий. Шифрование файлов - актуальная тема, всвязи с ежедневно появляющимися и исчезающими облаками, не знаю правда как на Яндекс-диске, вроде бы они одно время придерживались политики недопускающей пользователям хранить зашифрованные файлы на своем ресурсе, возможно ее уже отменили, если нет, то пригодится для всяких там дропбоксов и гуглодисков.
Итак, зашифровать файл симметричным шифрованием:
<action>
<icon>system-lock-screen</icon>
<name>Зашифровать файл...</name>
<command>gpg -c %f</command>
<description>Создает новый файл зашифрованый gpg</description>
<patterns>*</patterns>
<audio-files/>
<image-files/>
<other-files/>
<text-files/>
<video-files/>
</action>
Для расшифровки файла лучше использовать ассоциации, т.е. правой кнопкой на файле - "Открыть с помощью приложения..." - "Использовать команду для запуска:" gpg %f
На всякий случай вот экшн расшифровки:
<action>
<icon>edit-undo</icon>
<name>Расшифровать файл...</name>
<command>gpg "%f"</command>
<description>Расшифровывает файлы gpg</description>
<patterns>*.gpg</patterns>
<startup-notify/>
<other-files/>
</action>
Чтобы заработало нужна сама програмка gpg, опять же у меня была установлена, я не знаю как ставится... возможно: sudo apt-get install gpg
Для чего нужна эта штука - уже набирал выше - чтобы не выкладывать на всеобщее обозрение личную информацию, конфиденциальность которой не гарантирует ни один облачный сервис.
Следующие я, честно говоря, не успел протестировать, но несколько раз запускал - что-то сразу заработало, чтото допиливал, в целом день ушел чисто на эти скриптики и zenity - никакой особой цели не было, ну и наигрался, конечно от души - zenity уже так не впечатляет, как с утра

И да, у меня все запускается, но это не значит, что будет работать у вас, хотите - пробуйте. Для всех требуется ZENITY, не знаю как устанавливается, я только поставил xubuntu 14.04 а эта штука уже тут была... наверное, както так: sudo apt-get install zenity
Два экшена для изображений:
( Для работы с ними понадобится ImageMagic, вроде бы он уже ставится по-умолчанию в 14.04, если нет, то наверно вот: sudo apt-get install imagemagick )
<action>
<icon>object-flip-horizontal</icon>
<name>Подогнать изображение под размер...</name>
<command>z=$(zenity --list --multiple --editable --title="Рекомендую сделать BACKUP" --text="Картинки кромсаются на месте! Продолжаем?" --column="Выбираем нужное разрешение:" '150x150' '240x320' '1600x900' '1600x1200' '1600x600' '1280x1024' '1024x768' '800x600' '640x480');y=$( echo $z|awk -Fx '{print $2}' );x=$( echo $z|awk -Fx '{print $1}' );if [ -n "$z" ];then a=0;b=0;for i in %F;do a=$((a+1));done;b=$((10000/a));a=$b;for i in %F ;do convert "$i" -resize $x\x -gravity center -crop $z+0+0 "$i";convert "$i" -resize x$y -gravity center -crop $z+0+0 "$i";c=$((a/100)); a=$((a+b)); echo "$c";done|zenity --progress --title="Конвертация" --text="Идет преобразование файлов..." --percentage=0 --auto-close --auto-kill; notify-send "Выполнено." "Изменение разрешения графических файлов прошло успешно." -i info -u low;else notify-send "Отличный выбор ;)" -i info -u low;fi</command>
<description>Вырезаем из центра прямоугольник по заданному размеру и с сохранением масштаба.</description>
<patterns>*</patterns>
<image-files/>
</action>
z=$(zenity --list --multiple --editable --title="Рекомендую сделать BACKUP" --text="Картинки кромсаются на месте! Продолжаем?" --column="Выбираем нужное разрешение:" '150x150' '240x320' '1600x900' '1600x1200' '1600x600' '1280x1024' '1024x768' '800x600' '640x480');y=$( echo $z|awk -Fx '{print $2}' );x=$( echo $z|awk -Fx '{print $1}' );if [ -n "$z" ];then a=0;b=0;for i in %F;do a=$((a+1));done;b=$((10000/a));a=$b;for i in %F ;do convert "$i" -resize $x\x -gravity center -crop $z+0+0 "$i";convert "$i" -resize x$y -gravity center -crop $z+0+0 "$i";c=$((a/100)); a=$((a+b)); echo "$c";done|zenity --progress --title="Конвертация" --text="Идет преобразование файлов..." --percentage=0 --auto-close --auto-kill; notify-send "Выполнено." "Изменение разрешения графических файлов прошло успешно." -i info -u low;else notify-send "Отличный выбор ;)" -i info -u low;fi
Первый пытается растянуть картинку под определенный прямоугольник, при этом сохраняет пропорции, чем больше не пропорциональна картинка размеру, тем большая часть ее срежется, но зато конечное изображение должно быть точно как по заказу. Вроде бы работает.
Второй скрипт конвертирует изображение во всякие популярные и не очень графические форматы.
<action>
<icon>object-rotate-right</icon>
<name>Конвертировать изображение...</name>
<command>z=$(zenity --list --radiolist --title="Исходные файлы не удаляются," --text=" С одинаковыми именами запросто (1.gif+1.jpg =/=>1.png+1.png)" --column="Выберите" --column="формат изображения" FALSE png FALSE jpg FALSE bmp FALSE gif TRUE xpm FALSE ico FALSE pdf FALSE tiff FALSE tga FALSE ecw FALSE ilbm FALSE jp2 FALSE mrsid FALSE pnm FALSE psd FALSE rla FALSE vil FALSE webp FALSE xbm FALSE pcx FALSE xps);if [ -n "$z" ];then for i in %F; do echo "1"; mogrify -format "$z" "$i";done|zenity --progress --title="Конвертация" --text="Идет преобразование файлов..." --percentage=0 --auto-close --auto-kill --pulsate; notify-send "Выполнено." "Изменение формата графических файлов прошло успешно." -i info -u low; fi</command>
<description>Изменение формата изображения.</description>
<patterns>*</patterns>
<image-files/>
</action>
z=$(zenity --list --radiolist --title="Исходные файлы не удаляются," --text=" С одинаковыми именами запросто (1.gif+1.jpg =/=>1.png+1.png)" --column="Выберите" --column="формат изображения" FALSE png FALSE jpg FALSE bmp FALSE gif TRUE xpm FALSE ico FALSE pdf FALSE tiff FALSE tga FALSE ecw FALSE ilbm FALSE jp2 FALSE mrsid FALSE pnm FALSE psd FALSE rla FALSE vil FALSE webp FALSE xbm FALSE pcx FALSE xps);if [ -n "$z" ];then for i in %F; do echo "1"; mogrify -format "$z" "$i";done|zenity --progress --title="Конвертация" --text="Идет преобразование файлов..." --percentage=0 --auto-close --auto-kill --pulsate; notify-send "Выполнено." "Изменение формата графических файлов прошло успешно." -i info -u low; fi
В целом вещь довольно полезная, но очень редко нужная, далеко не каждый день приходится конвертить jpg в mrsid или xps... Требования скрипта те же, что и в прошлом.
Этим скриптом можно удалить файлы по расписанию:
<action>
<icon>appointment-new</icon>
<name>Удалить позже...</name>
<command>z=$(zenity --forms --title="Удалить в указанное время." --text="(Полученое задание: crontab -l)" --separator="." --add-entry="Час, 0-23" --add-entry="Мин, 0-59" --add-calendar="День," --add-list=Удалить --list-values='В корзину|Безвозвратно|Спросить'); if [ -n "$z" ]; then c="$HOME/tmp$(date +%s).cron";crontab -l >"$c" ;echo '## Задание Thunar' >>$c ;h=$(echo $z|awk -F. '{print $1}'); m=$(echo $z|awk -F. '{print $2}'); if [ "$h" -lt "24" -a "$m" -lt "60" ]; then echo -n $m $h $(echo $z|awk -F. '{print $3 " " $4 }') '* '>>$c;case "$(echo $z|awk -F. '{print $6}')" in "Спросить") echo "if /usr/bin/zenity --display=:0 --list --timeout=90 --title='Расписание' --text='Удалить следующие файлы?' --hide-header --column='' %N ;then gvfs-trash -f %F;fi">>$c;; "В корзину") echo "gvfs-trash -f %F">>$c;; "Безвозвратно") echo "gvfs-rm -f %F">>$c;; esac;echo >>$c;crontab $c;rm -v $c;for z in %F;do gvfs-set-attribute "$z" -t stringv metadata::emblems emblem-danger;done;notify-send -i info "Задача добавлена." "Для просмотра используйте: crontab -l";fi;fi</command>
<description>Удаление файлов по расписанию</description>
<patterns>*</patterns>
<directories/>
<audio-files/>
<image-files/>
<other-files/>
<text-files/>
<video-files/>
</action>
z=$(zenity --forms --title="Удалить в указанное время." --text="(Полученое задание: crontab -l)" --separator="." --add-entry="Час, 0-23" --add-entry="Мин, 0-59" --add-calendar="День," --add-list=Удалить --list-values='В корзину|Безвозвратно|Спросить'); if [ -n "$z" ]; then c="$HOME/tmp$(date +%s).cron";crontab -l >"$c" ;echo '## Задание Thunar' >>$c ;h=$(echo $z|awk -F. '{print $1}'); m=$(echo $z|awk -F. '{print $2}'); if [ "$h" -lt "24" -a "$m" -lt "60" ]; then echo -n $m $h $(echo $z|awk -F. '{print $3 " " $4 }') '* '>>$c;case "$(echo $z|awk -F. '{print $6}')" in "Спросить") echo "if /usr/bin/zenity --display=:0 --list --timeout=90 --title='Расписание' --text='Удалить следующие файлы?' --hide-header --column='' %N ;then gvfs-rm -f %F;fi">>$c;; "В корзину") echo "gvfs-trash -f %F">>$c;; "Безвозвратно") echo "gvfs-rm -f %F">>$c;; esac;echo >>$c;crontab $c;rm -v $c;for z in %F;do gvfs-set-attribute "$z" -t stringv metadata::emblems emblem-danger;done;notify-send -i info "Задача добавлена." "Для просмотра используйте: crontab -l";fi;fi
Также для работы требуется zenity. Как его можно использовать: ну, к примеру, если вы скачали xubuntu-14.04-desktop-i386.iso, то можно его поставить на удаление в 23:55 14.10.2014 или файлик с программой передач на ТВ удалить когда он перестанет быть актуальным... Вообщем, штука бесполезная, ну и скриптик глючный: пробовал в него забивать большую стопку файлов - он вообще никак не реагирует, но 1,2 файла удалит, как мне показалось это ограничение на строку в самом кроне...
Выключение компьютера по таймеру:
<action>
<icon>media-record</icon>
<name>Выключить через 27 минут...</name>
<command>a=`zenity --scale --title="Автовыключение" --text="Тушимся через ... , мин" --min-value=2 --max-value=134 --value=27 --step=3`; a=$((3 * $a)) && for i in `seq 95 -5 0`;do sleep $a;echo $i;done|zenity --progress --title="Ожидание" --text="Сколько можно не спать!.." --percentage=100 --auto-close && xfce4-session-logout -h</command>
<description>Таймер выключения компа</description>
<patterns>Рабочий стол</patterns>
<startup-notify/>
<directories/>
</action>
Требует zenity. Cоздает пункт в меню рабочего стола и выключает компьютер через заданное время. На этом пока все
