Вопрос или проблема
У меня есть настольная установка с 3 мониторами, и я активно использую несколько рабочих пространств, где организую открытые программы/окна по личным или рабочим интересам и так далее; в каждом рабочем пространстве самые важные вещи находятся на среднем мониторе, а другие на одном из боковых. Если я перезагружаю машину и открываю те же программы, система “запоминает” рабочее пространство и монитор всех окон. Если один из мониторов отключён, система перенастраивает окна отключенного монитора на другие 2, и если монитор подключается снова, система восстанавливает прежнюю 3-мониторную компоновку (вроде как, но нормально).
Я недавно установил свежий Ubuntu 24.04 (Gnome, Wayland, карта Nvidia и проприетарный драйвер), и в большинстве случаев поведение при отключении/подключении любого монитора такое же, как и раньше, но нередко случается, что всё просто забывается. ВСЕ окна из ВСЕХ рабочих пространств перемещаются в первое рабочее пространство и на средний монитор, и мне приходится заново всё организовывать. Вы можете представить, как это раздражает.
РЕДАКТИРОВАТЬ: моя конфигурация Настройки -> Многозадачность:
– Рабочие пространства: “Фиксированное количество: 5”
– Мульти-монитор: “Рабочие пространства на всех дисплеях”
– Переключение приложений: “Включать приложения из всех рабочих пространств” и “Включать приложения со всех мониторов”
Мой первый вопрос: где хранится информация об организации окон? Может быть, я смогу создать сценарий для размещения “известных” программ/окон.
Второй вопрос: где находится код для управления этой организацией? Может быть, я могу помочь в решении этой проблемы.
Ответ или решение
Вопрос: Проблемы с разметкой многомониторной и многозадачной среды в Ubuntu 24.04
При работе с многомониторной системой и использованием нескольких рабочих пространств в Ubuntu 24.04 возникают проблемы. Ваша ситуация описывает сценарий, когда после отключения и повторного подключения одного из мониторов ваша система иногда не запоминает предыдущие позиции окон. Все окна из всех рабочих пространств перемещаются на первый рабочий экран, и вам приходится вручную возвращать всё на свои места. Это, бесспорно, вызывает неудобства.
Ответ:
Где хранится информация о расположении окон?
В системе Ubuntu (особенно в версиях на базе GNOME и Wayland) информация о размещении окон обычно не сохраняется таким образом, чтобы пользователь мог её напрямую редактировать или восстанавливать после перезагрузки или отключения монитора. Это связано с тем, что Wayland и руководители окон в GNOME ориентированы на динамическое управление окнами, вместо привязки их к фиксированным позициям.
Однако GNOME пытается восстановить расположение окон при изменении конфигурации мониторов. Эти данные обычно хранятся в сессии GNOME, но могут теряться при сбое или при сложных изменениях в структуре окон.
Как можно автоматизировать настройку окон?
Можно использовать скрипты для автоматизации процесса расположения окон. Одним из инструментов является devilspie2
, который позволяет создавать правила для размещения окон в определённых позициях и на конкретных рабочих столах. Также, использование wmctrl
может быть полезным для управления окнами через сценарии оболочки.
Создание скриптов может включать в себя такие шаги:
- Определение окон: Использование
xprop
иwmctrl
для получения информации об открытых окнах. - Создание правил: Согласование своих потребностей с функциональностью
devilspie2
, чтобы при запуске системы или изменении конфигурации монитора окна автоматически перемещались в требуемое положение. - Использование автозапуска: Размещайте ваш скрипт в автозапускаемых приложениях так, чтобы он активировался при запуске системы или изменении сетапа мониторов.
Где находится код, управляющий расположением окон?
Источник ваших проблем может лежать в интеграции GNOME с Wayland или в драйвере вашей видеокарты (Nvidia, в вашем случае). Код, который управляет непосредственно размещением окон, разбросан между композитором окон (Mutter для GNOME) и самим GNOME Shell.
Если вы хотите внести вклад в решение проблемы, исходный код GNOME и Mutter доступен на GitLab. Исследование и корректировка в этих репозиториях требует глубокого понимания C и работы оконных композиторев:
- Исходный код GNOME и Mutter: можно найти на GitLab GNOME.
- Взаимодействие с сообществом: создайте обращение (issue) в репозитории или обсуждайте ваше решение на форумах разработчиков GNOME.
ЗАКЛЮЧЕНИЕ:
Работа в сложных многомониторных средах требует корректной конфигурации и понимания внутренних аспектов системы. Вы можете улучшить свой опыт, автоматизируя процессы с помощью существующих инструментов или предлагая изменения в исходном коде GNOME.
Оптимизация этих аспектов позволит не только решить вашу проблему, но и сделать вклад в улучшение мультизадачности в будущих версиях Ubuntu.