Что ж, это было небольшое вступление, теперь к сути. Файлы с расширением
.nemo_action
, используемые nemo в качестве файлов обработки КМ, лежат в папках ~/.local/share/nemo/actions
и /usr/share/nemo/actions
. Если хотите, чтобы добавленное вами КМ было доступно только для текущего пользователя, с которого вы сейчас работаете, то добро пожаловать в папку ~/.local/share/nemo/actions
, иначе - /usr/share/nemo/actions
, но в последнем случаи понадобится root права (которые несложно получить из контекстного меню nemo, выбрав пункт "открыть как root
").Допустим, вы определились с тем, в какой папке вы будете проводить все манипуляции. Теперь мы создадим файл с названием *.nemo_action (где * - любая последовательность символов, если проще, то любое удобное для вас название) и откроем с помощью текстового редактора.
Вобьем следующий шаблон:
[Nemo Action] #Active=false Name= Name[ru]= Comment= Comment[ru]= Exec= Selection= Extensions= ; #Mimetypes= ; Quote= Conditions= ; Icon-Name= #Dependencies= ; #EscapeSpaces=true
Затем ознакомимся с более подробный вариантом шаблона (с описанием основных пунктов):
# В данном случаи, если перед Active его убрать, то .nemo_action не будет работать.
# Данная команда используется, если, например, скрипт не работает, а вам лень его чинить именно сейчас
#Active=false
# Имя пункта отображаемого в меню (общий случай)
# ОБЯЗАТЕЛЬНЫЙ ПАРАМЕТР
Name=
# Имя пункта отображаемого в меню, если язык системы - русский
Name[ru]=
# Комментарий/подсказка, отображаемая в строке состояния (общий случай)
Comment=
# Комментарий/подсказка, отображаемая в строке состояния, если язык системы - русский
Comment[ru]=
# Путь до файла, который будет обрабатывать действие.
# Для системных файлов, нах-ся в таких папках, как: /bin, /sbin, /usr/bin, /usr/sbin, как правило,
# указывать полный путь необязательно, достаточно указать название исполняемого файла
# Для файла, находящегося прямо в папке с .nemo_action,
# достаточно указать его название, заключив в такие "кавычки" < >
# ОБЯЗАТЕЛЬНЫЙ ПАРАМЕТР
Exec=
# Способ выделения, при котором пункт будет отображаться в меню:
# "s" - [s]ingle (один), пункт будет отображаться, если выбран только 1 конкретный файл
# "m" - [m]ultiple (несколько), пункт будет отображаться, если выбрано исключительно несколько файлов
# "notnone" - (сочетание single+multiple), пункт будет отображаться, если выбран 1 ИЛИ несколько файлов
# "none" - (фоновый клик), пункт будет отображаться, если совершен только фоновый клик
# "any" - (любой)/(сочетание notnone+none), пункт будет отображаться в любом случаи
# или просто число, обозначающее, сколько файлов должно быть выбрано, чтобы КМ появилось
# ОБЯЗАТЕЛЬНЫЙ ПАРАМЕТР
Selection=
# Расширение файлов, для которых пункт меню будет отображаться.
# Одиночные опции, заканчивающиеся точкой с запятой
# "dir" - для выбранной директории
# "none" - для файлов без расширения
# "nodirs" - для любого выбора, но не включая каталоги
# "any" - для любого типа, включая каталоги
# Отдельные конкретные расширения могут завершать список точкой с запятой
# Расширения НЕ чувствительны к регистру. jpg будет соответствовать JPG, jPg, jpg, и так далее...
# Этот массив разделяется и заканчивается ";"
# ОБЯЗАТЕЛЬНЫЙ ПАРАМЕТР Extensions или Mimetypes
Extensions= ;
# Какие mime-типы будут отображаться. Этот массив разделяется и заканчивается ";"
# Для архивов -> см. код файла /usr/share/nemo/actions/mount-archive.nemo_action
# Для изображений -> Mimetypes=image/*;
# В общем случаи -> https://goo.gl/0lRMni (ссылка на википедию, статья "Список MIME-типов") :-)
# Также можно использовать терминальную утилиту file, запущенную c параметром --mime-type
# для определения mime-типа какого-то конкретного файла
# Например,
file /etc/fstab --mime-type | awk '{print $2}'
# Примечание: на самом деле nemo не проверяет mime-тип файла, а смотрит на его расширение
# т.е. здесь mime-тип фактически является контейнером расширений, но не более
# ОБЯЗАТЕЛЬНЫЙ ПАРАМЕТР Extensions или Mimetypes
Mimetypes= ;
# "Ответ с цитированием" - заключаем пути/URL-адреса в кавычки.
# По желанию - по умолчанию без кавычек.
# Может быть: single (одиночные), double (двойные), backtick (обратные кавычки)
Quote=
# Место, где пункт доступен. Этот массив разделяется и заканчивается ";"
# "desktop" - на рабочем столе или в папке, если родительский путь является рабочий стол
# "removable" целевой объект (первый выделенный) является флешкой (съёмное устройство)
# "gsettings <schema> <boolean key>" - является истиной
# "dbus <name>" - указанное имя существует
Conditions= ;
# Путь иконки в формате png. Системные иконки можно посмотреть в папке /usr/share/icons или "украсть"
# из файлов-ярлыков отсюда /usr/share/applications/, открыв их текстовым редактором.
# Для системных иконок достаточно лишь указать их название (без пути)
Icon-Name=
# Зависимости - это программные исполняемые файлы необходимые для работы этих nemo_actions
# Nemo будет искать пути для этих(ой) программ(ы) и не отобразит действия (action), если таковые пропадут
# Вы также можете использовать абсолютный путь к файлу (т.е. /usr/lib/gvfs/gvfsd-archive) для проверки
# вместо или в дополнение к исполняемому в пути.
# Этот массив разделяется и заканчивается ";"
#Dependencies= ;
# Экранирует пробелы в путях, если установлено в true ($U, $F, $P, $D)
# Иногда это избавит от ошибки для путей не заключённых в кавычки.
# По умолчанию false
#EscapeSpaces=true
# *** Также следует упомянуть стандартные маркеры, которые могут быть использованы ***
# в Имени (Name), Комментариях (Comment) и полях Пути (Exec) :
# %U - вставить URI выбранного файла
# %F - вставить список пути выбранного файла
# %P - вставить путь родительской (текущей) директории
# %f или %N (устаревшее) - вставить отображаемое имя первого выбранного файла
# %p - вставить отображение имени родительской директории
# %D - вставить путь к устройству или файлу (т.е. /dev/sdb1)
# (У маркеров прямая связь с полем "Selection")
#
# Там, где массив разделяется и заканчивается ";", НЕ нужно вставлять лишние пробелы перед или до ";"
Прежде чем кинуться создавать КМ, вы должны учесть 2 вещи:
1) Многие программы способны принимать передаваемые параметры сразу. Я на этом часто спотыкался: я создавал КМ, а потом выяснялось, что оно в принципе не нужно. Например, КМ "КОНВЕРТИРОВАНИЕ АУДИО-ФАЙЛОВ", в котором использовалось приложение soundconverter. В данном случаи, не зачем было изобретать велосипед, достаточно было выделить аудио-файлы и открыть их через КМ "Открыть с помощью --> SoundConverter"

