Как создать пункты контекстного меню в KDE

Изображение пользователя Soi-Fong.

При клике правой кнопкой на файлах, в выпадающее меню можно добавлять собственные пункты. Для этого надо создать специальные .desktop файлы по следующим путям:
В KDE 3 ~/.kde/share/apps/konqueror/servicemenus/
В KDE 4 ~/.kde/share/kde4/services/ServiceMenus/
Вот пример пункта меню для отправки файла через блютуз в KDE 4. Поскольку родной блютуз остался выкидышем современных технологий, я использую программу отправки из гнома.

[Desktop Entry]
Type=Service
Actions=bluetooth;
ServiceTypes=KonqPopupMenu/Plugin,all/allfiles
X-KDE-Priority=TopLevel

[Desktop Action bluetooth]
Exec=gnome-obex-send %U
Icon=preferences-system-bluetooth
Name=Отправить через bluetooth

Теперь немного пояснений.
Раздел [Desktop Entry]
Type - тип .desktop файла должен быть Service.
Actions - тут через точку с запятой перечисляются действия (action1;action2;), каждому из которых должен соответствовать раздел ([Desktop Action action1], [Desktop Action action2]).
ServiceTypes - mime-типы файлов, перечисляются через запятую, all/allfiles соответствует всем файлам, all/all всем файлам и каталогам, KonqPopupMenu/Plugin - без этого срабатыает не на всех типах файлов.
X-KDE-Priority - это нужно для kde4, я не совсем понял для чего.
X-KDE-Submenu=подменю - этот параметр следует добавить, если хочется заключить действия в отдельное подменю с именем "подменю".

Раздел [Desktop Action имя]
Exec - команда на запуск, %U является именем файла, на котором мы вызвали меню.
Icon - имя иконки.
Name - текст, отображаемый в качестве пункта меню.

Если необходимо создать пункт для всех пользователей, а не только для текущего, то создаем файлы не в ~/.kde/, а в /usr/ по аналогичным путям.

Комментарии (41)

0
Гость - 30 Март, 2009 - 08:28

Отлично. ТО есть можно теперь сделать "отправить на usb диск"

0
Soi-Fong - 30 Март, 2009 - 17:06
Изображение пользователя Soi-Fong.

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

[Desktop Entry]
Type=Service
Actions=editAsRoot;
ServiceTypes=KonqPopupMenu/Plugin,all/all
X-KDE-Priority=TopLevel

[Desktop Action editAsRoot]
Exec=kdesu kwrite %U
Icon=kate
Name=Редактировать под рутом

0
Ockonal - 30 Март, 2009 - 17:30
Изображение пользователя Ockonal.

Да сложного-то нету. Только я немного не представляю, как организовать код, чтобы был показ нескольких девайсов (если такие есть)

0
Soi-Fong - 30 Март, 2009 - 17:51
Изображение пользователя Soi-Fong.

Наверное, только если сканить устройства чем-нить и создавать .desktop файлы при нахождении.

0
Lang - 19 Апрель, 2009 - 14:23
Изображение пользователя Lang.

Можно установить вот этот пакет (jaunty) и появится вкладка контекстного меню "Действия root" с кучей всяких функций

0
Ockonal - 30 Март, 2009 - 17:03
Изображение пользователя Ockonal.

ВО, спасибо! =) В тему! Вот, как раз, нужно было это.

0
balamutick - 30 Март, 2009 - 17:21
Изображение пользователя balamutick.

1)
зашифровать файл с паролем "123",
расшифровать с паролем "123".

Если дома под линуксом, ещё можно думать о безопасности.
То носимые на флешке файлы всегда рискуют быть потерянными в чужие руки...

2) перекодировку содержимого html страницы(любого текстового файла) из одной кодировки (западно-европейской например) в другую (UTF-8 - навсегда). Тоже самое касаемо mp3 тегов.

3) затереть место занимаемое этим файлом нулями или хламом, дабы не позволить восстановить этот файл никакими средствами.

4) получить хеш этого файла (e2k, md5sum, torrent-хеш и т.п.)

