Как автоматически повысить приложение, запущенное определяемым пользователем ярлыком

Я создал сочетание клавиш, Ctrl+Alt+C, для gnome-calculator. Это хорошо работает, но если другое приложение в настоящее время работает, Калькулятор открыт позади другого приложения.

Как сделать калькулятор активным на запуск с этим ярлыком?

1
задан 2 September 2015 в 10:18

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

Как использовать

  1. Потребности сценария wmctrl для чтения окна перечисляют и повышают окно:

    sudo apt-get install wmctrl
    
  2. Скопируйте сценарий в пустой файл, сохраните его как raise_window.py
  3. Тестовый прогон это командой:

    python3 /path/to/raise_window.py
    
  4. Если все хорошо работает, добавьте команду к сочетанию клавиш: выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:

    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>
1
ответ дан 7 December 2019 в 16:10

Другие вопросы по тегам:

Похожие вопросы: