KDE服务菜单问题

时间:2017-04-24 01:10:10

标签: linux bash kde

我在/home/user/.local/share/applications

中有这个.desktop文件
[Desktop Entry]
Categories=AudioVideo;Video;
Comment=This Bash script compresses the specified video files (wildcards supported) to lossy h.264 format in an MP4 container
Exec="\\$HOME/Scripts/Git/compress2mp4.sh" %F
GenericName=Batch compress to mp4
Icon=folder-video
MimeType=video/x-msvideo;video/quicktime;video/mpeg;video/mp4;
Name=Compress to mp4
NoDisplay=false
Path=
StartupNotify=true
Terminal=true
TerminalOptions=\s--noclose
Type=Application
Version=1.0
X-DBUS-ServiceName=
X-DBUS-StartupType=none
X-KDE-SubstituteUID=false
X-KDE-Username=

显示在“打开方式”菜单中并且完美无缺。

然后我创建了另一个.desktop文件并将其复制到/home/user/.local/share/kservices5/ServiceMenus

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=video/x-msvideo;video/quicktime;video/mpeg;video/mp4;
Icon=folder-video
Actions=compress2mp4
X-KDE-Priority=TopLevel
X-KDE-StartupNotify=false
X-KDE-Submenu=Video


[Desktop Action compress2mp4]
Name=Compress to mp4
Icon=video-mp4
Exec="$HOME/Scripts/Git/compress2mp4.sh" %F

服务菜单显示但出现此错误:

Could not find the program '$HOME/Scripts/Git/compress2mp4.sh'

我尝试将$HOME替换为\\$HOME~/,但它没有帮助。 如果我输入/home/my-user-name/...而不是$HOME,则会在后台打开一个窗口并立即关闭,以便我无法捕捉到那里发生的事情。

有没有人知道为什么.desktop文件Type=service在非常相似的文件Type=application无效时无效?

1 个答案:

答案 0 :(得分:0)

似乎环境变量不是由.desktop文件处理器评估的,正如在线发布的类似问题所证明的那样。如果有的话,它看起来/home/user/.local/share/applications中的KDE理解环境变量是一个错误。

有关可能的解决方法,请参阅this StackOverflow post。就个人而言,我创建了以下条目的服务菜单,它按预期工作(注意引号的位置):

Exec=sh -c "$HOME/bin/test.sh %F"

如果我在Exec中使用绝对路径来编写脚本,它确实会显示一些可能被误认为“背景窗口”的内容。进程名称出现在任务栏上(通常只显示窗口)并快速消失。就我而言,那是因为我的测试脚本里面只有一个命令,几乎是瞬间完成执行。您希望您的程序运行多长时间?你确认它没有成功完成吗?

如果您不想使用sh解决方法并且不想在.desktop文件中使用绝对路径,请考虑将您的脚本放在$PATH中的一个目录中,其中.desktop文件处理器将查找它。您可以使用以下命令从等离子的角度查看该变量的值:

tr '\0' '\n' < /proc/$(pidof plasmashell)/environ