ещё применения можно придумать, кто-бы реализациями поделился.

0
Ockonal - 30 Март, 2009 - 17:33
Изображение пользователя Ockonal.

Опять-же, ничего сложного, разве что с шифрованием проблемки будут.

0
Soi-Fong - 30 Март, 2009 - 17:54
Изображение пользователя Soi-Fong.

Я имел в виду, делиться готовыми файлами ;)

0
Ockonal - 30 Март, 2009 - 17:57
Изображение пользователя Ockonal.

Конечно, в основных случаях, стандартной работы не хватит. Поэтому придется прилаживать программы. Например, скрипты на питоне.

0
Linus - 11 Июнь, 2010 - 03:10
Изображение пользователя Linus.

3) затереть место занимаемое этим файлом нулями или хламом, дабы не позволить восстановить этот файл никакими средствами.
Сам искал такую функцию и нашел реализацию.
Немного переделал уже готовый пункт под себя:
#Sends items to the shred command.
#Made by Josh Barrick
#~/.kde4/share/kde4/services/ServiceMenus/
#Enjoy! Any sugggestions can be mailed to [email protected]

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=all/allfiles;
Actions=Shred
X-KDE-Submenu=Shred

[Desktop Action Shred]
Name=Удалить навсегда
Icon=trash-empty
Exec=shred -u -f -z -n7 %u

Поясню значения команды shred:

-u -n7 - удалить файл после перезаписи с n=7 проходами перезаписи (по умолчанию 25 проходов)
-f - изменить права для разрешения записи, если необходимо
-z - прячет «следы зачистки», добавляя в конце файла нули

Единственное ограничение: shred работает только с файлами и не может удалять папки + не всегда корректно работает с ext3/ext4

+1
Ockonal - 30 Март, 2009 - 17:39
Изображение пользователя Ockonal.

Могу взяться за все это по списку. Например, получение хешей, затирание, шифрование.
Если, конечно, это кому-то надо.

+1
balamutick - 30 Март, 2009 - 18:28
Изображение пользователя balamutick.

Вообще я написал, то, что по жизни постоянно было нужно или было использованно из других программ.

Для Soi-Fong - Я написал, свои предложения тем гуру, которые за 3 секунды придумают реализацию, но вот куда эту
реализацию применить пока не знают :-)

Для перекодировки mp3, можно прикрутить указанный конвеер програм под реалии одного файла(того самого, поторый будет под правой кнопкой)
find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1
Взято из темы про Амарок: http://kubuntu.ru/amarok.html

+3
iGoodwin - 30 Март, 2009 - 20:49
Изображение пользователя iGoodwin.

Открытие папки под рутом:
[Desktop Entry]
Type=Service
Actions=OpenAsRoot
ServiceTypes=KonqPopupMenu/Plugin,inode/directory
X-KDE-Priority=TopLevel

[Desktop Action OpenAsRoot]
Exec=kdesu dolphin %U
Icon=system-file-manager
Name=Открыть как root...

0
raven-alex - 30 Март, 2009 - 21:48

А как сделать так, чтобы пункты контекстного меню появлялись не только при щелчке на файл или папку, но и при щелчке на рабочем столе, например, для запуска часто используемых программ, типа текстового процессора или mc? И есть ли где-то список всевозможных ServiceTypes?

+1
balamutick - 31 Март, 2009 - 09:35
Изображение пользователя balamutick.

Цитата от сюда: http://hell11.net/content/view/22/88888893/
Для быстрой работы с 7zip архивами нам понадобиться создать два файла: 7z.desktop и un7z.desktop. Первый будет служить для упаковки файлов в архив, второй для распаковки 7zip архивов.

В файл 7z.desktop заносим следующие строчки:

[Desktop Entry]
ServiceTypes=all/allfiles,inode/directory
Encoding=UTF-8
Actions=Create7zArhive

[Desktop Action Create7zArhive]
Name[ru]=Создать архив *.7z
Exec=7z a %u.7z %u
Icon=ark

