为什么我的自定义启动器文件会在启动器栏上创建两个图标?

为什么我的自定义启动器文件会在启动器栏上创建两个图标?

我制作了一个 .desktop 文件,以便能够从启动器栏启动我的 python 脚本。

我将 Python 脚本设置为可执行文件,如果我双击并从文件管理器运行它,它就可以正常运行。它也可以很好地从终端运行。

桌面文件位于/.local/share/applications/且如下所示:

[Desktop Entry]
Version=1.0
Name=Simple Timer
Comment=Timer
Exec=python3 /home/user/app/timer.py
Icon=/home/user/app/icon/timer.png
Path=/home/user/app/timer/
Terminal=false
Type=Application
Categories=Utility;Application;

如果我在 Dash 中搜索“Timer”,它就会出现。我可以从那里运行它。运行它会在启动器栏上创建两个重复的图标,如图所示。

在此处输入图片描述

  • 第一个图标会闪烁约 10 秒,然后消失。此图标可锁定到启动器。如果此图标锁定到启动器栏,在应用程序窗口关闭后,它还会闪烁几秒钟,在此期间,它将不可点击。
  • 第二个图标不能锁定到启动器,并且只有在应用程序窗口关闭时才会消失。

如果我从文件管理器运行该脚本,它会创建 1 个正常运行的启动器图标。

我已确认 中没有重复的 .desktop 文件/usr/share/applications/。我创建的 .desktop 文件仅存在于 中,/.local/share/applications/如果删除,我将无法再在 Dash 上搜索我的计时器或将其锁定到启动器栏。

我该如何修复这里的脉动/不可点击问题和双图标问题?

答案1

启动器无法将该窗口识别为“他的”

具体来说,Tkinter 窗口无法识别它们“自己的”窗口(类)。这会导致图标徒劳地闪烁,等待其窗口。一旦窗口出现,启动器无法识别其自己的窗口,并在超时后弹出启动器。由于“正常”窗口始终由启动器中的图标表示,因此您只能使用通用图标(通常,如果没有重复的启动器)或其他图标(请参阅下文)。

您可以通过添加以下内容轻松修复该问题:

StartupWMClass=Tk

到你的启动器(因为它是一个 Tkinter 窗口)

看看区别(我给了启动器 火狐 测试图标):

  1. 打开多个窗口时,不显示该行。观察三个通用图标 + 一个闪烁的 Firefox 图标,大约 10 秒后消失。

    在此处输入图片描述

  2. 现在我添加行StartupWMClass=Tk,所有窗口都分组在同一个图标中:

    在此处输入图片描述

为什么你的情况中没有通用图标?

将 WM_CLASS 添加到 .desktop 文件将解决您的问题。但是,我很确定您不小心创建了一个额外的启动器(或者 Unity 自动创建了一个启动器)。查看/.local/share/applications/并让您的启动器可执行。图标将显示。最有可能的是,您的复制品名称中会有“unity”。

一般情况下,如何找到一个窗口的WM_CLASS?

  • 打开终端,输入

     xprop WM_CLASS
    
  • 随后单击窗口。出现两个字符串,以逗号分隔。标题大小写的字符串是您需要添加的字符串。

笔记

不是你的问题,但是:

您不需要设置以下几行:

  • Version=1.0(无害,但没必要)
  • 由于您的脚本是可执行的,因此您不需要python3(您可以让脚本直接调用解释器)
  • Path=/home/user/app/timer/(不必要)
  • Terminal=false(这是默认设置)

相关内容