Ale*_*lex 3 scripts unity launcher window .desktop
我创建了一个 shell 脚本,假设它是
echo hi
sleep 5
echo bye
exit
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个.desktop-file 来启动 shell 脚本。双击它工作得很好:
[Desktop Entry]
Version=1.0
Name=Test
Comment=Bash Cript
Exec=bash /example/test.sh
Terminal=true
Type=Application
Categories=Utility;Application;
Run Code Online (Sandbox Code Playgroud)
将 .desktop-File 拖放到 Unity Launcher 中后,我可以单击它。一次。 第一次启动后,图标会保留在启动器中,但单击它不会执行任何操作。
鼠标中键点击它再次启动应用程序
我究竟做错了什么?
...甚至对其进行了测试,但是单击后启动器图标在大约 7 秒内没有响应。如果在这 7 秒后再次单击,它将再次工作。
这个“中断”是由图标引起的,等待一个窗口出现。情况并非如此,因为出现的gnome-terminal-window 被gnome-terminal启动器图标“声明” ,而您的“自制”图标不会将该窗口识别为“他的”。
您可以通过在启动器 (14.04) 中添加一行来解决该问题
StartupWMClass=gnome-terminal
Run Code Online (Sandbox Code Playgroud)
或 (16.04):
StartupWMClass=gnome-terminal-server
Run Code Online (Sandbox Code Playgroud)
但是,仅出于测试原因才这样做,不要将此作为永久解决方案;有多个.desktop文件,可能WM_CLASS在它们的主命令中声明相同的文件是一个坏主意,它会导致gnome-terminalUnity 启动器中的显示方式发生冲突。
最好将您的脚本作为右键单击选项添加到现有gnome-terminal启动器:
gnome-terminal启动器从复制/usr/share/applications到~/.local/share/applications:
cp /usr/share/applications/gnome-terminal.desktop ~/.local/share/applications
Run Code Online (Sandbox Code Playgroud)
使用以下命令打开文件gedit:
gedit ~/.local/share/applications/gnome-terminal.desktop
Run Code Online (Sandbox Code Playgroud)更改行:
Actions=New;
Run Code Online (Sandbox Code Playgroud)
进入:
Actions=New;My Script;
Run Code Online (Sandbox Code Playgroud)
并添加部分:
[Desktop Action My Script]
Name=My Script
Exec=gnome-terminal -e "bash /absolute/path/to/your/script.sh"
Run Code Online (Sandbox Code Playgroud)
到文件的最后。然后注销并重新登录,您将在gnome-terminal启动器中将脚本作为快速列表快捷方式提供。