А в файл un7z.desktop заносим следующие строчки:

[Desktop Entry]
Encoding=UTF-8
ServiceTypes=application/x-7z
Actions=Unpacking7zArhive

[Desktop Action Unpacking7zArhive]
Name[ru]=Распаковать архив *.7z
Exec=7z e %F
Icon=ark

0
Woland61 - 2 Апрель, 2009 - 13:35

а нету такой же инструкции, только для кде4 ? :)

+2
mityukov - 31 Март, 2009 - 12:47
Изображение пользователя mityukov.

Вот еще идейка:

~/.kde/share/kde4/services/ServiceMenus/mount_iso.desktop

[Desktop Entry]
ServiceTypes=application/x-iso
Actions=MountISO

[Desktop Action MountISO]
Name=Mount ISO at /media/iso/
Exec={гуевое sudo} mount -o loop -t iso9660 %U /media/iso/

TODO:
- собственно "гуевое sudo" -- никогда не приходилось юзать;
- авто-создание папки /media/iso, если такой нет.

Еще неск. идей на все ту же тему:

- Создание ISO-образа из выбраных файлов/папок (using mkisofs)
- Запись ISO-образа на диск (using cdrecord)

0
Buy - 2 Апрель, 2009 - 00:39

Отличная заметка! Спасибо :) Буду пробовать.

0
Woland61 - 2 Апрель, 2009 - 13:38

[Desktop Action addTo7Zip]
Name=Compress to 7-Zip
Name[ru]=Создать 7-Zip архив
Icon=utilities-file-archiver
Exec=ark –changetofirstpath –add –autofilename 7z %F

никто не подскажет, почему это не работает в кубунту 8,10 кде4,2,1 ?

просто ругается и открывает арк

+1
Soi-Fong - 2 Апрель, 2009 - 16:01
Изображение пользователя Soi-Fong.

Для KDE 4 нужно исправить вот так:
Type=Service - добавить
Actions=действие; - в конце точка с запятой обязательна
ServiceTypes=KonqPopupMenu/Plugin, ... - добавить этот mime-тип
X-KDE-Priority=TopLevel - добавить

Типы файлов можно узнать в свойствах любого файла, нажав на кнопку с ключом, будет написан вверху под заголовком

0
TE0I0TEJIb - 14 Апрель, 2009 - 15:48
Изображение пользователя TE0I0TEJIb.

а можно как то енто прикрутить к кблютузу??или какой пакет установить для гномового блютуза?я нашел только bluez, но как им поользоваться не могу понять(его даже в меню нет)

0
Voyageur - 15 Апрель, 2009 - 09:31
Изображение пользователя Voyageur.

Понравилась идея, сел за пункт "Отправить на съемное устройство". Вечерком, надеюсь, докурю это дело! Всвязи с этим появился вопрос: как можно отследить подключение/отключение съемного устройсва?
Я пока использую в качестве этого команду mount, в которой определяю примонтированные флешки, но может быть это можно сделать более красивым(удобным) способом?))

+3
Voyageur - 16 Апрель, 2009 - 06:29
Изображение пользователя Voyageur.

Вобщем, доделал я пункт меню "Отправить на съемное устройство". Взять его (в архиве) можно здесь.
Скрипт check-devices.sh нужно добавить в автозагрузку. Этот скрипт с интервалом в 1 сек. сканирует подмонтированные в папку /media устройства. Если происходят какие-либо изменения со списком, то запускается скрипт add-sendto-items.sh, который находится в этойм же каталоге - он формирует файл /home/`whoami`/.kde/share/kde4/services/ServiceMenus/SendTo.desktop с описанием меню.
На всякий случай приведу коды скриптов
1. check-devices.sh:
#!/bin/bash
OldState=
#Бесконечный цикл. В нем с интервалом в 1 секунду сканируем подмонтированные в папку /media устройства. Если происходят ккие-либо изменения со списком, то запускаем скрипт add-sendto-items.sh, который находится в этойм же каталоге.
while [ 1 ]; do
NewState=`mount | awk '{print $3}' | grep "^\/media"`
if [ "$NewState" != "$OldState" ]; then
./add-sendto-items.sh
fi
OldState=$NewState
sleep 1
done
exit 0

