Service Menu для Krusader/Dolphin
Создаем 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