Çalışan bir uygulamanın pencere boyutlarını ayarlama


28

Ubuntu (xfce veya gnome) içinde ve komut satırı aracılığıyla bir uygulamayı başlatmaya çalışıyorum ve şu anda çalışmakta olan belirli bir uygulamanın belirli bir penceresinin boyutlarını ayarlamanın genel bir yolu olup olmadığını merak ediyor muyum?

Yanıtlar:


18

Gibi bir şey yüklerseniz, bunu yapmak daha kolaydır xdotool. Sonra yapabilirsin:

xdotool search --name "window name" windowsize 300 400

"window name" ifadesini, pencere başlığında görünen bir adla veya eskiyle değiştirin (ayrıca, pencere sınıfına ve çeşitli şeylere göre de arama yapabilirsiniz) ve pencere boyutundan sonra görünen iki sayı, sırasıyla genişlik ve yüksekliktir. (Yüzdeleri de kullanabilirsiniz.) Kurulduktan man xdotoolsonra bakın .

Lucid ya da daha önceki bir sürümdeyseniz , daha yeni bir sürüm edinmek için xdotool web sitesine gitmenizi öneririm .

Örneğin, Firefox’u yeniden boyutlandırmak için:

xdotool search --name "Mozilla Firefox" windowsize 1024 768

3
Tam ekran penceresinin süslemeleri olmadan nasıl yeniden boyutlandırılabileceği var mı? Ve tam pozisyonu ekranda belirle (örneğin x = 0, y = 0)? Bunu maksimize edilmiş mplayer için 800x600 x = 0 y = 0 değerine ve ardından birkaç dakika sonra aynı tam ekran moduna ayarlamaya çalışıyorum. teşekkürler
Peter

15

Pencere yöneticisi Xlib'i destekliyorsa var. Bu, pencerenin boyutunu 500x300'e ayarlamak için Python'u kullanır:

WIDTH, HEIGHT = 500, 300
import Xlib
import Xlib.display

display = Xlib.display.Display()
root = display.screen().root
windowID = root.get_full_property(display.intern_atom('_NET_ACTIVE_WINDOW'), Xlib.X.AnyPropertyType).value[0]
window = display.create_resource_object('window', windowID)
window.configure(width = WIDTH, height = HEIGHT)
display.sync()

Zor kısım pencere kimliğini almak; Yukarıdaki kodda aktif pencerenin kimliği var. Başka bir kimlik istiyorsanız, her pencerenin başlığını ve PID'sini kontrol etmek için böyle bir şey kullanabilir ve şunlara dayanarak doğru kimliği seçebilirsiniz:

windowIDs = root.get_full_property(display.intern_atom('_NET_CLIENT_LIST'), Xlib.X.AnyPropertyType).value
for windowID in windowIDs:
    window = display.create_resource_object('window', windowID)
    name = window.get_wm_name() # Title
    prop = window.get_full_property(display.intern_atom('_NET_WM_PID'), Xlib.X.AnyPropertyType)
    pid = prop.value[0] # PID


ne zaman print pidalabilirim <Xlib.protocol.request.GetProperty serial = 15, data = {'bytes_after': 0, 'property_type': 6, 'value': (32, array('I', [5810L])), 'sequence_number': 15}, error = None>... gerçek PID'yi izole etmek için herhangi bir öneriniz var mı?
khaverim

Nvm. Mümkün görünmüyor ama geçici bir çözüm bulabilirim name.
khaverim

1
@khaverim Hmm. Sanırım bu API son yazdığımdan beri değişti, bu sadece PID'di. Cevabı güncelledim, döndürdüğünüz değeri almak get_full_propertyve yapmak .value[0]( valuebir dizi )
Michael Mrozek

1
python Xlib şu adresten yüklenebilir: sudo apt-get install python-xlib (Ubuntu'da)
Tom

4

XFCE özgü olduğunu pyxfce bunu kullanarak yapmanızı sağlayacaktır piton dili. Pyxfce, diğer şeylerin yanı sıra , pencere yöneticisi ile iletişim kurmanızı sağlayan bir API'dir . Bunu komut satırından kullanmak için önce bir komut dosyası hazırlamanız gerekir.

Kullanımınıza bağlı olarak, X pencere tanıtıcıları (örneğin, başka bir cevapta belirtilen xyttools ve xdotools gibi) kullanarak X pencere tanıtıcıları kullanarak X tabanlı bir API kullanmanın önemi; kendi başlıkları aynı anahtar kelimeler olabilir, pencereler arasında karışıklık.


3
#!/bin/bash
#get window pid under mouse
xprop -id $(xwit -current -print | cut -d ":" -f 1) | grep _NET_WM_PID | cut -d "=" -f2 | cut -c 2-

0

Wmctrl'nin bana en uygun olduğunu gördüm. Ufacık bir paket olarak, Ubuntu ve Raspbian için ve muhtemelen diğer dağıtımlar için de mevcut.


Biz wmctrl bahseder bir cevap , ama biz gösterileri nasıl kullanılacağını dair bir cevap yoktur; Cevabınızı bir gösteri ile genişletebilir misiniz, öyle ki insanlar bunu alıp kendi kullanımlarına uyarlayabilsin mi? Teşekkür ederim!
Jeff Schaller

Eldeki bir örnek olsaydı, kesinlikle eklemiştim. Yine de, man sayfaları bunun için değil mi?
Karel Adams
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.