2. add-sendto-items.sh:
#!/bin/bash

ListOfItems=
#Получаем список примонтированных устройств. Выбираются устройства, смонтированные в папку /media
ListOfDevices=`mount | awk '{print $3}' | grep "^\/media"`

#Далее составляем последовательность имен устройств, разделенных символами ";". Результат помещаем в переменную $Actions
for Device in $ListOfDevices; do
Actions+="`echo $Device | sed 's/^\/.*\///'`;"
done

#Отправляем в файл SendTo.desktop раздел [Desktop Entry]
echo -e "[Desktop Entry]\nType=Service\nActions=$Actions\nServiceTypes=KonqPopupMenu/Plugin,all/all\nX-KDE-Priority=TopLevel\nX-KDE-Submenu=Отправить на съемное устройство" >/home/`whoami`/.kde/share/kde4/services/ServiceMenus/SendTo.desktop

#А затем перебираем все обнаруженные устройства и формируем для них разделы [Desktop Action $Name], которые тут же добавляем в файл SendTo.desktop
for Device in $ListOfDevices; do
Name=`echo $Device | sed 's/^\/.*\///'`
echo -e "\n[Desktop Action $Name]\nName=$Name\nIcon=/usr/share/icons/default.kde4/48x48/devices/drive-removable-media-usb.png\nExec=cp %U $Device" >>/home/`whoami`/.kde/share/kde4/services/ServiceMenus/SendTo.desktop
done
exit 0

0
Ockonal - 16 Апрель, 2009 - 15:55
Изображение пользователя Ockonal.

Спасибо за старания ;)

0
Гость - 18 Апрель, 2009 - 23:08

А не проще это сделать в привязках файлов в центре управления? Задал расширение, указал чем открывать + параментры и ВУАЛЯ! По моему так проще.

0
Voyageur - 19 Апрель, 2009 - 17:50
Изображение пользователя Voyageur.

Не всегда. По-моему, там указывается только программа, открывающая файл/приложение при двойном клике на нем. А вот если надо добавить именно действие, например, открыть текстовый файл в редакторе с правами рута...вы ж его не всегда с такими правами захотите откыть...Это и хочется сделать опционально!

0
Гость - 24 Январь, 2010 - 00:11

Ребят, все вы молодцы и всё это классно.
Подскажите, пожалуйста, где почитать про всё это подробнее, желательно на русском.
Устанавливал Mandriva 2010 в режиме ручной выборки пакетов. За ненадобностью не ставил огромную часть софта, который предлагается по умолчанию. В том числе и Konqeror. При клике правой кнопкой мыши на рабочем столе или в Dolphin в контекстном меню есть пункт СОЗДАТЬ, а в нём подпункт ССЫЛКА НА УСТРОЙСТВО... И больше ничего.
Как с нуля создать все нужные подпункты, типа создать текстовый файл, папку, блочное устройство, символьное устройство и т.п.?
Где хотябы это изучить можно?
Благодарю.

0
DrUpS - 25 Январь, 2010 - 16:07

Смотри сюда --> http://kubuntu.ru/node/4905

0
DeathMoroz - 25 Январь, 2010 - 14:51

есть нужда конвертить видео файлы таким образом. Но как выводить прогресс и другую инфу?

0
Гость - 30 Сентябрь, 2010 - 07:38

Вот для конвертации ID3 тегов в Unicode:
[Desktop Entry]
Type=Service
Actions=KonvertTag;
ServiceTypes=KonqPopupMenu/Plugin,audio/mpeg
X-KDE-Priority=TopLevel

[Desktop Action KonvertTag]
Name=Конвертировать ID3 теги в UTF-8
Exec=mid3iconv -eCP1251 %U

0
Гость - 30 Сентябрь, 2010 - 09:43

