Tengahkan jendela melalui baris perintah


19

Apakah ada cara untuk meletakkan jendela di tengah layar setelah dibuka, atau membuatnya terbuka di tengah layar?

Ini perlu dilakukan menggunakan baris perintah.

Jawaban:


33

alat wmctrl menyediakan akses baris perintah ke hampir semua fitur yang ditentukan dalam spesifikasi EWMH (Extended Window Manager Hints) . Ini dapat digunakan, misalnya, untuk mendapatkan informasi tentang manajer jendela, untuk mendapatkan daftar desktop dan jendela terkelola yang terperinci, untuk beralih dan mengubah ukuran desktop, membuat jendela layar penuh , selalu di atas atau lengket , dan untuk mengaktifkan , tutup , pindahkan , ubah ukuran , maksimalkan ,dan minimalkan .

Anda dapat menginstalnya dengan

sudo apt-get install wmctrl

Anda dapat memperoleh informasi tentang desktop virtual (ruang kerja) Anda dengan wmctrl -d

one@onezero:~$ wmctrl -d
0  * DG: 2720x1536  VP: 0,0  WA: 0,24 1360x744  N/A

Dan daftar jendela yang terbuka dengan wmctrl -l. The -Gpilihan menunjukkan Anda geometri dari jendela:

one@onezero:~$ wmctrl -l
0x02000004  0 onezero Desktop
0x02e00002  0     N/A DNDCollectionWindow
0x02e00003  0     N/A launcher
0x01e00004  0 onezero cairo-dock
0x02e00004  0     N/A panel
0x04800061  0 onezero Transmission
0x02e0000a  0     N/A Dash
0x03a00044  0 onezero arranging windows from the gnu/linux command line with wmctrl ~ Moving to Freedom - Chromium
0x04400006  0 onezero one@onezero: ~
0x04c000e9  0 onezero Google - Mozilla Firefox

wmctrl -lG

one@onezero:~$ wmctrl -lG
0x02000004  0 0    0    1360 768  onezero Desktop
0x02e00002  0 -1460 -868 1360 768      N/A DNDCollectionWindow
0x02e00003  0 0    24   58   744      N/A launcher
0x01e00004  0 290  653  780  115  onezero cairo-dock
0x02e00004  0 0    0    1360 24       N/A panel
0x04800061  0 408  95   732  500  onezero Transmission
0x02e0000a  0 -1402 -844 1302 744      N/A Dash
0x03a00044  0 0    24   1360 744  onezero Center a window via command line - Ask Ubuntu - Stack Exchange - Chromium
0x04400006  0 127  94   983  434  onezero one@onezero: ~
0x04c000e9  0 5    47   1349 715  onezero Google - Mozilla Firefox

Anda dapat menentukan jendela dengan merujuk judul atau sebagian judulnya setelah -r. -e adalah untuk memindahkan dan mengubah ukuran

wmctrl -r "Mozilla Firefox" -e <G>,<X>,<Y>,<W>,<H>

<G>: Gravity specified as a number. The numbers are defined in the EWMH specification. The value of zero is particularly
     useful, it means "use the default gravity of the window".
<X>,<Y>: Coordinates of new position of the window.
<W>,<H>: New width and height of the window.

Jadi, untuk memindahkan jendela ke sudut kiri atas dan membuat lebar 1000 piksel dengan tinggi 700, Anda akan menggunakan 0,0.0.1000.700

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 0,0,0,1000,700

masukkan deskripsi gambar di sini

Untuk memindahkan / mengubah ukurannya. Untuk itu, saya menggunakan solusi "unmaximizing" terlebih dahulu, menggunakan -bopsi

wmctrl -r "Mozilla Firefox" -b tambahkan, maximized_vert, maximized_horz

wmctrl -r "Mozilla Firefox" -b hapus, maximized_vert, maximized_horz

one@onezero:~$ wmctrl -r "Mozilla Firefox" -b add,maximized_vert,maximized_horz

masukkan deskripsi gambar di sini

Hal-Hal yang Perlu Anda Pahami 1