2) Есть масса уже готовых решений, необязательно создавать что-то свое. Ниже я дам краткую информацию о некоторых интересных расширениях nemo, которые доступны в репозитории. Установить любое из них можно, выполнив в терминале:
apt install название_пакета
- nemo-image-converter - добавляет два КМ: "Масштабировать изображения" и "Вращать изображения". Подробнее можете почитать здесь.
- nemo-compare - КМ "Сравнить". Использует meld для сравнения файлов и папок.
- nemo-pastebin - позволяет через соответствующее КМ быстро отправить текст на pastebin. На нашем форуме встроена интеграция с данным сервисом, поэтому вы можете использовать данный способ, чтобы оставлять длинный текст или большие логи (вместо использования тега
[code][/code]
; просто вставьте полученную ссылку в свое сообщение и нажмите "Предпросмотр). Хотя, честности ради, есть и другой путь для реализации той же цели. - nemo-seahorse - КМ "Зашифровать" и "Подпись". Позволяет зашифровать и дешифровать файлы OpenPGP с помощью GnuPG.
- nemo-filename-repairer - КМ для восстановления кодировки в названии каталогов
- nemo-owncloud - добавляет интеграцию с ownCloud
- nemo-dropbox - добавляет интеграцию с dropbox
- nemo-media-columns - вывод информации о метаданных музыки/EXIF и PDF при отображении файлов списком (Ctrl+2)
- nemo-gtkhash - добавляет вкладку "Хэши" (ПКМ по файлу --> Свойства).
- nemo-audio-tab - добавляет вкладку "Звук" (ПКМ по файлу --> Свойства). Позволяет посмотреть метаданные аудиофайла.
Все просто

[Nemo Action] Name=Scan for viruses files/folders Comment=Scan for viruses "%F" Name[ru]=Проверить на вирусы файлы/папки Comment[ru]=Проверить на вирусы "%F" Exec=drweb-gui %F Selection=any Extensions=any; Icon-Name=drweb-gui Quote=single Dependencies=drweb-gui;
Для установки антивируса введите команду:
sudo apt-get install clamav
Для установки GUI:
sudo apt-get install clamtk
Следующим шагом мы должны обновить антивирусную базу. Если вы установили GUI, то можно нажать Alt+F2 и ввести команду
clamtk
, после чего запустится графический интерфейс. sudo freshclam
(см. также Постоянные проблемы с Clamav). Этот способ особенно актуален для тех, кто инсталлировал только clamav (без clamtk).Антивирус с обновленными базами к старту готов. Стойте, подождите, не спешите уходить! Мы еще не закончили, а как же контекстное меню?

Если у вас не установлен yad, установите, потому что именно его использует мой скрипт (я бы, конечно, мог заставить использовать zenity, который установлен "из коробки", но зачем изобретать велосипед на квадратных колесах?!):
sudo apt install yad
Теперь создадим файл /usr/share/nemo/actions/clamav.nemo_action со следующим содержимым:
[Nemo Action] Name=Scan for viruses files/folders Comment=Scan for viruses "%F" Name[ru]=Проверить на вирусы файлы/папки Comment[ru]=Проверить на вирусы "%F" Exec=gnome-terminal --hide-menubar --geometry=90x28 -x sh -c "/usr/share/nemo/actions/clamav.sh %F" Selection=any Extensions=any; Icon-Name=clamtk Quote=single Dependencies=clamscan;yad;find;awk;Рядом с ним - скрипт clamav.sh:
Код: Выделить всё
#!/bin/bash
AAA=`yad --title="Scan for threats..." --width=250 --window-icon=/usr/share/pixmaps/clamtk.png --form --item-separator="|" --separator="," --field="Удалять зараженные файлы:CHK" 'TRUE' --field="Проверять вложенные каталоги:CHK" 'TRUE' --field="Включить псевдопрогресс:CHK" 'TRUE' --field="Политика symbolic link:CB" "^По умолчанию (следовать, если ссылка передана в качестве аргумента)|Следовать для директорий и файлов" `
if [[ -z "$AAA" ]]; then
echo "Операция отменена!"; exit
fi
remove="$(echo $AAA | awk -F ',' '{print $1}')"
recursive="$(echo $AAA | awk -F ',' '{print $2}')"
progress="$(echo $AAA | awk -F ',' '{print $3}')"
symlinks_c="$(echo $AAA | awk -F ',' '{print $4}')"
type_of_scan=''
if [[ "$remove" = "TRUE" ]]; then remove='--remove=yes'; else remove=''; fi
if [[ "$recursive" = "TRUE" ]]; then recursive='-r'; else recursive=''; fi
if [[ "$symlinks_c" = 'По умолчанию (следовать' ]]; then symlinks_c=''
else symlinks_c='--follow-dir-symlinks=2 --follow-file-symlinks=2'; fi;
if [[ "$recursive" = "-r" ]]; then
final_options_f='-type f'
if [[ "$symlinks_c" = '' ]]
then
type_of_scan='Обрабатывать только файлы и папки + явно заданные в аргументе symlink-и (с рекурсивным вхождением)'
first_options_f='-H'
else
type_of_scan='Обрабатывать все и вся (с рекурсивным вхождением)'
first_options_f='-L'
fi
else
final_options_f='-maxdepth 1 -type f -printf %f\\n\\r'
if [[ "$symlinks_c" = '' ]]
then
type_of_scan='Обрабатывать только файлы + явно заданные в аргументе файлы-symlink-и (без рекурсивного вхождения)'
first_options_f=''
else
type_of_scan='Обрабатывать только файлы и файлы-symlink-и (без рекурсивного вхождения)'
first_options_f='-L'
fi
fi
if [[ "$progress" = "TRUE" ]]; then
tmp='0'
log_file="--log=$HOME/clamavscan_log_file.txt"
file_c=0
for i in "$@"
do
if [[ -f "$i" ]]
then file_c="$[file_c+1]"
else
file_c="$[file_c+$(echo -e "$(find $first_options_f "$i" $final_options_f)" | wc -l)]"
tmp="$[tmp+1]"
fi
done
if [[ "$recursive" = '' && "$tmp" -ne '0' ]]; then file_c="$[file_c-tmp]"; fi
clear; echo "Текущая версия антивируса:"; freshclam -V
echo -e "\nТип сканирования: \n$type_of_scan\n\nПримерное количество файлов для сканирования: $file_c"
clamscan $log_file $remove $recursive $symlinks_c "$@" | awk -F: '$2 ~ /OK/ || /FOUND/ {ok++} {printf "Примерное количество проверенных файлов: %d\r", ok}'
cat ${log_file#--log=}
rm ${log_file#--log=}
else
clear; echo "Текущая версия антивируса:"; freshclam -V
echo -e "\nТип сканирования: \n$type_of_scan\n"
echo; clamscan -o $remove $recursive $symlinks_c "$@"
fi
echo; read -p 'Сканирование завершено, нажатие Enter закроет окно! '; exit
Готово! Пользоваться КМ очень просто. Для этого кликнем ПКМ, заранее выделив целевые объекты сканирования, и нажмем "Проверить на вирусы файлы/папки". Появится следующие окошко:
Кроме того, скрипт выводит текущую версию clamav, его антивирусных баз и результаты работы сканера, выглядит это примерно так:



du
: ncdu
. Немного справки: du - позволяет выводить размер файлов и папок в консоль. Установлен из коробки. Конечно, в сочетании с sort -nr (сортировщиком) мы можем достичь желаемого результата в случаи, если запросим у du выводить размер в КБ. Но это не очень удобно... Мы также можем попросить выводить в МБ и КБ, но тогда сортировщик сломается. Поэтому ncdu - более предпочтительный вариант, поскольку выполняет сортировку сам с корректным отображением GB, MB и KB.
Установим ncdu,ctrl+alt+T, вводим команду
sudo apt-get install ncdu
. Затем создаем файл ncdu.nemo_action в известной папке со следующим содержанием:
[Nemo Action] Name=Sort by size folder Name[ru]=Сортировать по ncdu Exec=gnome-terminal -x sh -c 'ncdu %P' #Фоновый клик Selection=none Extensions=any; Icon-Name=reload EscapeSpaces=true Dependencies=ncdu;Скриншот:
/usr/share/nemo/actions/set-as-background.nemo_action
и заменим строку gsettings set org.cinnamon.desktop.background picture-uri "%U" на строку gsettings set org.cinnamon.desktop.background picture-uri file://"%F"
и сохраним документ.Парой нужно отредактировать какие-либо системные конфиги, не поддающиеся редактированию в обычном режиме. Конечно, можно запустить терминал или alt+F2 и ввести соответствующую команду, но когда у нас открыт ФМ прямо в папке с интересующим нас конфигом, очень удобно открыть его как root в 1 клик. Я использую в качестве простого текстового редактора - gedit, у вас может быть какой-либо другой, например, xed, который у всех установлен из коробки. Если так, то просто замените в конфиге все слова gedit на xed. Итак, создадим в соответствующей папке файл open_gedit_root.nemo_action со следующим содержимым:
[Nemo Action] Name=Open the file gedit as a root Name[ru]=Открыть файл в gedit как root Comment=Open "%f" using gedit as a root Comment[ru]=Открыть "%f" в gedit как root Exec=gksu gedit %F Selection=notnone Mimetypes=text/plain; Icon-Name=accessories-text-editor EscapeSpaces=true Dependencies=gedit;
/usr/share/nemo/actions
ИЛИ здесь - ~/.local/share/nemo/actions
со следующим содержимым:
[Nemo Action] Name=Make hidden files/folders Name[ru]=Сделать скрытыми файлы/папки Comment=Hide %F Comment[ru]=Скрыть %F Exec=<hidden.py %F> Selection=notnone Extensions= any; Icon-Name=changes-prevent-symbolic Quote=singleДалее в этой же папке создаем файл hidden.py:
Код: Выделить всё
#!/usr/bin/python
import sys
import os
i=1
while i < len(sys.argv):
try:
while str(sys.argv[i+1])[0] != '/':
sys.argv[i]=sys.argv[i]+ " "+sys.argv.pop(i+1)
if sys.argv[i+1][0] == '/':
i= i+1
i= i+1
except IndexError:
break
for i in sys.argv[1:]:
path = i[:i.rfind('/')+1]
name = i[i.rfind('/')+1:]
with open(path+".hidden", "a") as hidden:
hidden.write(name+"\n")
[Nemo Action] Name=On/Off rest-mode Name[ru]=Вкл/Выкл ТВ Conditions= desktop; Exec=<rw.sh> Selection=none Extensions=any; Icon-Name=displayДалее в этой же папке создаем текстовый файл-скрипт rw.sh:
Код: Выделить всё
#!/bin/bash
IN="HDMI-1"
EXT="HDMI-2"
if (xrandr | grep "$EXT" | cut -d ' ' -f 2- | grep [0-9])
then
xrandr --output $EXT --off --output $IN --auto --primary
SINK=$(pacmd list-sinks|grep '[^*] index'|sed 's/.*: //')
pacmd set-default-sink ${SINK}
pacmd list-sink-inputs |grep 'index: '|sed 's/\s*index: //'|while read x
do
pacmd move-sink-input "$x" "${SINK}";
done
else
xrandr --output $IN --auto --primary --output $EXT --auto --left-of $IN
SINK1=$(pacmd list-sinks|grep '[^*] index'|sed 's/.*: //')
pacmd set-default-sink ${SINK1}
pacmd list-sink-inputs |grep 'index: '|sed 's/\s*index: //'|while read x
do
pacmd move-sink-input "$x" "${SINK1}";
done
fi
Подробнее о скрипте, о том, как он работает можно узнать в теме Скрипт на Bash для включения/выключения второго экрана и переброса звука.

Создадим в соответствующей папке файл docs_to_pdf.nemo_action:
[Nemo Action] Name=Convert documents to pdf Comment=Convert MS Office documents, LibreOffice and txt to pdf Name[ru]=Конвертировать документы в pdf Comment[ru]=Конверт. документы MS Office, LibreOffice и txt в pdf Exec=<docs_to_pdf.sh %F> Selection=notnone Extensions=doc;docx;rtf;txt;odt;xls;xsls;ods;odp;pptx;ppt; EscapeSpaces=true Icon-Name=application-pdf Dependencies=loimpress;localc;lowriter;Рядом с ним, т.е. в той же папке, создадим обрабатывающий события скрипт docs_to_pdf.sh:
Код: Выделить всё
#!/bin/bash
for file in "$@"
do
output=$output"\n"$file
path=${file%/*}
expansion=${file##*.}
if [ "$expansion" = "xls" ] || [ "$expansion" = "xsls" ] || [ "$expansion" = "ods" ]
then
localc --convert-to pdf "$file" --outdir "$path"
else
if [ "$expansion" = "odp" ] || [ "$expansion" = "pptx" ] || [ $expansion = "ppt" ]
then
loimpress --convert-to pdf "$file" --outdir "$path"
else
if [ "$expansion" = "doc" ] || [ "$expansion" = "docx" ] || [ "$expansion" = "odt" ] || [ "$expansion" = "rtf" ] || [ "$expansion" = "txt" ]
then
lowriter --convert-to pdf "$file" --outdir "$path"
fi
fi
fi
done
notify-send -t 10000 -i "gtk-ok" "Завершено" "Преобразование в PDF документов:$output"
sudo apt install gprename
После этого создаем в соответствующей папке файл gprename.nemo_action со следующим содержимым:
[Nemo Action] Name=Batch rename Name[ru]=Пакетное переименование Comment=Batch rename files or folders in %P Comment[ru]=Пакетное переименование файлов или папок в %P Exec=gprename %P #Фоновый клик Selection=none Extensions=any; Quote=single Icon-Name=text-editor Dependencies=gprename;КМ будет появляться при фоновом клике и при надобности запустит gprename, передав ему путь текущей открытой директории.
1) Откройте терминал и введите
cd ~/.local/share/applications/ && nano gprename.desktop; chmod +x gprename.desktop
2) Вставьте следующее:
Код: Выделить всё
[Desktop Entry]
Name=GPRename
Comment=Batch rename files or folders
Comment[ru]=Пакетное переименование файлов или папок
Exec=gprename
Icon=text-editor
Categories=Utility;
Terminal=false
Type=Application
NoDisplay=false
После проведенных выше манипуляций ярлык программы окажется в Меню->Стандартные->GPRename.
Для работы нам понадобятся 2 пакета, поэтому если у вас их нет, следует установить:
sudo apt install graphicsmagick-imagemagick-compat yad
Примечание: ранее я использовал zenity, но его возможности сильно ограничены, а костыли мне придумывать не хочется. Поэтому здесь используется yad.
Примечание 2: вместе с yad поставляется "БрОузер иконок", который можно запустить командой
yad-icon-browser
, в результате высветится окошко, где можно подобрать понравившуюся иконку для любого КМ и вставить её название в параметр Icon-Name=Название_иконки.
Само КМ - image_montage.nemo_action
[Nemo Action] Name=Combine images Name[ru]=Объединить изображения Exec=<image_montage.sh %F> Selection=m Extensions=bmp;gif;ico;jpe;jpg;jpeg;png;ppm;tif;tiff; Icon-Name=extension Quote=single Dependencies=yad;montage;Обрабатывающий его скрипт - image_montage.sh
Код: Выделить всё
#!/bin/bash
#Получаем имя файла без расширения; имя файла с расширением -> имя файла без расширения
namenoext="${1%%.*}" && namenoext="${namenoext##*/}"
#Получаем расширение
ext="${1##*.}"
AAA=`yad --borders=10 --window-icon=extension --width=350 --title="Объединить изображения" --text="Введите параметры" --form --item-separator="|" --separator="," --field=":LBL" --field="Направление:CB" --field="Отступ" --field="Имя файла" "" "^вертикально|горизонтально" "0" " $namenoext"_montage."$ext"`
if [[ -z "$AAA" ]]; then
#yad --image="dialog-warning" --text="Операция отменена!" --title="Отмена" --button=gtk-ok --text-align=center
echo "Операция отменена!"; exit
fi
#Направление
direction="$(echo $AAA | awk -F ',' '{print $2}')"
#Отступ
space="$(echo $AAA | awk -F ',' '{print $3}')"
#Путь до родительской директории/имя файла, заданное в yad
newname="${1%/*}/$(echo $AAA | awk -F ',' '{print $4}')"
if [[ "$direction" = "вертикально" ]]; then
montage "$@" -geometry +0+$space -tile 1x$# "$newname"
else
montage "$@" -geometry +$space+0 -tile $#x1 "$newname"
fi
sudo chmod +x image_montage.sh
КМ будет доступно при выборе 2-х или более изображений. Вызовется такое окошко:
sudo apt install zenity curl gawk
В соответствующей папке необходимо создать 2 файла:
Само КМ - upload_to_imgur.nemo_action
[Nemo Action] Name=Upload image to imgur Name[ru]=Загрузить изображение на imgur Exec=<upload_to_imgur.sh -f %F> Selection=s Mimetypes=image/*; EscapeSpaces=true Icon-Name=document-send-symbolic Dependencies=zenity;gawk;curl;И скрипт (я взял его отсюда) upload_to_imgur.sh :
Не забываем сделать скрипт upload_to_imgur.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу).
КМ будет доступно при выборе 1 изображения. Выглядит это примерно так (gif-ка):
sudo apt install xdotool
. Затем в соответствующей папке создайте файл refresh.nemo_action с содержимым:[Nemo Action] Name=Refresh Name[ru]=Обновить Comment=It's like pressing Ctrl+R or F5 Exec=xdotool key ctrl+r Selection=none Extensions=any; Icon-Name=view-refresh Dependencies=xdotool;КМ будет доступно при фоновом клике ПКМ.

Итак, в терминале последовательно выполните следующие команды:
Код: Выделить всё
cd ~/Загрузки
wget http://download.tuxfamily.org/wipetools/releases/nautilus-wipe/nautilus-wipe-0.3.tar.gz
tar -xvf nautilus-wipe-0.3.tar.gz
cd nautilus-wipe-0.3/
sudo apt install libxml2-utils itstool libnemo-extension-dev libgsecuredelete-dev
./configure --with-nautilus=nemo
make
sudo make install
nemo -q && nemo-desktop -q
cd .. && rm -rf ./nautilus-wipe-0.3 ./nautilus-wipe-0.3.tar.gz
cd ~/Загрузки
- переходим в папку ~/Загрузкиwget http://download.tuxfamily.org/wipetools/releases/nautilus-wipe/nautilus-wipe-0.3.tar.gz
- скачиваем в неё архив с расширениемtar -xvf nautilus-wipe-0.3.tar.gz
- разархивируемcd nautilus-wipe-0.3/
- переходим в разархивированную папкуsudo apt install libxml2-utils itstool libnemo-extension-dev libgsecuredelete-dev
- устанавливаем необходимые для сборки зависимости./configure --with-nautilus=nemo
- конфигурируемmake
- делаемsudo make install
- устанавливаемnemo -q && nemo-desktop -q
- закрываем все окна nemo и перезапускаем рабочий столcd .. && rm -rf ./nautilus-wipe-0.3 ./nautilus-wipe-0.3.tar.gz
- удаляем ранее скаченное и распакованное
Готово! Если все прошло без ошибок, то после этого у вас появятся 2 КМ:
1) Wipe available disk space, которое появится в любом случаи (т.е. при фоновом клике, при клике на любою папку или файл). Оно позволит затереть/форматировать дисковое пространство раздела. Будьте аккуратны с ним, не используйте бездумно (именно поэтому ранее я предложил вам ознакомиться со справочной информацией на английском или хотя бы на русском).
2) Затереть, которое появится при клике на любую папку или файл, можно выбрать как один, так и несколько объектов. После нажатия появится окно подтверждения:
Сначала о реализации. Первым делом в соответствующей папке нужно создать файл all.applications.nemo_action с содержимым:
[Nemo Action] Name=All applications Name[ru]=Все приложения Exec=<all.applications.sh> Selection=none Extensions=any; Conditions=desktop; Icon-Name=cs-extensionsРядом - поместить скрипт all.applications.sh :
Код: Выделить всё
#!/bin/bash
nemo /usr/share/applications/
sleep 1
nemo ~/.local/share/applications/
При нажатии на КМ скрипт откроет 2 папки /usr/share/applications/ и ~/.local/share/applications/ в ФМ nemo.
mintinstall
). Реже использую, чтобы добавить свои ярлыки в меню или скрыть ненужные (надеюсь, вы не забыли про параметр Active=false ?! 
apt install btfs
Далее необходимо создать файлы:
/usr/share/nemo/actions/btfs_mount.nemo_action со следующим содержимым:
[Nemo Action] Name=Mount the torrent files Name[ru]=Монтировать торрент-файл(ы) Comment=Mount %F Comment[ru]=Монтировать %F Exec=<btfs.sh -m %F> Selection=notnone Extensions=torrent; Icon-Name=application-x-bittorrent Quote=single Dependencies=btfs;zenity;/usr/share/nemo/actions/btfs_umount.nemo_action :
[Nemo Action] Name=Umount a torrent files Name[ru]=Отмонтировать торрент-файлы Exec=<btfs.sh -u> Selection=none Extensions=any; Icon-Name=application-x-bittorrent Dependencies=btfs;zenity;И обрабатывающий скрипт /usr/share/nemo/actions/btfs.sh:
Код: Выделить всё
#!/bin/bash
# Скрипт для монтирования/размонтирования торрент-файлов средствами btfs от root/adminka
# Зависимости: btfs, zenity, awk, sed, wc
help="Должна быть указана только одна из перечисленных ниже опции:\n\t<b>-m</b> patch\t\tопция монтирования, patch - полный путь до монтируемого торрент-файла\n\t<b>-u</b>\t\t\t\tопция размонтирования, <u>путь указывать не нужно</u>, он сам извлекается из /etc/mtab"
if [[ $# -ge 2 && "$1" = "-m" ]]; then
patch_mas=("$@");
for i in "${patch_mas[@]:1:$[${#patch_mas[@]} - 1]}"; do
if [[ ! -f "$i" || ! -r "$i" ]]; then patch_err_mas=("${patch_err_mas[@]}" "$i\n\n")
else patch_good_mas=("${patch_good_mas[@]}" "$i"); fi
done
if [[ ${#patch_err_mas[@]} > 0 ]]; then
if [[ ${#patch_err_mas[@]} = 1 ]]; then zenity --error --width=700 --title="Операция отменена" --text="Файл\n\n<b>$(echo ${patch_err_mas[@]})</b>не существует или не доступен для чтения!"
else zenity --error --width=700 --title="Операция отменена" --text="Файлы\n\n<b>$(echo ${patch_err_mas[@]})</b>не существуют или не доступны для чтения!"; fi
exit 1
fi
for i in "${patch_good_mas[@]}"; do
test_patch=0
while [[ $test_patch = 0 || $(ls -s "$mount_point" | grep итого | awk '{print $2}') != 0 || ! -w "$mount_point" || ! -r "$mount_point" ]]; do
if [[ $test_patch = 0 ]]; then
mount_point=`zenity --title="Куда монтировать ${i##*/}?" --file-selection --directory --filename="$i"`
if [[ $? = 1 ]]; then mount_point=""; break; fi
test_patch=1
else
if [[ ! -w "$mount_point" || ! -r "$mount_point" ]]
then text_err="Директория <b><i>$mount_point</i></b> не доступна чтения и/или записи!"
else text_err="Точка монтирования <b><i>$mount_point</i></b> должна быть пустой!"; fi
zenity --question --ok-label="Да" --cancel-label="Нет" --width=500 --title="Ошибка выбора директории" --text="$text_err <i>Хотите указать другую?</i>"
if [[ $? = 1 ]]; then mount_point=""; break; else test_patch=0; fi
fi
done
if [[ "$mount_point" = "" ]]
then zenity --warning --width=500 --text="Вы не указали директорию монтирования для файла \"<b><i>${i##*/}</i></b>\", поэтому он будет пропущен!"
else btfs "$i" "$mount_point"; fi
done
elif [[ $# = 1 && "$1" = "-u" ]]; then
count=$(sed -n '/btfs/p' /etc/mtab | wc -l)
if [[ $count = 0 ]]; then zenity --info --width=300 --title="Нечего отмонтировать" --text="Файл <b>/etc/mtab</b> не содержит информации о наличии примонтированных торрент-файлов!"; exit; fi
count=$[count*2]
for ((i=0; i<count; i=i+2))
do
patch_mas[$i]='""'
patch_mas[$i+1]="$(sed -n '/btfs/p' /etc/mtab | awk '{print $2}' | sed 's/\\040/\ /g' | sed -n "$[(count-i)/2]""p")"
done
patch_mas[0]='TRUE'
upatch=`zenity --list --title="Что отмонтировать?" --text="Укажите, какие папки должны быть отмонтированы" \
--checklist --separator="\n" --hide-header --column="" --column="" \
"${patch_mas[@]}"`
zenity --question --ok-label="Да" --cancel-label="Нет" --width=500 --title="Удалить пустые папки?" --text="Удалить директорий бывших точек монтирования?"
if [[ $? = 0 ]]; then rm_dir="yes"; fi
count="$(echo "$upatch" | wc -l)"
for ((i=1; i<=count; i++)); do
umount_point=$(echo "$upatch" | sed -n "$i""p");
fusermount -u "$umount_point"
if [[ $? = 1 ]]
then zenity --error --width=500 --title="Ошибка размонтирования" --text="Директория \"<b>$umount_point</b>\" занята!"
else if [[ "$rm_dir" = "yes" ]]; then rm -rf "$umount_point"; fi
fi
done
else zenity --error --width=700 --title="Неверные параметры!" --text="$help"; exit; fi
sudo chmod a+x /usr/share/nemo/actions/btfs.sh
По итогу мы имеем 2 КМ: одно - для монтирования (доступно при одиночном или множественном выборе файлов с расширением .torrent), другое - для отмонтирования (доступно при фоновом клике); и скрипт, который выполняет всю грязную работу. Сразу оговорюсь, КМ работает только с папками, которые вам (вашему пользователю) доступны для записи, а монтирование, как известно, возможно только в пустую папку.

На этом презентация окончена, если вам приглянулись данные улучшения, тогда
1) Переходим в каталог с КМ, переименовываем файл mint-sha256sum.nemo_action в hash_sum.nemo_action, открываем текстовый редактор:
2) hash_sum.nemo_action должен принять вид:cd /usr/share/nemo/actions
sudo mv mint-sha256sum.nemo_action hash_sum.nemo_action
gksu xed hash_sum.nemo_action
[Nemo Action] Name=Check the hash Comment=Check the hash of the file Name[ru]=Проверить хеш Comment[ru]=Проверить хеш-сумму файла Exec=<hash_sum.sh %F> Selection=notnone Extensions=iso;img; Icon-Name=gtk-execute Quote=single Dependencies=md5sum;sha256sum;sha1sum;sha224sum;sha384sum;sha512sum;zenity;Примечание: если хотите, можете привести строку Extensions=iso;img; к виду Extensions=nodirs; , чтобы иметь в будущем возможность проверять целостность не только iso или img, а в принципе любых файлов...
Сохраняем файл hash_sum.nemo_action, переходим к следующему шагу.
3) Создаем пустой текстовый файл hash_sum.sh, открываем в xed:
Код: Выделить всё
cd /usr/share/nemo/actions
sudo touch hash_sum.sh
gksu xed hash_sum.sh
Код: Выделить всё
#!/bin/bash
result=`zenity --list --title="Вычисление хеш-сумм" --text="Что вычислить?" \
--radiolist --column "" --column "Функция" \
FALSE "md5" \
TRUE "sha256" \
FALSE "sha1" \
FALSE "sha224" \
FALSE "sha384" \
FALSE "sha512" \
--height=270 \
--width=220`
if [ "$result" = "" ]
then
zenity --info --title="Отмена" --text="Операция отменена"
exit
fi
result_sum="$result""sum"
for x in $@
do
all="$all<b>$result</b>: $(basename $x) <b>-></b> $($result_sum $x | awk '{print $1}')\n"
done
zenity --info --title="Результат" --text="$all"
5) Даем права на выполнение:
sudo chmod a+x /usr/share/nemo/actions/hash_sum.sh
Все, можете проверять

