Bagaimana cara mengatur ukuran jendela dan lokasi aplikasi di layar melalui baris perintah?

33

Saya ingin jendela Firefox dibuka dalam ukuran tertentu, dan lokasi di layar menggunakan perintah shell, misalnya:

firefox myfile.html size 800x600 location bottom-left

Apakah ada perintah seperti itu?

alwbtc
sumber
Saya berhasil melakukan ini (dengan bantuan forum ini), walaupun jika Anda menemukan solusi lain, tolong beri tahu saya karena mungkin akan lebih kuat: unix.stackexchange.com/questions/40209/…
Emanuel Berg

Jawaban:

20

Berikut adalah versi komunitas dari jawaban oleh Yokai yang menggabungkan contoh-contoh yang ditawarkan oleh Rudolf Olah .


Anda dapat menggunakan alat yang disebut xdotooluntuk mengontrol ukuran dan lokasi jendela. Tidak hanya itu, skrip apa pun yang Anda tulis bash, gunakan xdotool, dapat diatur untuk bekerja dengan jendela yang sepenuhnya dimaksimalkan dan dapat dituliskan untuk mengatur ukuran jendela dan koordinat x: y dengan memanipulasi mousemovedan clickperintah.

  1. Temukan ID jendela:

    xdotool search --onlyvisible --name firefox
  2. Atur ukuran jendela

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
  3. Pindahkan jendelanya

    xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y

Misalnya, jika id jendela untuk firefox adalah 123 Anda akan melakukan ini:

xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080

Posisi kiri bawah harus ditentukan berdasarkan resolusi layar Anda.

roaima
sumber
1
Ada bug dengan xdotool, wmctrldll. Dan Ubuntu, XFCE (yang saya miliki): jika jendela sudah diluncurkan dalam mode layar penuh, Anda tidak dapat memindahkannya lagi: bugs.launchpad.net/ubuntu/+source/unity/ + bug / 971147
ThePhi
19

Sejauh yang saya tahu, ini tidak mungkin karena Firefox tidak menerima perintah untuk mengontrol jendela. Itu juga (sebagian besar) tanggung jawab manajer jendela, jadi saya ragu bahwa akan ada parameter untuk melakukan itu. Namun, Anda dapat mengontrol jendela dengan wmctrl , tetapi itu akan sedikit sulit:

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

Mungkin ada cara yang lebih cerdik untuk melakukannya, dan ada beberapa masalah interoperabilitas dengan Firefox (mis. Tidak ada contoh lain yang sedang berjalan) tetapi harus membuat Anda maju.

Polisi
sumber
1
Hanya sedikit catatan. Mengubah ukuran tidak akan berfungsi jika jendela dimaksimalkan. Jadi, Anda harus menonaktifkan properti ini terlebih dahulu dengan: wmctrl -i -r $ WID -b hapus, maximized_vert; wmctrl -i -r $ WID -b hapus, maximized_horz; Setelah itu saya bisa mengubah ukuran jendela Firefox.
ka3ak
3

Di masa lalu saya telah membuat dokumen HTML yang akan mengatur ukuran jendela dengan Javascript lalu mengarahkan ke halaman yang saya inginkan. Ini hack bodoh tapi, hei, itu berhasil.

bahamat
sumber
Sepertinya ini tidak berfungsi lagi. Rupanya, window.resizeTo hanya berpengaruh jika jendela adalah popup yang dibuat melalui window.open.
hugomg
2

Saya tidak berpikir ini hanya dimungkinkan oleh perintah shell, karena tidak ada hubungannya dengan manajer jendela Anda.
Saya mendengar tentang wmctrl dan devilspie yang dapat mempengaruhi ini. Tetapi saya ragu ada cara untuk mencapainya sesederhana seperti yang Anda tulis dalam contoh Anda.

32 bit mengapung
sumber
1

Saya melakukan ini sepanjang waktu. Saya menggunakan DevilsPie2, karena lebih kuat. Ini menggunakan bahasa scripting LUA, yang tidak terlalu sulit.

Inilah skrip lua saya untuk Thunderbird, yang ingin saya buka di monitor paling kiri (layar laptop) ketika dibuka:

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

Untuk mengatur ini, Anda membuat direktori di konfigurasi rumah Anda (pada distribusi seperti Ubuntu) bernama devilspie2, misalnya /home/$USERNAME/.config/devilspie2

Untuk Thunderbird, saya membuat thunderbird.lua, meskipun nama file tidak masalah. Saya memiliki nama file yang berbeda untuk setiap aplikasi meskipun Anda dapat meletakkan semuanya menjadi satu file skrip jika Anda mau. Set devilspie2 untuk memulai secara otomatis ketika Anda login, mis. /Home/$USERNAME/.config/autostart/devilspie2.desktop

Berikut ini tautan ke halaman bagus tentang berbagai opsi yang tersedia untuk skrip lua Anda: https://github.com/gusnan/devilspie2/blob/master/README

Satu catatan: Skrip tidak harus dapat dieksekusi. Punyaku 664 dan bekerja dengan baik. Beberapa program lain yang saya kendalikan adalah openconnect, pidgin, RecordMyDesktop, timeshift, xeyes, xload, & yad. Saya menggunakan pin_window pada mereka sehingga mereka muncul di semua desktop, ditambah perintah lain tergantung pada aplikasi.

Karl Pearson
sumber
Tampaknya tidak berfungsi dengan LXDE. Sama sekali tidak ada acara jendela yang dikenali (tidak ada yang dicetak saat menjalankan devilspie2 --debug)
John Smith Opsional
0

Ini tidak menyelesaikan masalah posisi, tetapi setidaknya Anda dapat mengatur dimensi:

firefox -width 200 -height 500
sebpiq
sumber