1

Есть некоторые графические программы, в которых, если вы выберете их из меню, если оно уже открыто, вместо открытия нового экземпляра, это окно станет главным. Тем не менее, есть некоторые программы, которые открывают несколько экземпляров самих себя.

Есть определенная программа, которая демонстрирует последнее поведение, но я хочу, чтобы это делало первое. Как это может быть сделано?

3 ответа3

5

Я бы порекомендовал заменить ссылку на программу ссылкой на скрипт оболочки, который проверяет, запущена ли программа, и если это так, он использует функцию оконного менеджера, чтобы вывести программу в первую очередь, и, если это не так, запускает ее. ,

3

Я нашел эту ветку и реализовал ее, поделившись своей версией.

Я создал исполняемый файл /usr/local/bin/run_once.sh содержащий

#! /bin/bash
application=$1
if wmctrl -xl | grep "${application}" > /dev/null ; then
    # Already running, raising to front
    wmctrl -x -R "$application"
else
    # Not running: starting
    $@
fi

Это проверяет с помощью wmctrl , что приложение, которое вы пытаетесь запустить, уже имеет открытое окно (некоторые программы с графическим интерфейсом поддерживают рабочих без графического интерфейса ) вместо использования ps , используя -x для использования WM_CLASS вместо имени строки заголовка.

Для каждой программы , которую я только хочу один окно я скопировал систему .desktop файл в ~/.local/share/applications и изменил exec поле от exec=program --arguments для exec=/usr/local/bin/run_once.sh program --arguments

3

Как правило, исходный код приложения должен быть изменен. Это не то, что сделано операционной системой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .