我在/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
可以工作?
最佳答案
似乎环境变量没有被 .desktop
文件处理器评估,网上发布的类似问题证明了这一点。如果有的话,看起来 KDE 理解 /home/user/.local/share/applications
中的环境变量是一个错误。
有关一种可能的解决方法,请参阅 this StackOverflow post .就个人而言,我创建了包含以下条目的服务菜单,它确实按预期工作(注意引号的位置):
Exec=sh -c "$HOME/bin/test.sh %F"
如果我在 Exec
中使用脚本的绝对路径,它确实会显示一些可能被误认为“后台窗口”的内容。进程名称出现在任务栏上(通常只显示窗口)并很快消失。就我而言,那是因为我的测试脚本内部只有一个命令并且几乎是瞬间完成执行。您希望您的程序运行多长时间?您是否已确认它未成功完成?
如果您不想使用 sh
解决方法并且不想在 .desktop
文件中使用绝对路径,请考虑将您的脚本放在以下目录之一中$PATH
,.desktop
文件处理器将在其中查找它。您可以使用以下命令从 plasma 的角度查看该变量的值:
tr '\0' '\n' < /proc/$(pidof plasmashell)/environ
关于linux - KDE 服务菜单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43578291/