Hi everyone! I recently created a custom service menu for the Dolphin file manager, but unfortunately, it doesn’t seem to be working as expected.
My goal is to have a menu to convert image file formats quickly with image magick.
Here is the .desktop file I managed to arrange
[Desktop Entry]
Type=Service
Name=Convert Image
Icon=gtk-convert
MimeType=image/png;image/jpg;image/jpeg;image/ico;image/heic;image/svg;image/webp;
Actions=topng;tojpg;toico;towebp
X-KDE-Submenu=Convert Image
[Desktop Action topng]
Name=To Png
Exec=sh -c 'FILE="%f"; DIRECTORY="$(dirname $FILE)"; FILENAME="${FILE%.*}"; magick "$FILE" -format png "$DIRECTORY/$FILENAME.png"'
[Desktop Action tojpg]
Name=To Jpg
Exec=sh -c 'FILE="%f"; DIRECTORY="$(dirname $FILE)"; FILENAME="${FILE%.*}"; magick "$FILE" -format jpg "$DIRECTORY/$FILENAME.jpg"'
[Desktop Action toico]
Name=To Ico
Exec=sh -c 'FILE="%f"; DIRECTORY="$(dirname $FILE)"; FILENAME="${FILE%.*}"; magick "$FILE" -format ico "$DIRECTORY/$FILENAME.ico"'
[Desktop Action towebp]
Name=To Webp
Exec=sh -c 'FILE="%f"; DIRECTORY="$(dirname $FILE)"; FILENAME="${FILE%.*}"; magick "$FILE" -format webp "$DIRECTORY/$FILENAME.webp"'
When I right-click on an image my custom menu item appears as expected. However, when I click on the menu item, nothing happens. There are no error messages or any indication of what might be going wrong.
I made sure the .desktop file is executable and the sh script works when using it on the command line, so I’m out of ideas for what could be going wrong.
Are there any logs I can check to get more information about what’s failing? I’m using plasma 6.3.3 on Arch btw
Edit: To answer how to troubleshoot custom service menus (specifically .desktops) the desktop-file-validate
cli utlility checks all the syntax errors and can provide solutions to what’s wrong. For my use case though, using a script file for the Exec line and avoiding any double quotes was the practical way of assuring my service menu works.
It’s fixed now! At first I researched a little more and found about the
desktop-file-validate
cli utility from thedesktop-file-utils
package, and it did tell me a lot about the syntax errors I was making with the exec command.But as you wisely suggested, dealing with those escaping rules was a bit too bothersome for my use case, so I ended going the bash script route which worked flawlessly at last! So thank you for pointing that out!
Here’s the final .desktop file for anyone interested:
and the bash script coupled with it:
#!/bin/bash FILE="${1}" FORMAT="${2}" # Check if magick is installed if ! command -v magick &> /dev/null; then echo "Error: magick command not found. Please install ImageMagick." exit 1 fi # Check if FILE exists if [[ ! -f "$FILE" ]]; then echo "File not found: $FILE" exit 1 fi DIRECTORY=$(dirname "$FILE") # Get the file name by looking for the longest match starting from the beginning of the string up to the last dot. FILENAME=$(basename "$FILE" .${FILE##*.}) # Convert the file format using magick magick "$FILE" -format "$FORMAT" "$DIRECTORY/$FILENAME.$FORMAT"
Glad you got it working!
BTW, in case you’re not aware of it, you might find the
shellcheck
command useful when writing scripts.ooo that looks nice! I’ll try it once I need to unrust my script skills again, thanks for the help!