要在应用程序启动时执行脚本,我可以Exec
更改/usr/share/applications/App.desktop
应用程序关闭时怎么办?该事件有挂钩吗?
答案1
首先,在 中编辑文件通常被认为是一种不好的做法/usr/share/applications
。此外,它效率极低,因为它是软件包的一部分,如果该软件包有更新,猜猜会发生什么?您的更改将被覆盖。如果您绝对、100% 需要进行更改,请制作自定义文件.desktop
并将其存储在~/.local/share/applications
相反,我建议使用while
循环脚本pgrep -f
来等待您想要的应用程序。例如,在下面的示例中,脚本使用firefox
作为进程字符串。
#!/bin/bash
process_string="firefox"
while true
do
while ! pgrep -f "$process_string"
do
echo "Waiting for $process_string"
sleep 3
done
while pgrep -f "$process_string"
do
echo "Waiting for $process_string to exit"
sleep 3
done
# place the command you want to occur when
# process exits here
sleep 3
done
该脚本以连续循环运行,因此您可以将其添加为启动应用程序的一部分,以便在登录时启动
答案2
你可以使用类似
Exec=bash -c 'do-before;do-main-task;do-after'
在您的桌面文件中。做后应该执行您想要在“应用程序关闭后”执行的操作。它可以是 shell 脚本。我使用这种方法,它对我来说很有效,但由于引用,它可能很棘手。
您还可以将您的应用程序放入 bash shell 脚本中,该脚本将为您完成所有任务(从脚本调用您的应用程序),并将脚本的名称放在桌面文件中的 Exec 行中。
Exec=do-all-tasks-script
如果任务包含复杂的语法(并且可能无法在“引号内”起作用),则此方法更有可能起作用。
Serg 的说法很正确,你不应该编辑系统文件。我猜这是一种特殊情况,你可以将桌面文件复制到桌面,然后编辑此副本。(我为自己的应用程序制作了这种桌面文件。)
额外的
我创建了以下批处理文件“dbdmda”
#!/bin/bash
echo do-before
transmission-gtk
echo do-after
并按如下方式运行:传输启动后,我让它运行大约十秒钟。然后我按右上角的 x 按钮退出传输。这被写入终端窗口
$ bash dbdmda
do-before
do-after
显然,“do-after”命令行已运行。您如何调用传输,又如何停止传输?