Mengatur dimensi jendela aplikasi yang sedang berjalan

28

Saya mencoba memulai aplikasi dalam Ubuntu (xfce atau gnome) dan melalui baris perintah dan bertanya-tanya apakah ada cara umum untuk mengatur dimensi jendela tertentu dari aplikasi tertentu yang sedang berjalan?

Jamie
sumber

Jawaban:

18

Ini lebih mudah dilakukan jika Anda menginstal sesuatu seperti xdotool. Maka Anda dapat melakukan:

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

ganti "nama jendela" dengan nama atau reg yang muncul di judul jendela (Anda juga dapat mencari berdasarkan kelas jendela dan berbagai hal lainnya), dan dua angka yang muncul setelah ukuran jendela masing-masing adalah lebar dan tinggi. (Anda juga dapat menggunakan persen, dll.) Lihat man xdotoolbegitu diinstal.

Jika Anda menggunakan Lucid atau sebelumnya, saya sarankan pergi ke situs web xdotool untuk mendapatkan versi yang lebih baru.

Untuk mengubah ukuran Firefox, misalnya:

xdotool search --name "Mozilla Firefox" windowsize 1024 768
luar biasa
sumber
3
apakah ada cara bagaimana mengubah ukuran jendela layar penuh tanpa dekorasi (bilah judul)? Dan atur posisi tepat di layar (mis. X = 0, y = 0)? Saya mencoba untuk mengatur ini untuk mplayer yang dimaksimalkan untuk pergi ke 800x600 x = 0 y = 0 dan kemudian setelah beberapa menit ke mode layar penuh yang sama. terima kasih
peter
15

Jika manajer jendela mendukung Xlib ada. Ini menggunakan Python untuk mengatur ukuran jendela ke 500x300:

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()

Bagian yang sulit adalah mendapatkan ID jendela; dalam kode di atas mendapat ID dari jendela aktif. Jika Anda menginginkan ID lain, Anda dapat menggunakan sesuatu seperti ini untuk mendapatkan judul dan mengendalikan PID dari setiap jendela, dan memilih ID yang tepat berdasarkan pada mereka:

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
Michael Mrozek
sumber
ketika saya melakukannya print pidsaya mendapatkan <Xlib.protocol.request.GetProperty serial = 15, data = {'bytes_after': 0, 'property_type': 6, 'value': (32, array('I', [5810L])), 'sequence_number': 15}, error = None>... ada saran untuk mengisolasi PID yang sebenarnya?
khaverim
Nvm. Sepertinya tidak mungkin, tetapi saya bisa menyelesaikannya name.
khaverim
1
@khaverim Hmm. Saya pikir API ini berubah sejak saya terakhir menulisnya, yang dulu hanya menjadi PID. Saya memperbarui jawabannya, Anda ingin mengambil nilai yang dikembalikan oleh get_full_propertydan lakukan .value[0]( valueadalah array )
Michael Mrozek
1
python Xlib dapat diinstal melalui: sudo apt-get install python-xlib (di Ubuntu)
Tom
4

Khusus untuk XFCE ada pyxfce yang akan memungkinkan Anda melakukannya menggunakan bahasa python . Pyxfce adalah API yang, antara lain, memungkinkan Anda berkomunikasi dengan manajer jendela . Untuk menggunakan ini dari baris perintah akan mengharuskan Anda untuk menyiapkan skrip terlebih dahulu.

Bergantung pada penggunaan Anda, pentingnya menggunakan API berbasis X menggunakan ID X window (seperti python-xlib atau xdotools yang disebutkan dalam jawaban lain) dibandingkan yang lain yang menggunakan string yang cocok dengan judul jendela (seperti wmctrl), adalah tidak ada kebingungan antara windows, yang mungkin memiliki kata kunci yang sama di judul masing-masing.

Benjamin
sumber
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-
Wilton malas
sumber
0

Saya menemukan wmctrl paling cocok untuk saya. Ini tersedia sebagai paket bertubuh kecil, untuk Ubuntu dan untuk Raspbian, dan kemungkinan untuk distro lain juga.

Karel Adams
sumber
Kami memiliki jawaban yang menyebutkan wmctrl , tetapi kami tidak memiliki Jawaban yang menunjukkan cara menggunakannya; dapatkah Anda memperluas jawaban Anda dengan demonstrasi, supaya orang dapat mengambilnya dan mengadaptasinya untuk penggunaan khusus mereka? Terima kasih!
Jeff Schaller
Seandainya saya punya contoh, saya pasti menambahkannya. Tetap saja, bukankah itu untuk apa halaman manual?
Karel Adams