Dapatkan ukuran Jendela di shell


18

Saya ingin mendapatkan ukuran jendela saat ini dari skrip shell ...

Sungguh tidak banyak lagi yang bisa dikatakan ... Saya lebih suka menggunakan wmctrl.

Jawaban:


23
wmctrl -lG

Akan memberi Anda sesuatu seperti:

oli@bert:~$ wmctrl -lG
0x0384c0d5 -1 1590 1030 330  170  bert N/A
0x01200023 -1 0    0    3840 1200 bert x-nautilus-desktop
0x01000003 -1 3840 2352 1920 24   bert Bottom Expanded Edge Panel
0x01000028 -1 0    2352 1920 24   bert Bottom Expanded Edge Panel
0x0500003e  0 676  252  1404 1015 bert Chromium
0x02e00021  0 3860 160  1361 1084 bert Liferea
0x02000047  0 6650 940  506  683  bert Social broadcast messages
0x04600004  0 4546 460  1263 833  bert oli@bert: ~

Dengan ini, Anda dapat grepdan cutturun pada ini sehingga Anda dibiarkan dengan nilai-nilai geometri (kolom 3-6).

Mengutip halaman manual sehingga Anda mengerti persis apa kolomnya:

-l

Daftar jendela yang dikelola oleh manajer jendela. Satu baris adalah output untuk setiap jendela, dengan garis dipecah menjadi kolom-kolom yang dipisahkan ruang. Kolom pertama selalu berisi identitas jendela sebagai bilangan bulat heksadesimal, dan kolom kedua selalu berisi nomor desktop (-1 digunakan untuk mengidentifikasi jendela lengket). Jika opsi -p ditentukan, kolom berikutnya akan berisi PID untuk jendela sebagai bilangan bulat desimal. Jika opsi -G ditentukan maka empat kolom bilangan bulat akan mengikuti: x-offset, y-offset, lebar dan tinggi. Kolom berikutnya selalu berisi nama mesin klien. Sisa baris berisi judul jendela (mungkin dengan beberapa spasi di judul).


Saya akan menggunakan itu!
Allan

1
Saya suka cara komputer Anda disebut bert :)
drnessie

5

I belive wmctrl tidak memiliki opsi untuk menemukan id jendela aktif secara langsung.
Jika seseorang tahu bagaimana melakukannya, saya tertarik untuk tahu ..
Yang mengatakan, berikut adalah beberapa skrip yang mencetak ukuran jendela aktif.

Ini adalah: wmctrl + xdotool ... (tidak menggunakan sed).

id=$(xdotool getactivewindow)
wmctrl -lpG | while read -a a; do w=${a[0]}; if (($((16#${w:2}))==id)) ; then echo -n "${a[5]} ${a[6]}"; break; fi; done

Ini adalah: xwininfo + xdotool + sed

xwininfo bagian dari x11-utils

set $(xwininfo -id $(xdotool getactivewindow) \
|sed -n -e "s/^ \+Width: \([0-9]\+\).*/\1/p" \
        -e "s/^ \+Height: \([0-9]\+\).*/\1/p")
echo -n "$1 $2"

2

Gunakan xpropatau xwininfo. Keduanya datang secara default, tidak perlu menginstal

Contoh penggunaan:

Kedua perintah mengubah kursor menjadi kuadrat / silang untuk memungkinkan memilih jendela tertentu.

$ xprop _NET_WM_OPAQUE_REGION                                                          
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377


$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'                         
 984
 377

Atau, seseorang dapat menentukan jendela pada baris perintah dalam bentuk XID

$ xprop _NET_WM_OPAQUE_REGION -id 83886090                                             
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377

$ xwininfo -id 83886090 | awk -F ':' '/Width/ || /Height/{print $2}'            
 984
 377

Posting lain di mana ini digunakan

Secara khusus,, xwininfotelah digunakan secara aktif oleh saya untuk skrip, seperti pada pertanyaan AskUbuntu ini:


Ia biasa, tambahkan contoh;)
AB

Menambahkannya setelah setahun;) Tapi lebih baik terlambat daripada tidak, kan?
Sergiy Kolodyazhnyy

0

Script shell tidak tahu atau tidak peduli tentang windows. Paling-paling mereka berjalan di terminal (yang mungkin atau mungkin tidak ditampilkan di jendela). Jika Anda ingin mendapatkan lebar dan tinggi terminal dalam karakter, gunakan utilitas stty.


2
Tentunya skrip shell entah bagaimana bisa meminta klien X untuk geometri mereka? Jika tidak, bagaimana aplikasi X akan ditulis?
djeikyb

@djeikyb mereka ditulis sebagai klien X dan berkomunikasi dengan server X. Script shell dijalankan dalam shell, yang mungkin atau tidak dapat berjalan di lingkungan yang bahkan memiliki server X, dan seharusnya tidak peduli dengan X.
psusi

2
Maklum, ya. Tapi ada solusinya! Menggunakan wmctrl, sebuah paket dari repo, Anda dapat memindahkan, mengubah ukuran, meminimalkan dan bahkan mengubah ruang kerja!
drnessie

Dengan logika @ psusi, lingkungan desktop seharusnya tidak ada. Lagi pula, mereka hanya kumpulan besar skrip yang berinteraksi dengan perangkat lunak yang ditulis untuk X.
andyn

0

Saya menemukan tput colsbekerja dengan sangat baik!


2
Terima kasih atas kontribusi anda. Saya sarankan untuk meningkatkan jawaban Anda: jelaskan apa yang dilakukannya, ubah perintah untuk mendapatkan jumlah baris juga. Mungkin menunjukkan cara menggunakan hasil dalam skrip shell. - Lihat jawaban berperingkat teratas sebagai contoh.
guntbert

Inferring dari OP menyebutkan wmctrl, kita tidak berbicara tentang konsol tetapi windows environment grafis.
andyn

0

Punya 3 layar, output 3 baris ini dengan dimensi:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.