отправка одного нажатия клавиши в два окна (Ubuntu)

4768

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

(То, что я делаю, это пошагово просматривая код в двух разных системах с помощью отладчика, и мне не нужно постоянно переключаться между окнами, пока я выполняю код.)

Спасибо!

6

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

3
DaveParillo

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

xvkbd -window xterm2 -text $foo 

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

#!/bin/bash  while [ 1 ]; do wmctrl -i -a 0x02200003 #forcibly set focus in window running script read keys xvkbd -window 0x2202ea4 -text "$keys\r" xvkbd -window 0x2200084 -text "$keys\r" done 
1 = 1 необязательно, в то время как [1] ​​делает то же самое: P John T 14 лет назад 0
Я использовал этот подход для управления двумя окнами Evince, отображающими две версии одного и того же документа PDF. По какой-то причине одно из окон пропускалось при каждом десятом нажатии клавиши. Я не мог понять, почему это было. akaihola 14 лет назад 0
2
akaihola

Приложение Terminator (не путать с Java-приложением с тем же именем) обеспечивает именно ту функциональность, которая вам нужна. Вы можете установить его из репозиториев Ubuntu с помощью apt-get install terminator.

Вот как это работает:

  • запустить Терминатор
  • открыть несколько сессий во вкладках или фреймах
  • нажмите кнопку в левом верхнем углу рамки
  • выберите пункт меню «Новая группа ...»
  • введите имя для группы
  • в каждой сессии, в которую вы хотите отправить нажатия клавиш, выберите эту группу из меню
  • Вы можете использовать пункты меню «Broadcast group» и «Broadcast off», чтобы переключать нажатия клавиш.

Для этого есть также сочетания клавиш.

1
0x44

Вы не сможете сделать это в терминале GNOME, IIRC.

Если вы хотите попробовать Konsole, Send Input to All Sessionsв Konsole 3 есть опция, которая становится Copy Input to...в Konsole 4.

Я протестировал пример скрипта в gnome-терминале. работал нормально DaveParillo 14 лет назад 1
Я имею в виду встроенные функции терминала GNOME. :-) 0x44 14 лет назад 1
1
mirabilos

Помимо clusterssh, который в основном предназначен для этого, но настаивает на создании собственных терминалов, вы можете использовать xlax, который является универсальным решением для распределения / отправки нажатий клавиш на несколько окон X11. Он еще не упакован, но я сделаю это, так как мне сейчас нужно было «что-то вроде clusterssh, просто для virt-manager», и я нашел, что это мой инструмент выбора.

0
R J

Используйте клавиатурную трансляцию, которая предназначена для этого.