Як отримати точну інформацію про вікно (розміри тощо) в Linux (X)?


22

Як я можу отримати точну інформацію про вікно в Linux? Я знаю, що я можу використовувати wmctrl, щоб отримати розмір вікна, але фактичний розмір вікна може змінюватися за рахунок прикраси вікна. Мені потрібна така інформація та методи:

* precise window dimensions
* precise available screen space (excluding panels like gnome-panel)
* the ability to set a window to be a certain size, including decorations

Який був би найкращий спосіб зробити це?

Спасибі заздалегідь!


Якщо вас більше цікавить сторона python, ми можемо перенести це на наш дочірній сайт щодо програмування StackOverflow.com. Просто дайте нам знати.
Gnoupi

@Gnoupi: дякую, але це насправді перехресне повідомлення від SO, як користувач запропонував, я можу отримати кращу відповідь тут. Оригінальне запитання знаходиться на сайті stackoverflow.com/questions/3233660/… .
mellort

Добре, я бачу. У цьому випадку я думаю, що частина вашого питання може бути відредагована. Відповіді на SU, швидше за все, будуть використовувати інші команди, а не програмування. Питання про SO, мабуть, має зосередитися на питанні, як це зробити в python.
Gnoupi

Отримайте розмір вікна з прикрасами: unix.stackexchange.com/questions/14159/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Відповіді:


26

Є деякі програми командного рядка, які можуть допомогти:

  • xwininfo: Ви отримуєте розмір вікна, виключаючи оздоблення та абсолютне положення (на екрані) та відносне (до області для вікон)
  • xdpyinfo: Це дає набагато більше інформації про ваш екран-пристрій, ніж ви коли-небудь хочете знати. Але десь на виході є щось на кшталт screen: #0якого dimension: 1024x768.

Чи є спосіб отримати інформацію, включаючи прикрасу?
Віктор

6

> точні розміри вікон

Наступний приклад (буде працювати принаймні в sh, bash та zsh) надрукує геометрію вікон із рамкою та без неї для всіх вікон із "KWrite" десь у заголовку.

windows="$(wmiface findNormalWindows "KWrite" "" "" "" "" "")"
for window in $(echo $windows); do
{
  echo $window
  wmiface framePosition $window
  wmiface frameSize $window
  wmiface windowPosition $window
  wmiface windowSize $window
  echo
} done

> точний доступний простір екрану (за винятком панелей типу gnome-панелі)

xrandr

Наприклад:

xrandr | head -n1 | cut -d, -f2 | cut -d" " -f3-5

Вихід у моєму випадку:

4400 x 2560

Не знаєте, як виключити панелі - якщо у вас більше одного монітора, вони можуть бути навіть посередині віртуального екрану, тому геометрія екрана без панелей може бути складнішою, ніж "наявний простір екрану".

> можливість встановити вікно певного розміру, включаючи прикраси

wmiface setFrameGeometry $window $x $y $width $height

Прочитайте wmiface README, щоб отримати ще більше можливих команд.


2
wmiface не упакований з усіма (будь-якими?) дистрибутивами. Мені вдалося встановити на Mint, використовуючи пакунок ubuntu звідси: kde-apps.org/content/show.php?content=40425 Згадану README можна знайти тут: gitorious.org/wmiface/wmiface/source/…
slinkp

Дивіться другу частину цього коментаря unix.stackexchange.com/a/156349/84607 про інший спосіб отримати повну геометрію, включаючи прикраси, використовуючи комбінацію xwininfo, xdotool та xprop.
slinkp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.