А вот для расчета контрольной суммы MD5:
[Desktop Entry]
Type=Service
Actions=ShowMD5Sum;
ServiceTypes=KonqPopupMenu/Plugin,all/allfiles
X-KDE-Priority=TopLevel

[Desktop Action ShowMD5Sum]
Name=MD5 сумма
Exec=md5sum %U | xargs -0 kdialog -msgbox

0
mityukov - 30 Октябрь, 2010 - 23:01
Изображение пользователя mityukov.

Возник вопрос: допустим, я хочу чтобы программа запускалась в терминале (важен ее вывод) -- есть ли спец. директива на этот счет?

Вот текущий вариант (к сожалению, несмотря на 'Terminal=true', волшебного появления терминала не происходит):

[Desktop Entry]
ServiceTypes=KonqPopupMenu/Plugin,video/*
Actions=convert2ipod4x3;convert2ipod16x9;
Type=Service
X-KDE-Submenu=Convert to iPod
X-KDE-Submenu[ru]=Конвертировать для iPod

[Desktop Action convert2ipod4x3]
Name=Ratio 4x3
Name[ru]=Пропорции 4x3
Icon=gtkpod
Exec=/usr/local/bin/ipod4x3 %u `kdialog --getsavefilename ~/Movies/iPod/new.mp4 *.mp4`
Terminal=true

[Desktop Action convert2ipod16x9]
Name=Ratio 16x9
Name[ru]=Пропорции 16x9
Icon=gtkpod
Exec=/usr/local/bin/ipod16x9 %u `kdialog --getsavefilename ~/Movies/iPod/new.mp4 *.mp4`
Terminal=true

0
Гость - 5 Февраль, 2013 - 16:30

Exec=konsole -e /usr/local/bin/ipod4x3 %u `kdialog --getsavefilename ~/Movies/iPod/new.mp4 *.mp4` будет строчка команды

0
useless_dream - 10 Ноябрь, 2012 - 15:52
Изображение пользователя useless_dream.

c kde-apps скачал готовый десктоп файл для пункта "монтировать iso"
по идее всё сделал верно, пункт появился в Действия - Монтировать iso, и почти всё работает открывается окошко, что бы выбрать папку для монтирования, запрашивается пароль рута, затем даже открывается указанная папка, но она пуста..

образ исправен.
собственно где ошибка?
+1
Master_Yoda - 10 Ноябрь, 2012 - 16:30

Если Вам не принципиально важно разбираться с пунктами меню и чего там не работает, то:

~$ aptitude install kde-service-menu-fuseiso

0
useless_dream - 10 Ноябрь, 2012 - 19:58
Изображение пользователя useless_dream.

то что нужно спасибо

0
Apanni - 18 Ноябрь, 2013 - 05:42

Воспроизведение в VLC player каталога CD/DVD video или музыки

[Desktop Entry]
Type=Service
Actions=Play;
X-KDE-ServiceTypes=KonqPopupMenu/Plugin,all/all
X-KDE-Priority=TopLevel

[Desktop Action Play]
Name=Play with VLC Player
Name[bg]=Изпълнение на с VLC
Name[en_GB]=Play with VLC Player
Name[ru]=Воспроизведение в VLC Player
Name[uk]=Грати програвачем VLC

Icon=vlc
Exec=vlc "%u"

0
Sabalt - 21 Ноябрь, 2013 - 10:56
Изображение пользователя Sabalt.

А каким образом можно добавить контекстное меню в KMail?

0
Гость - 25 Июнь, 2014 - 22:28

Вот в usr/share/templates нашел файл soffice.odt.desktop вот его содержание :

[Desktop Entry]
Name=LibreOffice Writer ...
Comment=Enter LibreOffice Writer filename:
Comment[de]=Name der LibreOffice Writer-Datei eingeben:
Type=Link
URL=.source/soffice.odt
Icon=libreoffice-oasis-text

подскажите пожалуйста что менять.

0
Fierta - 26 Июнь, 2014 - 00:58
Изображение пользователя Fierta.

Я Вам на форуме убунты уже написал.

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры