Вопрос Почему wmctrl не работает для определенных окон?


francisco@Ubuntu:~$ wmctrl -l
0x02600006  0 Ubuntu Área de trabalho
0x03c00002  0 Ubuntu XdndCollectionWindowImp
0x03c00005  0 Ubuntu unity-launcher
0x03c00008  0 Ubuntu unity-panel
0x03c0000b  0 Ubuntu unity-dash
0x03c0000c  0 Ubuntu Hud
0x046000b3  0 Ubuntu How to make a window aways on top? - Stack Overflow - Mozilla Firefox
0x0520000b  0    N/A Qt Creator
0x05002396  0 Ubuntu francisco@Ubuntu: ~
0x0540000b  0    N/A backlight

Для окон, у которых есть столбец имени машины, как N/A Я не могу отправить wmctrl команды вроде wmctrl -r "window name" -b add,above, Зачем? (также, я не знаю, почему эти окна отличаются от столбца имени машины ...)

Мое первоначальное намерение заключалось в том, чтобы отправить такую ​​команду на backlight окно, бескаркасное приложение Qt. Использование окна меню системы и проверка «Всегда сверху» работает для окна, хотя. Мне просто нравится программный способ сделать то же самое.


2
2017-12-24 01:58


происхождения


Может быть, wmctrl имеет некоторые проблемы с окнами qt? Или он показывает другие qt-окна просто отлично?
@ vasa1 в настоящее время я проверил только два окна Qt, как показано, как мое, так и окно Qt Creator, похоже, страдают от одной и той же проблемы. - pepper_chico


ответы:


это определенно ошибка в wmctrl,
после копания вокруг кода wmctrl кажется, что ошибка заключается в переводе строк имени окна в соответствующий идентификатор окна (или XID). так wmctrl -r "window name" -b add,above не является надежным.

как обходной путь, вместо этого используйте XID, т. е. wmctrl -i -r window_id -b add,above, в твоем случае , wmctrl -i -r 0x0520000b -b add,above должно сработать.

большинство оконных средств управления реализованы как X window Properties. вы можете просмотреть все свойства окна с помощью команды -- xprop,

ЗАМЕТКА:

  1. Windows, в которой столбец имен компьютеров равен N / A. свойство имени машины WM_CLIENT_MACHINE, он редко используется. и некоторые инструментальные средства GUI могут не реализовывать их.
    вы можете просмотреть свойство имени машины окна, выполнив следующую командную строку и щелкнуть по окну

    shell> xprop | grep MACHINE
    
  2. Что касается Always On Top, это еще одно значение свойства _NET_WM_STATE_ABOVE,
    чтобы убедиться, выполните следующую командную строку и щелкните по окну

    shell> xprop | grep _NET_WM_STATE
    

6
2017-12-25 06:04



к сожалению, я уже пытался использовать id вместо имени окна, но свойство не устанавливается wmctrl. - pepper_chico
Я тестировал Qt-помощник, и он работал, когда я использовал идентификатор windo. xprop также показал _NET_WM_STATE_ABOVE. можете ли вы дать мне результаты xprop и xwininfo для окна, на котором вы тестировали? - sgx1
спасибо за помощь, это xprop и xwininfo для окна Qt Creator и для главного окна nautilus: gist.github.com/oblitum/8126736, - pepper_chico
я пробовал wmctrl -ri window_id -b add,above как в окне Qt Creator, так и в окне nautilus, оба они не работают ни для кого. - pepper_chico
СПАСИБО человек, вот и все, дело в том, wmctrl -ri не работал здесь, затем я изменил его, чтобы передать флаги более явно с помощью wmctrl -i -r <window id> -b add,above и теперь он работает =) для всех окон. Раньше он работал для всех, кроме Qt-окон, передавая имя окна. - pepper_chico