Как установить размер окна и положение приложения на экране через командную строку?

Вопрос или проблема

Я хочу, чтобы окно Firefox открывалось в заданном размере и месте на экране с помощью команды оболочки, например:

firefox myfile.html size 800x600 location bottom-left

Существует ли такая команда?

Вот версия ответа от сообщества от Yokai, которая включает примеры, предложенные Рудольфом Олаком.


Вы можете использовать инструмент под названием xdotool для управления размером и местоположением окна. Не только это, любой скрипт, который вы напишете на bash, используя xdotool, может быть настроен для работы с полностью развернутым окном, и его можно запрограммировать на установку размера окна и координат x:y, манипулируя командами mousemove и click.

  1. Найдите ID окна:

    xdotool search --onlyvisible --name firefox
    
  2. Установите размер окна

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
    
  3. Переместите окно

    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).

Шаги для установки размера и положения окна:

  1. Запустите Firefox:

    firefox myfile.html &

    Обратите внимание на символ &, который позволяет продолжить выполнение команд в терминале.

  2. Получите ID окна Firefox:

    WINDOW_ID=$(xdotool search --onlyvisible --name "Firefox")
  3. Измените размер окна:

    xdotool windowsize $WINDOW_ID 800 600
  4. Переместите окно:

    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:

  1. Запуск Firefox (примеры с использованием скрипта):

    firefox -new-instance -new-window "myfile.html" &
  2. Получение 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
  3. Установка размера и перемещение окна:

    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. Каждый метод имеет свои особенности и может быть адаптирован под различные сценарии работы с окнами. Вам необходимо выбрать подходящий инструмент в зависимости от ваших требований и сценариев использования.

Оцените материал
Добавить комментарий

Капча загружается...