Шифрование GPG в контекстном меню Nautilus

Использованиеcsvkit:

$ csvformat -D '|' file.csv
John|Tonny|345.3435,23|56th Street

Инструменты в csvkit знают, как справиться со сложностями файлов CVS, и здесь мы используем csvformat, чтобы правильно заменить разделительные запятые на |. Поля вывода будут заключены в кавычки по мере необходимости.

Пример:

$ cat file.csv
John,Tonny,"345.3435,23",56th Street
The | factory,Ltd.,"0,0",meep meep

$ csvformat -D '|' file.csv
John|Tonny|345.3435,23|56th Street
"The | factory"|Ltd.|0,0|meep meep

0
30.12.2019, 18:12
2 ответа

Насколько я знаю, есть два простых способа добавить записи в контекстное меню Nautilus:

  1. Скрипты Наутилуса
  2. nautilus-actions, который, в зависимости от вашего дистрибутива, может быть устаревшим.

Я использую Debian Bullseye/sid, где nautilus-actionsнедоступен, поэтому я представлю способ, используя скрипт Nautilus . Чтобы узнать больше об этой функциональности Nautilus, вы можете потратить немного времени на Ubuntu сторону StackExchange , там ребята много говорят о скриптах Nautilus. По сути, эта функция позволяет вам добавлять записи контекстного меню в сценарии Bash (или Python, например ), расположенные в вашем каталоге ~/.local/share/nautilus/scripts/.


Использование двух скриптов

Я предлагаю реализовать два сценария :один для шифрования, другой для расшифровки. Ваше контекстное меню будет выглядеть следующим образом, если щелкнуть правой кнопкой мыши -файл:

Nautilus right-click menu

Зашифровать скрипт

Сценарий шифрования будет просто

#!/usr/bin/env bash
# Encrypt
# gpg-encrypt Nautilus script

gpg -c --no-symkey-cache "$1" && rm -f "$1"

, где первый аргумент Bash $1— это путь к файлу, выбранный Nautilus при щелчке правой кнопкой -.

--no-symkey-cacheзапрещает gpgхранить парольную фразу в кэше. По умолчанию парольная фраза хранится в течение определенного времени после шифрования и расшифровки файла.Лично мне эта функция не нравится, поэтому я использую эту опцию.

Я также добавил && rm -f "$1", чтобы удалить исходный файл после шифрования, вы можете удалить его, если не хотите.

Сценарий расшифровки

Сценарий расшифровки будет

#!/usr/bin/env bash
# Decrypt
# gpg-decrypt Nautilus script

ext=`echo "$1" | grep [.]gpg`
if [ "$ext" != "" ]; then
    gpg --batch --yes --no-symkey-cache "$1"
else
    zenity --error --text "The selected file is not crypted."
fi

Позвольте мне объяснить, что делает скрипт. Он использует переменную ext, которая пуста, если выбранный файл не является файлом .gpg, и которая не пуста , если выбранный файл является файлом .gpg.

Если выбранный файл является зашифрованным .gpg, сценарий будет использовать команду gpgдля его расшифровки. Я передал параметры --batch --yes, чтобы перезаписать, если выходной файл уже существует. Например, расшифровка file.gpgперезапишет file, если он существует. Если вы не хотите перезаписывать, я предлагаю вам использовать опциюoutputgpgи zenity --file-selection, чтобы указать имя расшифрованного файла.

Если выбранный файл не является зашифрованным .gpg, сценарий будет использовать zenity --errorдля всплывающего -окна ошибки.

Этот сценарий проверяет, зашифрован ли файл, просматривая расширение. Лучший способ сделать это — проверить MIME-тип выбранного файла. MIME-тип зашифрованного файла можно узнать с помощью

$ > file
$ file -b --mime-type file.gpg
application/octet-stream

Посколькуapplication/octet-streamотносится к обычному двоичному файлу и не обязательно к зашифрованному файлу, я не думаю, что этот подход будет лучше, чем проверка расширения файла. С другой стороны, я знаю, что Nautilus сопоставляет мои зашифрованные файлыgpg-с типом MIME application/pgp-encrypted. Может быть, кто-то знает, как получить этот MIME-тип из файла .gpgс помощью чего-то другого, кроме команды file, в этом случае это будет актуально.


Использование двух файлов

Если вы не хотите использовать два пункта меню, -правый щелчок, вы можете использовать один скрипт:

#!/usr/bin/env bash
# Encrypt-Decrypt
# gpg-encrypt/decrypt Nautilus script

ext=`echo "$1" | grep [.]gpg`
if [ "$ext" != "" ]; then
    gpg --batch --yes --no-symkey-cache "$1"
else
    gpg -c --no-symkey-cache "$1" && rm -f "$1"
fi

Этот сценарий будет расшифровывать, если выбранный файл является .gpgфайлом, и шифровать, если выбранный файл является любым другим.


Расшифровка двойным щелчком в Nautilus

Кроме того, вы можете разрешить Nautilus расшифровывать зашифрованное .gpgдвойным щелчком -, добавив следующую запись рабочего стола в каталог ~/.local/share/applications/.

# Decrypt.desktop
[Desktop Entry]
Name=GPG Decrypt
Terminal=false
Type=Application
MimeType=application/pgp-encrypted;
Exec=gpg --batch --yes --no-symkey-cache %F
NoDisplay=true

Если никакое другое приложение не используется по умолчанию, двойной -щелчок в Nautilus теперь расшифровывает файл. Seahorse может быть выбран в качестве приложения по умолчанию, если вы используете GNOME по умолчанию, в этом случае вам нужно выбрать GPG Decryptв Open With Other Application Menu.


Установка

Этот небольшой скрипт Bash установит все в нужное место для вас:

chmod +x 'Encrypt' 'Decrypt' # script files must be executable!
cp Encrypt Decrypt ~/.local/share/nautilus/scripts/
cp  Decrypt.desktop ~/.local/share/applications/
update-desktop-database ~/.local/share/applications/
nautilus -q 
nautilus

Демо

Demo

PS:Протестировано на GNOME 3.34.2 и gpg2.2.17 (вы можете проверить это с помощью$ gpg --version).

1
28.01.2020, 02:38

sudo apt install seahorse-nautilus

, затем перезапустите Nautilus с помощью команды :nautilus -q

, затем щелкните файл правой кнопкой мыши и выберите Encrypt

.
2
16.12.2020, 12:15

Теги

Похожие вопросы