У меня есть программа, которая открывает много окон, и я захотел научить её понимать, на каком десктопе находится каждое из них, и манипулировать этим. Программа написана на Qt, поддержки десктопов в Qt нет. Она просто открывает всё подряд на произвольный текущий десктоп, и ничего про дальнейшее положение вещей не знает. Из Qt можно достать указатели на нативные низкоуровневые иксовые структуры, связанные с его окнами. Я думал, что с их помощью посмотрю в X-сервере. Про X-сервер я абсолютно ничего не знаю, как видно из качества самой этой идеи: самое поверхностное ознакомление показывает, что X-сервер тоже не знает и не может ничего знать про десктопы, а живут они только внутри оконного менеджера. Внутри каждого по-своему (например, у некоторых - никак).
Ну тогда я решил сдаться, потому что где я возьму читабельные описания библиотек некоего конкретного оконного менеджера. Кто ими вообще пользуется, кроме их авторов? Я даже не знаю, какой у меня оконный менеджер. Точно не fvwm.
Но в самый последний момент обнаружилась программа wmctrl, с помощью которой можно общаться с оконным менеджером из командной строки! Она поддерживает прекрасный набор команд типа "перечисли все окна", "перенеси окно x на десктоп y", "напечатай, где находится окно z" и подобные. Работает в том оконном менеджере, из окна в котором запущена.
Тут, разумеется, можно открыть код этой программы, вырезать из него нужные куски и перенести в свой проект. Но это решение чудовищно неэффективное. У кого есть время продираться через код?
Вместо этого оптимальным будет строковыми операциями сформировать командную строку для этой программы, запустить ее, и, в некоторых случаях, распарсить результат.
Вот за прекрасную дебильность таких решений я и люблю программирование. Когда-то, в восьмидесятые годы, оно всё было такое. Теперь всё меньше и меньше.