birdwatcher (birdwatcher) wrote,
birdwatcher
birdwatcher

Линукс готов для декстопа!

Я сейчас имею в виду не рабочую станцию, а графическую абстракцию десктопа -- то пустое место, на котором открываются все окна. В современных линуксах таковых бывает несколько штук, и между ними можно мгновенно переключаться.

У меня есть программа, которая открывает много окон, и я захотел научить её понимать, на каком десктопе находится каждое из них, и манипулировать этим. Программа написана на Qt, поддержки десктопов в Qt нет. Она просто открывает всё подряд на произвольный текущий десктоп, и ничего про дальнейшее положение вещей не знает. Из Qt можно достать указатели на нативные низкоуровневые иксовые структуры, связанные с его окнами. Я думал, что с их помощью посмотрю в X-сервере. Про X-сервер я абсолютно ничего не знаю, как видно из качества самой этой идеи: самое поверхностное ознакомление показывает, что X-сервер тоже не знает и не может ничего знать про десктопы, а живут они только внутри оконного менеджера. Внутри каждого по-своему (например, у некоторых - никак).

Ну тогда я решил сдаться, потому что где я возьму читабельные описания библиотек некоего конкретного оконного менеджера. Кто ими вообще пользуется, кроме их авторов? Я даже не знаю, какой у меня оконный менеджер. Точно не fvwm.

Но в самый последний момент обнаружилась программа wmctrl, с помощью которой можно общаться с оконным менеджером из командной строки! Она поддерживает прекрасный набор команд типа "перечисли все окна", "перенеси окно x на десктоп y", "напечатай, где находится окно z" и подобные. Работает в том оконном менеджере, из окна в котором запущена.

Тут, разумеется, можно открыть код этой программы, вырезать из него нужные куски и перенести в свой проект. Но это решение чудовищно неэффективное. У кого есть время продираться через код?

Вместо этого оптимальным будет строковыми операциями сформировать командную строку для этой программы, запустить ее, и, в некоторых случаях, распарсить результат.

Вот за прекрасную дебильность таких решений я и люблю программирование. Когда-то, в восьмидесятые годы, оно всё было такое. Теперь всё меньше и меньше.
Subscribe
  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 7 comments