Как заставить команду запуска установить фокус на уже работающий экземпляр приложения в Ubuntu / Linux?

5228
David

Я использую программу под названием easystroke для вызова команд с помощью жестов мыши - обычно для запуска приложения. например, «гном-терминал». Если у меня уже открыто окно gnome-терминала, и я вызываю жест gnome-терминала, я хотел бы установить фокус на уже работающий экземпляр, а не создавать новый экземпляр, что, конечно, происходит сейчас. (На самом деле меня больше интересует это для ярлыка приложения Gmail Chrome и других более крупных приложений.)

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

4

4 ответа на вопрос

1
DaveParillo

Сценарий оболочки, который использует pidof и wmctrl . Не знаете, как работает ваша программа жестов мыши - можете ли вы определить сценарий оболочки, который будет запускаться в результате жеста?

Если это так, то такой скрипт может использовать pidof, чтобы определить, запущена ли программа, и если это так, используйте wmctrl, чтобы активировать ее, в противном случае запустите ее. По умолчанию pidof существует в Ubuntu, но вам придется добавить wmctrl самостоятельно. Ищите wmctrlв менеджере пакетов Synaptic.

1
Justin Smith

xwit "имя программы" выведет окно на передний план по имени. Все, что в Linux может использовать исполняемый файл, может использовать скрипт #! / Bin / sh с включенными привилегиями выполнения. xwit также может перемещать указатель мыши, перемещать окно, изменять размер окна, давать список имен окон, соответствующих шаблону, получать уникальный идентификатор окна для определенного окна или закрывать окно ... все, что вы можете сделать с окном, которое вы можете сделать через xwit.

1
Michael Kropat

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

Usage: jumpapp [OPTION]... COMMAND [ARG]...  Jump to (focus) the first open window for an application, if it's running. Otherwise, launch COMMAND (with opitonal ARGs) to start the application. 

Под капотом jumpappнаходит окна приложения двумя способами: 1) получает все запущенные pids для COMMAND и ищет окна с совпадающими _NET_WM_PID, и 2) ищет окна с WM_CLASSсовпадающими COMMAND.

Если вы хотите попробовать его, его легко установить из исходного кода, или вы можете установить его из моего PPA:

sudo add-apt-repository ppa:mkropat/ppa sudo apt-get update sudo apt-get install jumpapp 
0
akaihola

A few years ago, I created a small application called mcgr exactly for this purpose. It originally worked only with the Metacity windows manager, but I later adapted it for Gnome.