[Nemo Action] Name=Displays encoding information for an audio or video file Name[ru]=Отобразить информацию о медиафайле Exec=<media-info.sh -f %F> Selection=s Mimetypes=video/*;audio/*; Icon-Name=unknown Dependencies=zenity;ffmpeg; EscapeSpaces=trueРядышком поместите скрипт media-info.sh :
Не забудьте сделать скрипт media-info.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу).
sudo apt install mediainfo-gui
И использовать его из КМ "Открыть с помощью --> MediaInfo".
/usr/share/nemo/actions
ИЛИ здесь - ~/.local/share/nemo/actions
файл search_browser.nemo_action и вносим следующее содержимое:
[Nemo Action] Name=Search the internet... Name[ru]=Искать в интернете... Exec=<search_browser.sh> Selection=none Extensions= any; Conditions= desktop; Icon-Name=folder-saved-search-symbolic Dependencies=xclip;Внимательный читатель должно быть помнит комментарий, написанный в подробном описании чуть выше поля Exec:
# Для файла, находящегося прямо в папке с .nemo_action,
# достаточно указать его название, заключив в такие "кавычки" < >
Возникает вполне резонный вопрос: а что это за файл search_browser.sh, у меня его, вроде, нет?! Все верно, в качестве примера я решил наглядно показать, что в поле Exec спокойно можно указывать путь до обычного скрипта и что "<>" - действительно работает. Итак, создадим файл search_browser.sh со следующим содержимым:
#!/bin/bash
xclip -o | sed -r '2~1d;s/(^\s+|\s+$)//g;s/%/%25/g;s/#/%23/g;s/\$/%24/g;s/&/%26/g;s/\+/%2B/;s/,/%2C/g;s/:/%3A/g;s/;/%3B/g;s/=/%3D/g;s/\?/%3F/g;s/@/%40/g;s/\s/+/g' | awk '{print "http://www.google.ru/search?hl=ru&q=" $1}' | xargs yandex-browser -new-tab
Повторюсь, узнать, что означает этот код, можно в теме Работа с буфером обмена в Linux: теория и практика. Как видите в строчке
xargs yandex-browser -new-tab
указан яндекс-браузер, далеко ни все пользуются им, поэтому единственный штрих, который вам нужно будет внести в скрипт - заменить yandex-browser на название своего браузера. И, да, не забудьте сделать скрипт исполняемым: ПКМ->Свойства->Права->Разрешить исполнять как программу, иначе ничего не будет работать!Основная мысль та же, что и в предыдущем примере (Поиск текста, находящегося в буфере обмена, с помощью браузера). Создаем в соответствующей папке файл translate_yandex.nemo_action со следующим содержимым:
[Nemo Action] Name=Translate into Yandex... Name[ru]=Перевести в Яндексе... Exec=<translate_yandex.sh> Selection=none Extensions=any; Conditions=desktop; Icon-Name=mail-sent-symbolic Dependencies=xclip;В ней же создаем файл translate_yandex.sh, вставляем в него код:
#!/bin/bash
xclip -o | sed -r '2~1d;s/(^\s+|\s+$)//g;s/%/%25/g;s/#/%23/g;s/\$/%24/g;s/&/%26/g;s/\+/%2B/;s/,/%2C/g;s/:/%3A/g;s/;/%3B/g;s/=/%3D/g;s/\?/%3F/g;s/@/%40/g;s/\s/+/g' | awk '{print "translate.yandex.ru/?lang=en-ru&text=" $1}' | xargs yandex-browser -new-tab
Если вы пользуетесь не яндекс-браузером, то в
xargs yandex-browser -new-tab
словосочетание yandex-browser необходимо заменить на название вашего браузера (т.е. на ту команду, с помощью которой браузер можно запустить из терминала).Если хотите использовать, например, гугл-переводчик, то следует, вместо
print "translate.yandex.ru/?lang=en-ru&text=" $1
, написать это print "translate.google.com/translate_t?hl=ru#en|ru|" $1
. Сохраняем, ПКМ->Свойства->Права->Разрешить исполнять как программу, profit?![Nemo Action] Name=Display the contents of the clipboard... Name[ru]=Отобразить содержимое буфера обмена... Exec=<primary_clipboard.sh> Selection=none Extensions= any; Conditions= desktop; Icon-Name=dialog-information-symbolic Dependencies=xclip;zenity;Отмечу, что для работы должны быть установлены пакеты
xclip
и zenity
. Далее в этой же папке создаем текстовый файл primary_clipboard.sh:
#!/bin/bash
STRING=`xclip -o`&&echo -n "$STRING" | zenity --text-info --editable --width=550 --height=500 --title="Содержимое буфера обмена" --icon-name=dialog-information
Не забываем сделать скрипт primary_clipboard.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу). КМ будет доступно при фоновом клике ПКМ по рабочему столу.
КМ для смены кодировки текстовых файлов на системную UTF-8. Пригодится при использовании текстовых файлов с Винды, когда в текстовом редакторе, вместо кириллицы, отображаются кракозябры. Перекодировать можно как и отдельный файл, так и несколько.
Для работы потребуется пакет enca -
sudo apt install enca
Затем в соответствующей папке создаем файл UTF-8.nemo_action с содержимым:
[Nemo Action] Name=Recode to UTF-8 Name[ru]=Перекодировать в UTF-8 Exec=enconv -x utf-8 %F Selection=notnone Mimetypes=text/*; EscapeSpaces=true Icon-Name=kr_comparedirs Dependencies=enca;Done!
Примечание: в таком виде я не приемлю данное КМ, т.к. решить проблему "кракозябр" можно раз и навсегда лишь 1 командой в терминале. С другой стороны, enca не ограничивается одним лишь UTF-8. Можно было бы организовать zenity-интерфейс с возможностью выбрать не только UTF-8... В таком формате это выглядело бы лучше. Пока реализовывать это у меня нет интереса, поэтому этот пример попал под спойлер "архив"...
Transfer.sh - сервер, на который вы можете загрузить файлы до 10 гб для временного хранения (до 14 дней). В основном применяется, когда необходимо передать файлы м/ду устройствами. Обычно загрузка файлов на transfer.sh происходит через интерфейс командной строки посредством утилиты curl, поэтому, если она у вас не установлена, выполните -
sudo apt install curl
. Напишем КМ, чтобы не лезть постоянно в терминал:В соответствующей папке создаем файл transfer_sh.nemo_action с содержимым:
[Nemo Action] Name=Upload file to Transfer.sh Name[ru]=Загрузить файл на Transfer.sh Exec=<transfersh.sh %F> Selection=s Extensions=nodirs; Quote=double Icon-Name=cs-online-accounts Dependencies=curl;Рядышком создаем обрабатывающий скрипт - transfersh.sh :
Код: Выделить всё
#!/bin/bash
fullpathname=$@ #Получаем полный путь к файлу
name=${fullpathname##*/} #Получаем расширение
name=${name//" "/"_"} #Заменяем пробелы нижними подчеркиваниями
#Загрузка файла на Transfer.sh
link=`curl --upload-file "$fullpathname" "https://transfer.sh/$name"`
status=$?
if [ $status = 0 ]
then
#Копирование ссылки в буфер обмена
echo -n "$link" | xclip -i -selection clipboard
#Запись истории
echo $(date +%F) "$link" >> $HOME/.transfer
notify-send -t 10000 -i "gtk-ok" "Загрузка завершена" "Ссылка скопирована в буфер обмена:\n$link"
else
notify-send -t 10000 -i "error" "Transfer.sh" "При загрузке возникла ошибка: $status"
fi
sudo chmod a+x /usr/share/nemo/actions/transfersh.sh