Как заблокировать рабочие области, отображаемые в Wayland, или запретить другим приложениям изменять рабочую область?

Как заблокировать рабочие области, отображаемые в Wayland, или запретить другим приложениям изменять рабочую область?

Обратите внимание, что этот вопрос совершенно отличается от

Потому что этот вопрос НЕ о том, как

  • открыть программу на текущем рабочем пространстве. Я знаю это.
  • открыть программу на другом рабочем пространстве. Я знаю это.
  • предотвратить перемещение окна в какое-либо рабочее пространство. Я знаю, как с этим справиться.
  • запретить переключение рабочего пространства при нажатии на значок или использовать переключатель задач.

Этот вопрос также НЕ о хроме. Chromium — это всего лишь самое известное приложение из многих приложений, которые ведут себя некорректно.

Вопрос в том, как запретить Wayland переключать текущее рабочее пространство, когда другое приложение пытается переключить фокус на себя (например, Chromium или другие) без прямого взаимодействия с пользователем. Это что-то вроде кражи фокуса, что достаточно раздражает, когда происходит в текущем рабочем пространстве.

Если я выбрал рабочее пространство с помощью Compiz, это рабочее пространство нельзя менять, пока я не выберу другое, независимо от того, что другие приложения пытаются делать в фоновом режиме.

Есть ли, возможно, способ сказать Wayland подчиняться только команде переключения из определенных приложений, таких как Compiz и wmctrl? Возможно, этого можно достичь с помощью какого-то dbusфильтра (даже если я знаю, как взломать код модулей ядра Linux, таких как CIFS или ZFS, под свои нужды, я пока не разбираюсь dbusни в Wayland, ни в SystemD, извините). LD_PRELOAD? Какой-нибудь (существующий) брандмауэр протокола X0? Что-нибудь?

Мой текущий обходной путь — запустить

while sleep .01; do DISPLAY=:0 wmctrl -s 2; done

Таким образом, если Chromium (или одно из других приложений) переключает рабочее пространство, Wayland немедленно переключается обратно на то, над которым я работаю. Однако это минутное постоянное мерцание экрана из-за этого переключения туда-сюда раздражает. Также иногда теряется фокус мыши (или происходит что-то совершенно иное, например, перетаскивание чего-то не на тот рабочий стол из-за выявленного состояния гонки) из-за мерцания.

Обратите внимание, что Chromium — самый раздражающий. Большинство других приложений просто переключают рабочее пространство один раз. Однако Chromium, по-видимому, делает это для каждого окна, которое он открывает при запуске. Когда у меня открыто несколько тысяч окон, весь запуск Chrome занимает несколько минут (на моем компьютере достаточно оперативной памяти и процессора, так что это не проблема подкачки), и во время запуска он постоянно пытается переключить рабочее пространство, пока не будет готов. Однако вопрос также в том, как помешать FireFox, IDE и другим окнам перехватывать фокус таким образом.

Обратите внимание, что этот вопрос не о краже фокуса как таковой. Речь идет только о краже фокуса путем переключения рабочего пространства, поскольку это нечто совершенно иное, чем обычное наблюдаемое кража фокуса.

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

Все, что мне нужно, — это «закрепиться» в текущем рабочем пространстве так, чтобы ничто другое не могло его изменить, пока я не решу перейти в другое рабочее пространство.


Некоторые мысли по этому поводу:

Wayland представляет только определенную часть (рабочую область) гораздо большего холста (который содержит все рабочие области). Таким образом, изменение рабочей области — это просто изменение начала отсчета, в котором отображается холст. А дисплеи — это области относительно этого начала. (Конечно, происходит немного больше, поскольку фокус ввода также должен быть перемещен.)

AFAICS, должно быть легко предотвратить перемещение источника (и, таким образом, предотвратить изменение фокуса). Это именно то, что я хочу архивировать. Возможно, это уже встроено где-то в Wayland. Или это можно взломать в коде, что-то вроде брандмауэра, который предотвращает изменение источника неавторизованными приложениями. Это то, что я мог бы реализовать, если бы смог найти правильное место, где это изменение источника происходит в Wayland.

Но прежде чем углубляться в это (что, вероятно, займет несколько дней), я хотел бы узнать, есть ли какой-то лучший или стандартный способ это архивировать.


И последнее замечание:

Мне нужно использовать Ubuntu и Wayland, так как мои настройки дисплея / оборудования / стек HWE не поддерживаются в простом X11. (Он не может правильно управлять одним из моих мониторов. Обратите внимание, что у меня, скорее всего, есть возможности найти эту ошибку и исправить ее, однако у меня нет на это времени.)

Так что смена Wayland мне не помогает. Конечно, я использую LTS, поэтому Ubuntu 22.04 также установлена, так что смена ОС тоже не помогает.

Связанный контент