Swaymsg не фокусирует окно

Вопрос или проблема

Я перешел с i3 на Wayland, и всё работает нормально, за исключением скрипта, который я написал некоторое время назад. Скрипт использует i3-msg для фокусировки на окне по его имени класса или идентификатору (из дерева i3-msg). Sway имеет команду swaymsg -t get_tree, которая делает то же самое, что и в i3. С помощью этой команды я могу извлечь id, app_id, window, pid или любые другие данные из командной строки с помощью команды

swaymsg -t get_tree | jq -c -r '..|try select(.focused == true) | [.id]' | tr -d "[]"

(В зависимости от атрибута, .id конечно будет заменен на правильный запрос).

Когда я пытаюсь использовать информацию о контейнере для фокусировки на конкретном окне с помощью

swaymsg for_window -r [id=10] focus

ничего не происходит, хотя я проверил, что id правильный. Из-за опции -r swaymsg даже выводит (флаг не влияет на тот факт, что ничего не произошло):

[
  {
    "success": true
  }
]

поэтому, кажется, нет никаких ошибок. Я пробовал множество параметров, из других источников я читал, что app_id кажется правильным выбором в Wayland при взаимодействии с окнами или контейнерами через swaymsg, но ничего не происходит. Я также пробовал команду с разными программами, такими как терминалы или браузеры, ничего не изменяется. В руководстве swaymsg также говорится, что нужно обернуть команду в кавычки, но это тоже не помогает. Поскольку я не получаю никаких ошибок, я в затруднении, как отладить.

Хотя пост уже довольно старый, кто-то другой может наткнуться на тот же вопрос, как и я.

По всей видимости, фокус не работает с for_window, а просто через <criteria> focus. Также, возможно, вам нужно использовать con_id вместо id. Из man 5 sway:

id может использоваться только с xwayland-видами

Так что полная команда будет:

swaymsg -r [con_id=10] focus

Ответ или решение

Проблема с фокусировкой окна в Sway через команду swaymsg является распространённой среди пользователей, которые переходят с i3 на Wayland. Ваш опыт, описанный в вопросе, поднимает несколько важных моментов, о которых полезно знать, чтобы успешно управлять окнами в Sway.

Описание проблемы

Вы стремитесь вызвать фокусировку окна через swaymsg с использованием идентификатора окна, аналогично тому, как это делалось в i3. Однако, при выполнении команды с использованием for_window, фокусировка некорректно работает. Вы проверили идентификатор, который получен из команды swaymsg -t get_tree, но, несмотря на успешное выполнение команды, фокусировка окна не происходит.

Разъяснение команды swaymsg

Команда swaymsg в Sway использует другой подход к управлению окнами по сравнению с i3. Важно понимать, что использование неправильного атрибута, такого как id, может привести к тому, что команда не будет выполняться корректно. На основе документации man 5 sway объясняется, что id может использоваться только с Xwayland версиями окон.

Решение проблемы

Согласно вашему наблюдению, использование con_id вместо id может быть ключом к успеху. Чтобы добиться нужного результата, правильная команда будет следующей:

swaymsg -r [con_id=10] focus

Объяснение параметров:

  • con_id: это коннектор для контейнера, который использует Sway для отображения окон и управления ими. По сравнению с id, con_id более универсален для применения в Wayland, так как работает в средеWayland без Xwayland.

  • -r: флаг, позволяющий волосы возвращать ответ в формате JSON, что позволяет проверять успешность выполнения команды.

Дополнительные рекомендации по отладке

  1. Проверка доступных окон: Вы можете выполнить swaymsg -t get_tree и внимательно изучить структуру, чтобы убедиться, что идентификатор окна, который вы используете, действительно существует и что оно находится в состоянии, когда его можно фокусировать.

  2. Использование других атрибутов: Если использование con_id не решает проблему, вы можете попробовать фокусироваться по другим критериям, таким как app_id или сочетание атрибутов.

  3. Логи Sway: Для более глубокого понимания проблемы можно включить более детализированные журналы Sway. Возможно, вы получите дополнительную информацию о том, почему фокусировка не работает.

  4. Тестирование с различными приложениями: Попробуйте выполнить ту же команду с разными приложениями (например, терминалами или браузерами), чтобы исключить возможность того, что особенность приложения мешает фокусировке.

Заключение

По сути, переход с i3 на Wayland через Sway требует переосмысления некоторых подходов к взаимодействию с окнами. Изменение идентификаторов и чёткое понимание различий между id, con_id и другими атрибутами станут залогом успешного использования Sway. Следуя указанным рекомендациям и используя правильные команды, вы сможете эффективно управлять фокусировкой окон в вашей среде Wayland.

Оцените материал
Добавить комментарий

Капча загружается...