Làm cách nào để đặt kích thước cửa sổ và vị trí của ứng dụng trên màn hình thông qua dòng lệnh?


33

Tôi muốn cửa sổ Firefox được mở ở một kích thước cụ thể và vị trí trên màn hình bằng lệnh shell, ví dụ:

firefox myfile.html size 800x600 location bottom-left

Có một lệnh như vậy?


Tôi đã xoay sở để làm điều này (với sự trợ giúp của diễn đàn này), mặc dù nếu bạn tìm thấy bất kỳ giải pháp nào khác, xin vui lòng cho tôi biết vì nó có thể sẽ mạnh mẽ hơn: unix.stackexchange.com/questions/40209/iêu
Emanuel Berg

Câu trả lời:


20

Đây là phiên bản cộng đồng của câu trả lời của Yokai kết hợp các ví dụ được cung cấp bởi Rudolf Olah .


Bạn có thể sử dụng công cụ được gọi xdotoolđể kiểm soát kích thước và vị trí cửa sổ. Không chỉ vậy, bất kỳ tập lệnh nào bạn viết bash, sử dụng xdotool, đều có thể được thiết lập để hoạt động với một cửa sổ được tối đa hóa hoàn toàn và nó có thể được viết kịch bản để đặt kích thước cửa sổ và tọa độ x: y bằng cách thao tác các lệnh mousemoveclicklệnh.

  1. Tìm ID cửa sổ:

    xdotool search --onlyvisible --name firefox
  2. Đặt kích thước cửa sổ

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
  3. Di chuyển cửa sổ

    xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y

Ví dụ: nếu id cửa sổ cho firefox là 123 bạn sẽ làm điều này:

xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080

Định vị phía dưới bên trái sẽ phải được tìm ra dựa trên độ phân giải màn hình của bạn.


1
Có một lỗi với xdotool, wmctrlv.v. và Ubuntu, XFCE (mà tôi có): nếu cửa sổ đã được khởi chạy ở chế độ toàn màn hình, bạn không thể di chuyển nó nữa: bug.launchpad.net/ubfox/+source/unity/ + lỗi / 971147
ThePhi

19

Theo tôi biết, điều này là không thể vì Firefox không chấp nhận các lệnh để điều khiển cửa sổ. Đó cũng (phần lớn) là trách nhiệm của người quản lý cửa sổ, vì vậy tôi nghi ngờ rằng sẽ có những thông số để làm điều đó. Tuy nhiên, bạn có thể điều khiển cửa sổ bằng wmctrl , nhưng điều đó sẽ hơi khó khăn một chút:

#!/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

Có thể có nhiều cách thông minh hơn để làm điều đó và có một số vấn đề về khả năng tương tác với Firefox (ví dụ: không có phiên bản nào khác đang chạy) nhưng nó sẽ giúp bạn tiếp tục.


1
Chỉ cần một lưu ý nhỏ. Thay đổi kích thước sẽ không hoạt động nếu cửa sổ được tối đa hóa. Vì vậy, trước tiên bạn phải hủy kích hoạt thuộc tính này bằng: wmctrl -i -r $ WID -b remove, maximized_vert; wmctrl -i -r $ WID -b xóa, maximized_horz; Sau đó tôi đã có thể thay đổi kích thước cửa sổ Firefox.
ka3ak

3

Trước đây tôi đã tạo một tài liệu HTML sẽ đặt kích thước cửa sổ bằng Javascript sau đó chuyển hướng đến trang tôi muốn. Đó là một hack ngu ngốc, nhưng, hey, nó hoạt động.


Có vẻ như điều này không còn hoạt động nữa. Rõ ràng, window.resizeTo chỉ có hiệu ứng nếu cửa sổ là một cửa sổ bật lên được tạo thông qua window.open.
hugomg

2

Tôi không nghĩ rằng điều này là có thể chỉ bằng các lệnh shell, vì nó không liên quan gì đến windowmanager của bạn.
Tôi nghe nói về wmctrldevilspie có thể ảnh hưởng đến điều này. Nhưng tôi nghi ngờ có một cách để đạt được điều đó đơn giản như bạn đã viết trong ví dụ của mình.


1

Tôi làm điều này tất cả các thời gian. Tôi sử dụng DevilsPie2, tuy nhiên, vì nó mạnh hơn. Nó sử dụng ngôn ngữ kịch bản LUA, không khó lắm.

Đây là kịch bản lua của tôi cho Thunderbird, mà tôi muốn mở trên màn hình bên trái (màn hình máy tính xách tay) khi nó mở:

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

Để thiết lập tính năng này, bạn tạo một thư mục trong cấu hình nhà của bạn (trên các bản phân phối giống như Ubuntu) có tên devilspie2, ví dụ: /home/$USERNAME/.config/devilspie2

Đối với Thunderbird, tôi đã tạo thunderbird.lua, mặc dù tên tệp không thành vấn đề. Tôi có một tên tệp khác nhau cho mỗi ứng dụng mặc dù bạn có thể đặt mọi thứ vào một tệp script nếu muốn. Đặt devilspie2 để tự động bắt đầu khi bạn đăng nhập, ví dụ: /home/$USERNAME/.config/autostart/devilspie2.desktop

Đây là một liên kết đến một trang tốt về các tùy chọn khác nhau có sẵn cho tập lệnh lua của bạn: https://github.com/gusnan/devilspie2/blob/master/README

Một lưu ý: Các tập lệnh không phải được thực thi. Của tôi là 664 và hoạt động tốt. Một vài trong số các chương trình khác mà tôi kiểm soát là openconnect, pidgin, RecordMyDesktop, timeshift, xeyes, xload, & yad. Tôi sử dụng pin_window trên chúng để chúng xuất hiện trên tất cả các máy tính để bàn, cộng với các lệnh khác tùy thuộc vào ứng dụng.


Dường như không hoạt động với LXDE. Tuyệt đối không có sự kiện cửa sổ nào được nhận ra (không có gì được in khi chạy devilspie2 --debug)
John Smith Tùy chọn

0

Điều này không giải quyết được vấn đề của vị trí, nhưng ít nhất bạn có thể đặt kích thước:

firefox -width 200 -height 500
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.