Команда Bash для фокусировки определенного окна

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

Например, если у меня есть один экземпляр Firefox, но он сведен к минимуму (или на нем есть другое окно). Мне нужна команда bash, которая поднимает и фокусируется на окне Firefox, делая это активным окном.

41 голос | спросил Malabarba 19 Maypm10 2010, 18:02:48

3 ответа


64

Команда wmctrl, похоже, выполняет эту работу. Он уже был установлен для меня, но он доступен в репозиториях, если кому-то это понадобится.

wmctrl -l 

Список открытых окон (включая панели gnome).

wmctrl -a STRING

Дает фокус на окно, содержащее STRING в его названии. Я не уверен, что произойдет, если более одного окна удовлетворит это условие.
В моем случае команда была:

wmctrl -a Firefox
ответил Malabarba 19 Maypm10 2010, 18:25:41
8

Использование wmctrl в сочетании с xdotool вы можете переключить фокус на Firefox, а затем выполнить действия клавиатуры или мыши.

В этом примере:

wmctrl -R firefox && \
  xdotool key --clearmodifiers ctrl+t ctrl+l && \
  xdotool type --delay=250 google && \
  xdotool key --clearmodifiers Tab Return

Выполняются следующие шаги:

  1. Дайте фокус первому окну Firefox.
  2. Откройте новую вкладку браузера
  3. Помещение фокуса в адресную строку
  4. Введите "google"
  5. Вкладка в первый результат автоматического завершения работы браузера
  6. Нажмите клавишу Return (или Enter)
ответил Christopher 4 AM00000060000005231 2015, 06:40:52
3

Как работает следующий сценарий, который я использую в своем компьютере ubuntu? использование случай - подобный.

   $ ./focus_win.sh 1            # focus on a application window that executed at first
   $ ./focus_win.sh 2            # second executed application window

Я использую его после назначения его в пользовательском ярлыке клавиатуры. ctrl + 1, ctrl + 2, ...

cat focus_win.sh

#! /bin/sh

if [ "" = "$1" ] ; then
    echo "usage $0 <win index>"
    exit 1;
fi

WIN_ID=`wmctrl -l | cut -d ' ' -f1 | head -n $1 | tail -n 1`

if [ "" = "$WIN_ID" ] ; then
    echo "fail to get win id of index $1"
    exit 1;
fi
wmctrl -i -a $WIN_ID
ответил swj 7 FebruaryEurope/MoscowbFri, 07 Feb 2014 08:36:35 +0400000000amFri, 07 Feb 2014 08:36:35 +040014 2014, 08:36:35

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132