Як встановити розмір вікна та розташування програми на екрані за допомогою командного рядка?


33

Я хочу, щоб вікно Firefox було відкрито певного розміру та розташування на екрані за допомогою команди оболонки, наприклад:

firefox myfile.html size 800x600 location bottom-left

Чи є така команда?


Мені вдалося це зробити (за допомогою цього форуму), хоча якщо ви знайдете будь-яке інше рішення, скажіть, будь ласка, як воно, ймовірно, буде більш надійним: unix.stackexchange.com/questions/40209/…
Емануель Берг,

Відповіді:


20

Ось спільна версія відповіді Йокай, яка містить приклади, запропоновані Рудольфом Олахом .


Ви можете використовувати інструмент, покликаний xdotoolконтролювати розмір вікна та місце розташування. Мало того, що будь-який скрипт, в який ви пишете bash, використовуючи xdotool, може бути налаштований на роботу з повністю максимізованим вікном, і він може бути сценарієм для встановлення розміру вікна та координат x: y шляхом маніпулювання командами mousemoveта click.

  1. Знайдіть ідентифікатор вікна:

    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

Ліворуч у нижньому лівому куті потрібно визначити виходячи з роздільної здатності екрана.


1
Існує помилка з xdotoolі wmctrlт. Д. Та Ubuntu, XFCE (що у мене є): якщо вікно вже запустилося в повноекранному режимі, його більше не можна переміщувати: bugs.launchpad.net/ubuntu/+source/unity/ + помилка / 971147
ThePhi

19

Наскільки мені відомо, це неможливо, оскільки Firefox не приймає команди для управління вікном. Це також (в основному) відповідальність менеджера вікон, тому я сумніваюся, що коли-небудь будуть параметри для цього. Однак ви можете керувати вікном за допомогою wmctrl , але це буде трохи складніше:

#!/bin/sh

firefox -new-instance -new-window "http://www.reddit.org" &

# Process ID of the process we just launched
PID=$!

# Window ID of the process...pray that there's     
# only one window! Otherwise this might break.
# We also need to wait for the process to spawn
# a window.
while [ "$WID" == "" ]; do
        WID=$(wmctrl -lp | grep $PID | cut "-d " -f1)
done
# Set the size and location of the window
# See man wmctrl for more info
wmctrl -i -r $WID -e 0,50,50,250,250

Можливо, є більш розумні способи зробити це, і з Firefox є деякі проблеми сумісності (наприклад, що жоден інший екземпляр не запущений), але це має змусити вас піти.


1
Лише невелика записка. Змінення розміру не буде працювати, якщо вікно буде максимальним. Отже, вам слід спочатку деактивувати це властивість за допомогою: wmctrl -i -r $ WID -b видалити, максимізувати_вернути; wmctrl -i -r $ WID -b видалити, максимізувати_хорз; Після цього я зміг змінити розмір вікна Firefox.
ka3ak

3

Раніше я створив HTML-документ, який встановлював би розмір вікна за допомогою Javascript, а потім перенаправляв на потрібну сторінку. Це дурний хакер, але, ей, це працює.


Схоже, це більше не працює. Мабуть, window.resizeTo має ефект, лише якщо вікно - це спливаюче вікно, створене через window.open.
хугомг

2

Я не думаю, що це можливо лише за допомогою команд оболонки, оскільки це не має нічого спільного з вашим менеджером вікон.
Я чув про wmctrl та devilspie, які можуть спричинити це. Але я сумніваюся, що є спосіб досягти цього просто, як ви писали у своєму прикладі.


1

Я роблю це постійно. Однак я використовую DevilsPie2, тому що він більш надійний. Він використовує сценарій мови LUA, що не дуже складно.

Ось мій сценарій lua для Thunderbird, який я хочу відкрити на крайньому лівому моніторі (екрані ноутбука), коли він відкриється:

if (get_window_name()=="Mozilla Thunderbird") then
   pin_window()
   set_window_geometry( 50, 10, 1220, 780 )
end

where 50 = X coordinate (for upper-left corner of the window)
      10 = Y coordinate ( " " )
    1220 = window width
     780 = window height

Щоб налаштувати це, ви створюєте каталог у домашній конфігурації (на дистрибутивах, подібних до 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, timehift, xeyes, xload та yad. Я використовую pin_window на них, щоб вони відображалися на всіх робочих столах, а також інші команди залежно від програми.


Схоже, це не працює з LXDE. Абсолютно жодна подія вікна не розпізнається (під час запуску нічого не друкується devilspie2 --debug)
Джон Сміт за бажанням

0

Це не вирішує проблему позиції, але принаймні ви можете встановити розміри:

firefox -width 200 -height 500
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.