ner*_*itt 24 startup startup-applications minimize xdotool telegram
我只想运行 Telegram,并将其添加到启动应用程序中。关键是我需要将它最小化。有什么命令吗?
Jac*_*ijm 32
以最小化的方式启动应用程序需要两个命令:
因此,命令或脚本需要“智能”;第二个命令应该等待应用程序窗口实际出现。
下面的脚本可以做到这一点,并且可以用作以最小化方式启动应用程序的通用解决方案。只需在语法中运行它:
<script> <command_to_run_the_application> <window_name>
Run Code Online (Sandbox Code Playgroud)
<script> <command_to_run_the_application> <window_name>
Run Code Online (Sandbox Code Playgroud)
该脚本需要wmctrl和xdotool:
sudo apt-get install wmctrl xdotool
Run Code Online (Sandbox Code Playgroud)
然后:
startup_minimizd.py使用(例如)gedit命令测试运行脚本:
python3 /path/to/startup_minimizd.py gedit gedit
Run Code Online (Sandbox Code Playgroud)Startup Applicationswmctrl)是否有以您的第二个参数命名的窗口。xdotool
如果窗口由于某种原因可能不出现,为了防止无限循环,脚本将窗口出现的时间限制为 30 秒。无需提及您可以一次将脚本用于多个应用程序,因为您使用脚本之外的参数运行它。
如果窗口标题不确定或可变,或者窗口名称存在名称冲突的风险,则使用pid是更可靠的使用方法。
下面的脚本是基于使用的应用程序的PID,如在两者的输出wmctrl -lp和ps -ef。
设置几乎相同,但在此版本中不需要窗口标题,因此运行它的命令是:
python3 /path/to/startup_minimizd.py <command_to_run_application>
Run Code Online (Sandbox Code Playgroud)
就像第一个脚本一样,它同时需要wmctrl和xdotool
#!/usr/bin/env python3
import subprocess
import sys
import time
subprocess.Popen(["/bin/bash", "-c", sys.argv[1]])
windowname = sys.argv[2]
def read_wlist(w_name):
try:
l = subprocess.check_output(["wmctrl", "-l"]).decode("utf-8").splitlines()
return [w.split()[0] for w in l if w_name in w][0]
except (IndexError, subprocess.CalledProcessError):
return None
t = 0
while t < 30:
window = read_wlist(windowname)
time.sleep(0.1)
if window != None:
subprocess.Popen(["xdotool", "windowminimize", window])
break
time.sleep(1)
t += 1
Run Code Online (Sandbox Code Playgroud)
虽然通常第二个版本应该更可靠,但在应用程序由包装脚本启动的情况下,命令的 pid 将与最终调用的应用程序不同。
在这种情况下,我建议使用第一个脚本。
根据评论中的要求,在一个版本下面,专门用于启动 STEAM 最小化。
事实证明,它的Steam行为与“正常”应用程序完全不同:
Steam不运行一个pid,但不少于(在我的测试中)八个!Steam在启动时运行至少有两个窗口(一个类似飞溅的窗口),但有时会出现一个额外的消息窗口。pid 0,这是脚本中的问题,因为它是。这种特殊的行为Steam要求脚本的特殊版本,它在下面添加。脚本启动Steam,在 12 秒内,它会留意相应的所有新窗口WM_CLASS,检查它们是否被最小化。如果不是,脚本会确保它们会是。
像原来的剧本,这一个需求wmctrl和xdotool安装。
sudo apt-get install wmctrl xdotool
Run Code Online (Sandbox Code Playgroud)
runsteam_minimized.py通过以下命令运行它:
python3 /path/to/runsteam_minimized.py
Run Code Online (Sandbox Code Playgroud)最好将 user72216 和 Sergey 提供的脚本作为问题的一般解决方案,但有时您希望最小化的应用程序已经有一个开关可以执行您想要的操作。
下面是一些带有相应启动程序命令字符串的示例:
-startintray选项:<path-to-Telegram>/Telegram -startintray-silent选项:/usr/bin/steam %U -silent--minimized选项:/usr/bin/transmission-gtk --minimized在 Unity 中,这些应用程序开始时会最小化为顶部菜单栏中的图标,而不是启动器上的图标,但一旦您开始使用该应用程序,正常的启动图标仍会出现。其他应用程序的行为可能有所不同。