De acordo com a Especificação de entrada na área de trabalho :
Field codes must not be used inside a quoted argument
Consequentemente, seu %k é dado literalmente ao comando bash . Alterar a linha Exec para o seguinte evita isso:
Exec=bash -c '"$(dirname "$1")"/run.sh' dummy %k
O acima funciona localmente e também funciona se houver um espaço no caminho. dummy é dado ao script bash como seu $0 (o que ele acha que é o nome do script) e a expansão de %k está disponível como $1 . As camadas aninhadas de cotação são necessárias para estar em conformidade com a especificação e ser espaços seguros.
Observe que %k não necessariamente se expande para um caminho de arquivo local - pode ser um URI vfolder, ou vazio, e um script realmente portátil deve ser responsável por esses casos também. %k também não é universalmente suportado, então você precisará ter algumas restrições sobre os sistemas que espera usá-lo de qualquer maneira.
No que diz respeito à depuração, você pode usar o redirecionamento de shell comum no KDE:
Exec=bash -c ... > /tmp/desktop.log
Este não é um comportamento padronizado e não funciona no GNOME e provavelmente em outros. Você também pode fornecer um caminho absoluto para um script criado para registrar seus argumentos e ações da maneira que você precisa.