Pencereyi komut satırı aracılığıyla ortalayın


19

Bir pencereyi açıldıktan sonra ekranın ortasına yerleştirmenin veya ekranın ortasında açılmasına neden olmanın bir yolu var mı?

Bunun komut satırı kullanılarak yapılması gerekir.

Yanıtlar:


33

wmctrl aracı, EWMH (Genişletilmiş Pencere Yöneticisi İpuçları) belirtimindetanımlanan hemen hemen tüm özelliklere komut satırı erişimi sağlar. İçin kullanılabilir üzere, masaüstü ve yönetilen pencerelerin ayrıntılı bir listesini almak için, örneğin, pencere yöneticisi hakkında bilgi almak için geçiş ve yeniden boyutlandırma masaüstü, pencereler yapmak için tam ekran , her zaman yukarıda veya yapışkan , ve activate ,onları kapatın , taşıyın , yeniden boyutlandırın , büyütün ve simge durumuna küçültün.

Tarafından yükleyebilirsiniz

sudo apt-get install wmctrl

Sanal masaüstleriniz (çalışma alanları) hakkında bilgi alabilirsiniz. wmctrl -d

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

Ve açık pencereleri ile listele wmctrl -l. -GSeçenek gösterir Eğer pencerelerin geometrisi:

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

Bir pencereyi, -r'den sonraki başlığına veya kısmi başlığına başvurarak belirtebilirsiniz. -e taşımak ve yeniden boyutlandırmak içindir

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.

Bu nedenle, bir pencereyi sol üst köşeye taşımak ve 1000 piksel genişliğinde ve 700 yüksekliğinde yapmak için 0,0,0,1000,700 kullanırsınız

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

resim açıklamasını buraya girin

Taşımak / yeniden boyutlandırmak için. Bunun için, -bseçeneği en üst düzeye çıkarmak için “en üst düzeye çıkarmak” geçici çözümünü kullandım.

wmctrl -r "Mozilla Firefox" -b ekleme, maximize_vert, maximize_horz

wmctrl -r "Mozilla Firefox" -b kaldır, maximize_vert, maximize_horz

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

resim açıklamasını buraya girin

Anlamanız Gereken Şeyler 1.

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

resim açıklamasını buraya girin

bu benim ekran çözünürlüğüm yani x = 1360 & y = 786

Bir pencereyi ekranın sol yarısına hizalama

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

Bir pencereyi ekranın sağ yarısına hizalama

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

Bir pencereyi center of screen1360/4 = 340 ile hizalama

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

resim açıklamasını buraya girin

Ekran ayarlarınızdan itibaren değiştirin

Daha Fazla Yardım için 1 2 3 4


7

o anda etkin olan pencereyle çalışan

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"

Bu ihtiyaç bashveya zshçalıştırmak için, düz shişe yaramaz.
wingedsubmariner

Çalışır 1/2, 1/2 veya 1/4 ekran döşemeli pencereler için Unity altında (örneğin, bir pencereyi sağ tarafa sürükleyin, ekranınızın sağ yarısını kaplar). Bu pencereler özel gibi görünüyor ve xdotoolaramadan önce onları "normal" pencereler yapmak için hangi eylemi çağırmak bilmiyorum windowmove. Fikirler?
Ronan Jouchet

Bu askubuntu iplik benim sorunum için bir çözüm bulundu . Aramayı wmctrlda içerir, daha iyi çözümler hoş geldiniz. TL; DR: wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horzson xdotool getactivewindow windowmovearamadan önce arayın.
Ronan Jouchet

4

Herkes kod pasajının bunu yapmak / kopyalamak için kopyalamasını istiyorsa, bir tane:

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

fooTabii ki, ilk satırda ortalamak istediğiniz pencerenin adıyla değiştirin .


Açıklama (örnek bir konsol oturumu biçiminde döküm):

Ekran boyutlarını alma

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

Pencerenin geometri bilgilerini alma

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

Pencereyi taşıma

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

Çoğu uygulama, başlatırken --geometry parametresini onurlandırmalıdır (bazıları -geometri'yi tercih eder, ilki sizin için işe yaramazsa ikincisini deneyin):

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

Geometri parametresi şu forma sahiptir:

WIDTHxHEIGHT+XOFF+YOFF

Gereksiz parçaları dışarıda bırakabilirsiniz:

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

Daha fazla ayrıntı için:

man X

sonra "/" tuşuna basın ve GEOMETRİ ÖZELLİKLERİNİ arayın

veya buraya bakın: http://www.cotse.com/dlf/man/xwindows/geometry.htm

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.