Service Menu для Krusader/Dolphin

Категория: GUI

Создаем Service Menu в файловом менеджере Linux (Krusader, Dolphin).

Готовые Service Menus есть здесь - https://store.kde.org/browse?cat=102&ord=latest

Примечание

Чтобы не указывать полный путь к скриптам, нужно прописать путь в $PATH через файл /etc/profile.d/my-path.sh:

if [[ $USER == 'stas' ]]; then
    test -f /home/$USER/.bash_path && . /home/$USER/.bash_path
fi

Нужно завершить сеанс и запустить заново.

Так krusader запускает команду:

/bin/sh -c (cd '/tmp' && (echo "My service command"))

Каталог с *.desktop ярлыками запуска приложений:

/usr/share/applications/
~/.local/share/applications/
/usr/share/app-install/desktop/

Каталоги с ярлыками контекстного меню для KDE (service menus krusader):

kf5-config --path services
/home/stas/.local/share/kservices5/:/usr/share/kservices5/

Пути такие:

## KDE Plasma 5 / KF5
/usr/share/kservices5/ServiceMenus/
~/.local/share/kservices5/ServiceMenus/

## KDE 4
/usr/share/kde4/services/
~/.kde/share/kde4/services/

ServiceMenus *.desktop

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
#ExcludeServiceTypes=audio/*,inode/directory
MimeType=all/allfiles;text/*
Icon=gvim
X-KDE-Priority=TopLevel
X-KDE-Submenu=Submenu name
Actions=open_with_gvim
#TryExec=myprog  ## Если программа не найдена - меню не отображается

[Desktop Action open_with_gvim]
Name=Open with gVim
Name[ru]=Открыть в gVim
Icon=gvim
Exec=gvim -p %F

Вложенность меню ограничивается на уровне "Действия/Actions" » "My Submenu" » Command.

X-KDE-Priority=TopLevel ## Видимая опция меню сразу в контекстном меню или в подменю "Действия/Actions"

Application *.desktop

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Name=Pad Writer
Name[ru_RU]=Pad Writer
Comment=Pad Notes from Pad Writer
Icon=some-ico
Exec=chromium --app=http://localhost/my/memos/pad-writer/ --app-window-size=1000,600

####################
## Доп. параметры ##
####################

Terminal=false
# Запуск 1 экземпляра. Не работает..
#SingleMainWindow=true

# WM_CLASS для группирования окон . Не работает..
StartupWMClass="ChromeApp"

####################
## Подменю ярлыка ##
####################

Actions=RunDaemon;

[Desktop Action RunDaemon]
Name=Run daemon
#Icon=AppImageLauncher
Exec=(cd /home/user/project/ && ./run-daemon.sh)
Примечание

Чтобы ярлыки google applications нормально отображались и не группировались вместе с браузером - нужно заменить класс WM_CLASS запущенного приложения.
Заменить класс приложения можно утилитой xdotool:

xdotool search --name "Gmail" set_window --class ChromeApp
xdotool search --name "Google Переводчик" set_window --class ChromeApp

К сожалению просто параметр StartupWMClass не меняет класс окна для Chrome Application. Придется менять класс после запуска Chrome приложения:

Exec=/opt/google/chrome/google-chrome --profile-directory=Default --app-id=XXX && xdotool search --name "Gmail" set_window --class "GoogleAppGmail"
StartupWMClass=GoogleAppGmail

Чтобы узнать класс или название окна, запустите утилиту xprop и нажмите на окно:

xprop | grep WM_CLASS | awk '{print $4}'
xprop | grep ^WM

Пример вывода xprop для Google Chrome:

WM_WINDOW_ROLE(STRING) = "browser"
WM_CLASS(STRING) = "google-chrome", "Google-chrome"

Пример вывода xprop для Google Chrome Application:

WM_WINDOW_ROLE(STRING) = "pop-up"
WM_CLASS(STRING)       = "crx_XXXXXX", "Google-chrome"
WM_NAME(UTF8_STRING)   = "Gmail - Входящие (1 208) - youremail@gmail.com - Gmail"

Значение WM_CLASS содержит "<classname>", "<class>":

xdotool search --classname crx_XXXXXX set_window --class ChromeApp && notify-send OK || echo NO
xdotool search --class Google-chrome set_window --class ChromeApp && notify-send OK || echo NO
xdotool search --role pop-up set_window --class chrome-app && notify-send OK || echo NO

Дополнительные параметры Desktop:

[Desktop Entry]
Terminal=true
NoDisplay=true  ## Не отображать это приложение в меню
X-TDE-InitialPreference=[1 | 2]

Mime-Types:

all/allfiles
inode/directory
text/*;image/*
kdedevice/*
audio/midi;audio/mid;audio/mpegurl;audio/wav;audio/x-wav;audio/aiff;audio/x-aiff;audio/x-mid;audio/x-midi;audio/x-mp3;audio/mp3;audio/x-mpeg-url;audio/x-mpegurl;application/ogg
text/plain;text/html;text/xml;text/css
application/pdf
application/x-ruby
application/x-bittorrent

#krusader #.desktop

категория: GUI