Я создал сочетание клавиш, Ctrl+Alt+C, для gnome-calculator
. Это хорошо работает, но если другое приложение в настоящее время работает, Калькулятор открыт позади другого приложения.
Как сделать калькулятор активным на запуск с этим ярлыком?
Запущение скрипта ниже запустится 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]
и добавьте в главном разделе сценария (непосредственно ниже хижины):
import sys
Затем запустите скрипт командой:
python3 raise_window.py <application>
Для повышения окна можно использовать команду:
wmctrl -ia <window_id>
или
wmctrl -a <window_name>
(принятие wmctrl
установлен),
Так как имя окна возможно не уникально, идентификатор предпочтителен для использования. Прием должен затем ожидать pid приложения для появления, тестируя с командой:
pgrep -f <application>
Если команда имеет вывод, это означает, что приложение имеет pid и выполнения. Следующая вещь состоит в том, чтобы видеть, имеет ли приложение (уже) окно, при помощи команды:
wmctrl -lp
который произведет список окон, их идентификатора окна и pid соответствующего (приложения).
Если существует соответствие найденного pid и окон в списке, у нас есть наше окно, которое мы должны повысить. Мы можем проанализировать идентификатор окна от строки окна в списке, который мы будем впоследствии использовать для повышения окна с командой:
wmctrl -ia <window_id>