Bagaimana saya bisa menemukan lokasi (di desktop) dari sebuah jendela pada baris perintah?

19

Saya mencoba menulis skrip kecil untuk membantu mengelola windows saya melalui pintasan keyboard.

Untuk melakukan apa yang saya inginkan, saya harus dapat menemukan lokasi saat ini dan ukuran jendela "aktif" (terfokus). Menurut lokasi, maksud saya koordinat X, Y dari jendela di desktop, dan menurut ukuran yang saya maksud adalah tinggi dan lebar jendela.

Apakah ada utilitas baris perintah yang dapat mengambil informasi ini?

TM.
sumber

Jawaban:

22

Anda bisa mendapatkan semua info untuk jendela aktif saat ini dengan menggunakan perintah ini:

xwininfo -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

atau

xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)

Hanya mengurai output untuk koordinat yang Anda butuhkan. Berikut adalah beberapa perintah yang berguna saat berinteraksi dengan windows:

  • xwininfo akan memberi Anda geometri relatif dan absolut.
  • xprop akan memberi tahu Anda banyak info, termasuk jika jendela aktif, tetapi bukan geometri
  • xdpyinfo juga akan memberi Anda id dari jendela yang aktif, tetapi tidak ada info tambahan.
  • wmctrl akan memberi Anda daftar informasi tentang windows, dan memungkinkan Anda memilih jendela aktif untuk modifikasi, tetapi bukan informasi.

Misalnya untuk mengubah judul jendela aktif menjadi "Nama Baru":

wmctrl -r :ACTIVE: -N "New Name"

Atau untuk mengubah posisi jendela aktif:

wmctrl -r :ACTIVE: -e 0,20,20,200,400

Pertimbangkan wmctrljika Anda hanya perlu mengubah sesuatu yang sederhana, seperti geometri jendela. Pertimbangkan untuk menggunakan skrip lain yang disebutkan di atas hanya jika Anda ingin melakukan hal-hal lain yang lebih kompleks.

Martin Owens -doctormo-
sumber
1
Saya hanya ingin mencatat bahwa saya mendapatkan hasil yang berbeda ketika menjalankan perintah kedua. Yang pertama berfungsi seperti yang saya harapkan.
TM.
1
Saya menggunakan Arch tetapi mungkin membantu seseorang di sini di masa depan. Yang pertama tidak bekerja untuk saya, yang kedua tidak memberikan dimensi yang benar mungkin karena WM. Tetapi kombinasi keduanya berhasil. xwininfo -id $(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep -Eo "0x[0-9a-f]{2,}")
Sev
Terima kasih! Tapi saya setuju dengan dua komentar pertama. Perintah kedua, xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)menunjukkan saya jendela anak (tidak memiliki nama) dari Terminal saya. Ketika saya baru saja melakukannya, xdpyinfo | grep focussaya mendapatkan focus: window 0x435b877, revert to Parent, dan 0x435b877 adalah id dari jendela yang dikembalikan oleh perintah pertama (yang berfungsi untuk saya). Ini ada di Trusty 14.04.1 LTS
nealmcb
8

Dengan "xdotool" Anda dapat dengan mudah berinteraksi dengan windows menggunakan peristiwa keyboard atau mouse.

Contoh pengiriman CtrlCurutan ke jendela aktif:

xdotool getwindowfocus key ctrl+c # Sends CTRL+C to the current window.

Jika Anda benar-benar membutuhkan posisi jendela:

eval $(xdotool getmouselocation --shell); echo $X $Y

Untuk tindakan / opsi lainnya, periksa halaman manual .

João Pinto
sumber
Menarik, tapi saya baru mengerti Error: Invalid key sequence 'ctrl-c'.
l0b0