启动时自动启动后隐藏程序的 GUI

启动时自动启动后隐藏程序的 GUI

在经历了Redshift 中的错误,我找到了一个很好的替代品,鸢尾花。

我已将该Iris文件夹放在我的home目录中,并将以下命令添加到启动应用程序sh /home/arun/Iris/Iris.sh

一切都运行良好,但启动时,设置 GUI 窗口也会启动。我真正需要的只是小面板指示器图标。有点像 OS X 的“登录项”中的“隐藏”功能。

这能实现吗?

答案1

光圈设置窗口

如果我们使用 关闭 Iris 的设置窗口X,则似乎关闭。

如果我们做同样的事情,借助wmctrlwmctrl -ic <window_id>)然而,结果不仅如此窗户已关闭,但应用程序完整。

我的结论是,窗户实际上并不是关闭, 但未映射当我们按下X

我们可以在 的帮助下做同样的事情xdotool。以下是此答案的编辑版本:如何在启动时最小化运行程序?然后我们就可以Iris在不出现设置窗口的情况下启动了。

启动虹膜没有设置窗口(脚本)

  1. 该脚本同时使用了wmctrlxdotool

    sudo apt-get install wmctrl xdotool
    
  2. 将以下脚本复制到一个空文件中,然后保存到Iris.sh与您的文件相同的目录(因此它们在同一个目录中),如start_iris.py

    #!/usr/bin/env python3
    import subprocess
    import time
    import sys
    import os
    
    command = os.path.dirname(sys.argv[0])+"/Iris.sh"
    subprocess.Popen(["/bin/bash", "-c", command])
    
    def get(cmd):
        return subprocess.check_output(cmd).decode("utf-8").strip()
    
    t = 0
    
    while t < 12:
        time.sleep(1)
        try:
            w_list = [l.split()[0] for l in get(["wmctrl", "-l"]).splitlines() if "Iris" in l]
            for w in w_list:
                check = [l for l in get(["xprop", "-id", w]).splitlines()\
                         if "WM_CLASS(STRING)" in l][0]
                if "Iris" in check:
                    subprocess.Popen(["xdotool", "windowunmap", w])
                    break
            break
        except (IndexError, subprocess.CalledProcessError):
            pass
        t += 1
    
  3. 现在运行以下命令代替原始命令来启动Iris

    python3 /path/to/start_iris.py
    

设置窗口将不再出现!

解释

  • 脚本会调查它自己的目录Iris.sh,然后启动它。
  • WM_CLASS Iris随后,它会监视新窗口(您的设置窗口)的创建。
  • 如果它找到了目标窗口,它取消映射使用以下命令打开窗口xdotool

    xdotool windowunmap <window_id>
    

笔记

  1. 显然,单击X设置窗口的 也会取消映射窗口。
    显然,这与 不同xdotool。结果是,如果不重新启动 ,您将无法访问设置窗口(从指示器菜单)Iris

    但是你提到你通常不需要设置窗口根本

  2. 请注意,从启动应用程序启动 GUI 应用程序时(尤其是涉及屏幕设置时),您可能需要稍作休息才能正常工作。如果从启动应用程序无法正常工作,请将要添加到启动应用程序的命令更改为:

    /bin/bash -c "sleep 10 && python3 /path/to/start_iris.py"
    

相关内容