linux - KDE 服务菜单问题

标签 linux bash kde-plasma

我在/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/

相关文章:

window - 如何从 CLI 获取 KDE 中所有打开的窗口的列表?

linux - 系统更新后SDDM被破坏

linux - tar --exclude 标志如果我在路径末尾添加 '/' 则不排除目录

c - 使用 gcc -Q -v "options enabled"和 "options passed"有什么区别

linux - Heroku toolbelt 安装后 "Warning! PATH is not properly set up"& "RVM is not a function"

bash - grep 不支持 BOM

python - Sublime text 和 Linux-KDE。系统区域设置设置为无法处理非 ASCII 字符的值

c - msync的 'length`参数不起作用

Bash 脚本和文件名中的空格

linux - while 如何采用参数条件?