Вопрос или проблема
Я хочу, чтобы окно Firefox открывалось в заданном размере и месте на экране с помощью команды оболочки, например:
firefox myfile.html size 800x600 location bottom-left
Существует ли такая команда?
Вот версия ответа от сообщества от Yokai, которая включает примеры, предложенные Рудольфом Олаком.
Вы можете использовать инструмент под названием xdotool
для управления размером и местоположением окна. Не только это, любой скрипт, который вы напишете на bash
, используя xdotool
, может быть настроен для работы с полностью развернутым окном, и его можно запрограммировать на установку размера окна и координат x:y, манипулируя командами mousemove
и click
.
-
Найдите ID окна:
xdotool search --onlyvisible --name firefox
-
Установите размер окна
xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
-
Переместите окно
xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y
Например, если ID окна для Firefox равен 123, вы сделаете следующее:
xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080
Позиционирование в нижнем левом углу нужно будет определить в зависимости от разрешения вашего экрана.
Насколько мне известно, это невозможно, так как Firefox не принимает команды для управления окном. Это также (в основном) ответственность менеджера окон, поэтому я сомневаюсь, что когда-либо появится возможность делать это. Тем не менее, вы можете управлять окном с помощью wmctrl, но это будет немного сложно:
#!/usr/bin/env bash
firefox -new-instance -new-window "http://www.reddit.org" &
# Идентификатор процесса запущенного нами процесса
PID="$!"
# ID окна процесса... молитесь, чтобы было
# только одно окно! В противном случае это будет использовать первое
# окно, которое оно найдет, что может быть не главным
# окном браузера.
# Нам также нужно подождать, пока процесс не создаст
# окно.
while [ "$WID" == "" ]; do
# Спим 15 миллисекунд, чтобы предотвратить загрузку процессора.
sleep 0.015
# Проверяем, выполняется ли процесс, иначе выходим.
if ! pgrep "$PID"; then
exit 1
fi
# Запрашиваем ID окна по идентификатору процесса.
WID="$(wmctrl -lp | grep "$PID" | cut -d" " -f1)"
done
# Убираем максимизацию окна.
wmctrl -i -r "$WID" -b remove,maximized_vert
wmctrl -i -r "$WID" -b remove,maximized_horz
# Устанавливаем размер и положение окна
wmctrl -i -r "$WID" -e 0,50,50,250,250
# Смотрите "man wmctrl" для получения дополнительной информации
Существуют более умные способы сделать это, и есть некоторые проблемы с совместимостью с Firefox (например, чтобы никакая другая инстанция не работала), но это должно помочь вам.
Это не решает проблему с положением, но по крайней мере вы можете задать размеры:
firefox -width 200 -height 500
Ранее я создал HTML-документ, который устанавливал размер окна с помощью Javascript, а затем перенаправлял на нужную мне страницу. Это глупый хак, но, эй, это работает.
Я делаю это все время. Я использую DevilsPie2, потому что он более надежен. Он использует язык сценариев LUA, который не очень сложен.
Вот мой lua-скрипт для Thunderbird, который я хочу открыть на самом левом мониторе (экран ноутбука), когда он открывается:
if (get_window_name()=="Mozilla Thunderbird") then
pin_window()
set_window_geometry( 50, 10, 1220, 780 )
end
где 50 = координата X (для верхнего левого угла окна)
10 = координата Y ( " " )
1220 = ширина окна
780 = высота окна
Чтобы это настроить, вы создаете директорию в вашей домашней конфигурации (в дистрибутивах, похожих на Ubuntu), названную devilspie2, например /home/$USERNAME/.config/devilspie2
Для Thunderbird я создал thunderbird.lua, хотя имя файла не имеет значения. У меня есть другое имя файла для каждого приложения, хотя вы можете поместить все в один файл скрипта, если хотите. Настройте devilspie2 на автоматический запуск при входе в систему, например /home/$USERNAME/.config/autostart/devilspie2.desktop
Вот ссылка на хорошую страницу о различных опциях, доступных для вашего lua-скрипта: https://github.com/gusnan/devilspie2/blob/master/README
Одно замечание: скрипты не обязаны быть исполняемыми. У меня они с правами 664 и работают отлично. Некоторые из других программ, которые я контролирую, это openconnect, pidgin, RecordMyDesktop, timeshift, xeyes, xload и yad. Я использую pin_window на них, чтобы они отображались на всех рабочих столах, плюс другие команды в зависимости от приложения.
Я не думаю, что это возможно только с помощью команд оболочки, потому что это не имеет ничего общего с вашим менеджером окон.
Я слышал о wmctrl и devilspie, которые могут повлиять на это. Но я сомневаюсь, что есть способ достичь этого так просто, как вы написали в своем примере.
Ответ или решение
Чтобы задать размер и координаты окна приложения, такого как Firefox, можно воспользоваться инструментами, которые позволяют управлять окнами в графической среде Linux. В этом ответе мы рассмотрим два популярных инструмента: xdotool
и wmctrl
, а также альтернативные методы управления окнами.
1. Использование xdotool
xdotool
– это мощный инструмент, который позволяет программно управлять окнами и симулировать действия мыши и клавиатуры. Для использования xdotool
вам нужно сначала его установить (на Debian/Ubuntu это делается командой sudo apt install xdotool
).
Шаги для установки размера и положения окна:
-
Запустите Firefox:
firefox myfile.html &
Обратите внимание на символ
&
, который позволяет продолжить выполнение команд в терминале. -
Получите ID окна Firefox:
WINDOW_ID=$(xdotool search --onlyvisible --name "Firefox")
-
Измените размер окна:
xdotool windowsize $WINDOW_ID 800 600
-
Переместите окно:
xdotool windowmove $WINDOW_ID 0 1080 # Пример для расположения в нижнем левом углу
Таким образом, если ID окна Firefox равен 123, ваши команды будут выглядеть так:
xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080
2. Использование wmctrl
wmctrl
– еще один инструмент для управления окнами в X-системах. Чтобы его установить, выполните команду sudo apt install wmctrl
.
Шаги для управления окнами с помощью wmctrl:
-
Запуск Firefox (примеры с использованием скрипта):
firefox -new-instance -new-window "myfile.html" &
-
Получение ID окна:
PID="$!" WID="" while [ -z "$WID" ]; do sleep 0.015 if ! pgrep "$PID"; then exit 1 fi WID=$(wmctrl -lp | grep "$PID" | awk '{print $1}') done
-
Установка размера и перемещение окна:
wmctrl -i -r "$WID" -b remove,maximized_vert wmctrl -i -r "$WID" -b remove,maximized_horz wmctrl -i -r "$WID" -e 0,0,1440,800 # Параметры: 0, верхний левый угол экрана, 800x600
3. Альтернативные методы
Если ни один из вышеупомянутых методов не подходит, вы можете использовать JavaScript в HTML. Создайте HTML-файл, который использует JavaScript для установки размера окна, и откройте этот файл в Firefox. Например:
<!DOCTYPE html>
<html>
<head>
<title>My Window</title>
<script>
window.resizeTo(800, 600);
window.moveTo(0, 1080); // Задайте нужную позицию
</script>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
4. Использование Devilspie2
Если вам нужно многократно управлять окнами с заданными параметрами при запуске приложений, рассмотрите использование Devilspie2. Это инструмент на основе Lua, который может автоматически изменять размер и положение окон, когда они открываются.
Заключение
Управление размерами и положением окон через командную строку в Linux возможно с использованием инструментов таких, как xdotool
и wmctrl
. Каждый метод имеет свои особенности и может быть адаптирован под различные сценарии работы с окнами. Вам необходимо выбрать подходящий инструмент в зависимости от ваших требований и сценариев использования.