Выполнение wmctrl из bash

Немного поиграв с терминала с wmctrlТеперь наступает следующий шаг. казнить wmctrl из сценария Bash.

Я достигаю, чтобы выполнить wmctrl в ударе, когда он совершенно один.

Пример:

#!/bin/bash

 SOUDIR=/usr/bin
 echo "$SOUDIR"
 $SOUDIR/wmctrl -i -r 0x040000b3 -e 0,0,0,500,800

Но когда я добавляю строчный код Firefox, он не работает. Я думал, что добавление времени сна будет работать, но я ошибся.

Это текущий код:

#!/bin/bash

firefox http://www.google.de
sleep 30s
SOUDIR=/usr/bin
echo "$SOUDIR"
$SOUDIR/wmctrl -i -r 0x040000b3 -e 0,0,0,500,800

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

Я новичок в Bash и Ubuntu.

2 ответа

ОК пара моментов:

  • Вам не нужно /usr/bin добавлено. Shell сама найдет wmctrl. Это для очень конкретных случаев, которые могут включать переносимость.
  • Добавьте амперсанд в конце firefox команда. Сценарий будет продолжен, только если предыдущая команда завершится. Поскольку firefox не завершается, скрипт ждет его.
  • Как указал Оли, лучше использовать имя класса. Я сделал несколько сценариев с wmctrl где я нахожу шестнадцатеричный идентификатор окна, ссылаясь на имя класса.

Лично я бы сделал это так:

#!/bin/bash
firefox http://www.google.de &
sleep 3
WM_ID=$(wmctrl -lx | awk '$3~/Navigator.Firefox/ {print $1}')
wmctrl -i -r $WM_ID -e 0,0,0,500,800

Здесь мы открываем firefox, позволяем ему работать в фоновом режиме, затем извлекаем шестнадцатеричный идентификатор окна, соответствующего классу Navigator.Firefox, В wmctrl -lx поле 3 - это класс wm_class, а поле 1 - это шестнадцатеричный идентификатор. awk помогает нам извлечь поле 1 здесь. Наконец, мы ссылаемся на этот числовой идентификатор внутри заключительного оператора wmctrl

Кажется вероятным, что firefox Команда блокирует выполнение сценария до его завершения. Просто вставьте его в фоновый режим, и ваш сценарий может прогрессировать:

firefox http://www.google.de &

На тангенциальной ноте вы также можете посмотреть на -no-remote для Firefox. Это остановит взаимодействие команды с любыми существующими экземплярами Firefox в вашем DISPLAY.

Пока мы говорим касательные, firefox Команда имеет несколько вспомогательных аргументов, которые - наряду с -no-remote - может помочь вам нацелить новое окно.

Например, вы можете установить конкретное имя класса и затем Compiz автоматически обработать изменение размера. А также wmctrl -x <WM_CLASS> позволит вам нацелить класс, а не ID. Вероятно, более надежный, чем нацеливание на имена окон или идентификаторы тоже.

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