Выполнение 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. Вероятно, более надежный, чем нацеливание на имена окон или идентификаторы тоже.