我为建立了一个键盘快捷键Ctrl+ Alt+ 。这个功能很好用,但如果当前正在运行另一个应用程序,计算器就会在另一个应用程序后面打开。Cgnome-calculator
如何使用此快捷方式在启动时激活计算器?
答案1
运行下面的脚本将启动gnome-calculator
(或任何其他应用程序,请参阅“注释”),等待其窗口出现并引发:它。
剧本
#!/usr/bin/env python3
import subprocess
import time
app = "gnome-calculator"
subprocess.Popen([app])
t = 0
while t < 20:
try:
# wait for the application's pid
pid = subprocess.check_output(["pgrep", "-f", app]).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
else:
try:
# read the window list
w_data = subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8").splitlines()
# find the window of the found pid
window = [w.split()[0] for w in w_data if pid in w][0]
# raise it and terminate the script
subprocess.Popen(["wmctrl", "-ia", window])
break
except IndexError:
pass
time.sleep(0.5)
t = t + 1
如何使用
脚本需要
wmctrl
读取窗口列表并升起窗口:sudo apt-get install wmctrl
- 将脚本复制到一个空文件中,另存为
raise_window.py
通过命令测试运行:
python3 /path/to/raise_window.py
如果一切正常,请将命令添加到键盘快捷键:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并添加命令:
python3 /path/to/raise_window.py
笔记
为了防止无限循环(例如,如果应用程序由于某种原因未运行),脚本将等待十秒钟,然后无论如何都会终止。如果要增加时间,请更改以下行中的值:
while t < 20
(
20
=20
*0.5
秒)如上所述,您可以使用脚本来“修复”任何无法自行提升的应用程序的行为,方法是更改以下行:
app = "gnome-calculator"
运行另一个应用程序(
app = "<application>"
),或者:或者,将该脚本用于各种应用程序:
替换以下行:
app = "gnome-calculator"
经过:
app = sys.argv[1]
并在脚本的头部部分(shebang 正下方)添加:
import sys
然后通过以下命令运行脚本:
python3 raise_window.py <application>
解释
要打开一个窗口,可以使用以下命令:
wmctrl -ia <window_id>
或者
wmctrl -a <window_name>
(假设wmctrl
已安装)
从窗户姓名可能不是唯一的,最好使用 id。诀窍是等待应用程序的 pid 出现,使用以下命令进行测试:
pgrep -f <application>
如果该命令有输出,这意味着应用程序有一个 pid 并且正在运行。下一步是查看应用程序是否(已经)有一个窗口,使用以下命令:
wmctrl -lp
它将输出窗口列表、它们的窗口 ID 和相应(应用程序的)pid。
如果找到的 pid 与列表中的窗口匹配,则我们找到了需要启动的窗口。我们可以从列表中窗口的行中解析窗口 ID,随后我们将使用该 ID 使用以下命令启动窗口:
wmctrl -ia <window_id>