为什么从启动器启动我自己的脚本只能工作一次?

为什么从启动器启动我自己的脚本只能工作一次?

我创建了一个 shell 脚本,假设它是

echo hi
sleep 5
echo bye
exit

然后我创建了一个.desktop文件来启动 shell 脚本。双击它就可以正常工作:

[Desktop Entry]
Version=1.0
Name=Test
Comment=Bash Cript
Exec=bash /example/test.sh
Terminal=true
Type=Application
Categories=Utility;Application;

将 .desktop 文件拖放到 Unity Launcher 后,我就可以单击它。一次。 首次启动后,图标保留在启动器中,但单击它不会执行任何操作。

鼠标中键单击可再次启动该应用程序

我究竟做错了什么?

答案1

工作

...甚至测试过,但启动器图标在您点击后约 7 秒内无响应。如果您在这 7 秒后再次点击,它将再次工作。

此“中断”是由图标等待窗口出现而引起的。但事实并非如此,因为出现的窗口gnome-terminal是由启动器图标“声明”的gnome-terminal,而您的“自制”图标无法将该窗口识别为“自己的”。

解决方案?

可以通过在启动器中添加一行来解决问题(14.04)

StartupWMClass=gnome-terminal

或 (16.04):

StartupWMClass=gnome-terminal-server

然而,仅出于测试目的这样做,将其用作永久解决方案;拥有多个文件,可能在主命令中.desktop声明相同文件是一个坏主意,它会导致Unity 启动器中出现冲突。WM_CLASSgnome-terminal

更好的解决方案

最好将您的脚本作为右键单击选项添加到现有gnome-terminal启动器:

在此处输入图片描述

  1. 将全局gnome-terminal启动器从/usr/share/applications复制到

~/.local/share/applications

    cp /usr/share/applications/gnome-terminal.desktop ~/.local/share/applications
  1. 使用以下命令打开文件gedit

    gedit ~/.local/share/applications/gnome-terminal.desktop
    
  2. 更改此行:

    Actions=New;
    

    进入:

    Actions=New;My Script;
    

    并添加以下部分:

    [Desktop Action My Script]
    Name=My Script
    Exec=gnome-terminal -e "bash /absolute/path/to/your/script.sh"
    

    到文件末尾。然后注销并重新登录,您将在gnome-terminal启动器中以 quicklist- 快捷方式使用脚本。

相关内容