The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"

masukkan deskripsi gambar di sini

itu adalah Resolusi layar saya jadi x = 1360 & y = 786

Menyelaraskan jendela ke setengah kiri layar

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,0,0,680,768

Menyelaraskan jendela ke setengah kanan layar

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,680,0,680,768

Menyelaraskan jendela ke center of screen1360/4 = 340

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,340,0,680,768

masukkan deskripsi gambar di sini

Memanipulasi sebagai pengaturan layar Anda

Untuk Bantuan Lebih Lanjut 1 2 3 4


7

yang berfungsi dengan jendela yang sedang aktif

IFS='x' read screenWidth screenHeight < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)

width=$(xdotool getactivewindow getwindowgeometry --shell | head -4 | tail -1 | sed 's/[^0-9]*//')
height=$(xdotool getactivewindow getwindowgeometry --shell | head -5 | tail -1 | sed 's/[^0-9]*//')

newPosX=$((screenWidth/2-width/2))
newPosY=$((screenHeight/2-height/2))

xdotool getactivewindow windowmove "$newPosX" "$newPosY"

Ini perlu bashatau zshdijalankan, polos shtidak akan berfungsi.
wingedsubmariner

Bekerja 👍, kecuali di bawah Unity untuk windows yang ubin berukuran 1/2 atau 1/4 layar (mis. Seret jendela ke sisi kanan, itu akan menempati setengah kanan layar Anda). Jendela-jendela ini tampaknya istimewa, dan saya tidak tahu xdotooltindakan apa yang harus dilakukan untuk membuat mereka menjadi "normal" sebelum menelepon windowmove. Ide ide?
Ronan Jouchet

Menemukan solusi untuk masalah saya di utas askubuntu ini . Melibatkan panggilan wmctrljuga, solusi yang lebih baik diterima. TL; DR: panggilanwmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horz sebelum xdotool getactivewindow windowmovepanggilan terakhir .
Ronan Jouchet

4

Jika ada yang ingin cuplikan kode untuk disalin / ditempelkan untuk melakukan ini, ini salah satunya:

winname='foo'
IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
read wx wy ww wh < <(wmctrl -lG | grep $winname | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
wmctrl -r $winname -e 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh

Ganti foodengan nama jendela yang Anda ingin pusatkan di baris pertama, tentu saja.


Penjelasan (rincian dalam bentuk contoh sesi konsol):

Mendapatkan dimensi layar

llama@llama:~$ xdpyinfo | grep dimensions
  dimensions:    1920x1080 pixels (508x285 millimeters)
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*'
1920x1080
x
508x285
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1
1920x1080
llama@llama:~$ IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
llama@llama:~$ echo $sw $sh
1920 1080

Mendapatkan informasi geometri jendela

llama@llama:~$ wmctrl -lG | grep foo
0x00a0000c  0 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]*//;'
  0 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]*//;'
 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;'
1143 505  722  475  
llama@llama:~$ read wx wy ww wh < <(wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
llama@llama:~$ echo $wx $wy $ww $wh
1143 505 722 475

Memindahkan jendela

llama@llama:~$ echo 0,foo,bar,$ww,$wh
0,foo,bar,722,475
llama@llama:~$ echo 0,$(($sw/2)),bar,$ww,$wh                                    
0,960,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),bar,$ww,$wh
0,599,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh
0,599,303,722,475

0

Sebagian besar aplikasi harus menghormati parameter --geometry saat memulai (beberapa lebih suka -geometry, coba yang kedua jika yang pertama tidak berhasil untuk Anda):

gnome-terminal --geometry 80x25+100+100

Parameter geometri memiliki bentuk ini:

WIDTHxHEIGHT+XOFF+YOFF

Anda dapat meninggalkan bagian yang tidak dibutuhkan:

gnome-terminal --geometry +20+50 #No size, just offsets

Untuk lebih jelasnya:

man X

lalu tekan "/" dan cari SPESIFIKASI GEOMETRI

atau lihat di sini: http://www.cotse.com/dlf/man/xwindows/geometry.htm

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.