在经历了Redshift 中的错误,我找到了一个很好的替代品,鸢尾花。
我已将该Iris
文件夹放在我的home
目录中,并将以下命令添加到启动应用程序sh /home/arun/Iris/Iris.sh
。
一切都运行良好,但启动时,设置 GUI 窗口也会启动。我真正需要的只是小面板指示器图标。有点像 OS X 的“登录项”中的“隐藏”功能。
这能实现吗?
答案1
光圈设置窗口
如果我们使用 关闭 Iris 的设置窗口X
,则似乎关闭。
如果我们做同样的事情,借助wmctrl
(wmctrl -ic <window_id>
)然而,结果不仅如此窗户已关闭,但应用程序完整。
我的结论是,窗户实际上并不是关闭, 但未映射当我们按下X
。
我们可以在 的帮助下做同样的事情xdotool
。以下是此答案的编辑版本:如何在启动时最小化运行程序?然后我们就可以Iris
在不出现设置窗口的情况下启动了。
启动虹膜没有设置窗口(脚本)
该脚本同时使用了
wmctrl
和xdotool
:sudo apt-get install wmctrl xdotool
将以下脚本复制到一个空文件中,然后保存到
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
现在运行以下命令代替原始命令来启动
Iris
:python3 /path/to/start_iris.py
设置窗口将不再出现!
解释
- 脚本会调查它自己的目录
Iris.sh
,然后启动它。 WM_CLASS
Iris
随后,它会监视新窗口(您的设置窗口)的创建。如果它找到了目标窗口,它取消映射使用以下命令打开窗口
xdotool
:xdotool windowunmap <window_id>
笔记
显然,单击
X
设置窗口的 也会取消映射窗口。
显然,这与 不同xdotool
。结果是,如果不重新启动 ,您将无法访问设置窗口(从指示器菜单)Iris
。但是你提到你通常不需要设置窗口根本。
请注意,从启动应用程序启动 GUI 应用程序时(尤其是涉及屏幕设置时),您可能需要稍作休息才能正常工作。如果从启动应用程序无法正常工作,请将要添加到启动应用程序的命令更改为:
/bin/bash -c "sleep 10 && python3 /path/to/start_iris.py"