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.

  • tomatoelyOP
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    5 天前

    It’s fixed now! At first I researched a little more and found about the desktop-file-validate cli utility from the desktop-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:

    [Desktop Entry]
    Type=Service
    MimeType=image/png;image/jpg;image/jpeg;image/ico;image/heic;image/svg+xml;image/webp;
    Actions=topng;tojpg;toico;towebp
    X-KDE-Submenu=Convert Image Format
    Icon=viewimage
    
    [Desktop Action topng]
    Name=To Png
    Exec=/home/myuser/.local/share/kio/servicemenus/scripts/convert-image.sh %f png
    Icon=viewimage
    
    [Desktop Action tojpg]
    Name=To Jpg
    Exec=/home/myuser/.local/share/kio/servicemenus/scripts/convert-image.sh %f jpg
    Icon=viewimage
    
    [Desktop Action toico]
    Name=To Ico
    Exec=/home/myuser/.local/share/kio/servicemenus/scripts/convert-image.sh %f ico
    Icon=viewimage
    
    [Desktop Action towebp]
    Name=To Webp
    Exec=/home/myuser/.local/share/kio/servicemenus/scripts/convert-image.sh %f webp
    Icon=viewimage
    
    

    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"
    
    
    • mox@lemmy.sdf.org
      link
      fedilink
      arrow-up
      1
      ·
      5 天前

      Glad you got it working!

      BTW, in case you’re not aware of it, you might find the shellcheck command useful when writing scripts.

      • tomatoelyOP
        link
        fedilink
        arrow-up
        1
        ·
        5 天前

        ooo that looks nice! I’ll try it once I need to unrust my script skills again, thanks for the help!