Pop Shell — это управляемый с клавиатуры слой для GNOME Shell, который обеспечивает быструю и разумную навигацию и управление окнами. Основной особенностью Pop Shell является добавление расширенного управления окнами плиток — функция, которая пользуется большим спросом в нашем сообществе. Для многих, в том числе и для нас, i3wm стал ведущим конкурентом рабочего стола GNOME.
Управление окнами плиток в GNOME практически отсутствует, что затрудняет взаимодействие с рабочим столом, когда ваши потребности превышают потребности в двух окнах одновременно. К счастью, GNOME Shell — это расширяемый рабочий стол с основами, позволяющими реализовать мозаичный оконный менеджер поверх рабочего стола.
Таким образом, мы видим здесь возможность повысить удобство использования рабочего стола GNOME, чтобы лучше удовлетворить потребности нашего сообщества с помощью Pop Shell. Расширенное управление тайловыми окнами является обязательным для рабочего стола, поэтому мы объединили управление тайловыми окнами в стиле i3 с рабочим столом GNOME, чтобы получить лучшее из обоих миров.
Предложение: возможность перехода на GNOME.
Проблема: зачем нам это нужно в GNOME
Установка: Для тех, кто хочет установить это на свой дистрибутив.
Решение:
Общие функции: поведение, общее для режимов укладки и автоматического мозаики.
Плавающий режим: поведение, характерное для плавающего режима.
Режим мозаики: поведение, характерное для режима автоматической мозаики.
Разработчики: Руководство по началу разработки
Предложение по интеграции функций управления тайловыми окнами из Pop Shell в GNOME в настоящее время находится в стадии разработки. Он будет создан как выпуск GitLab в GNOME Shell для будущего обсуждения, как только мы потратим время на создание работающего прототипа и узнаем, что работает, а что нет на практике.
В идеале функции, рассмотренные в Pop Shell, будут доступны для любой среды, использующей Mutter, что значительно расширяет существующие в настоящее время возможности разделения на пол-монитора. Начав как расширение оболочки, любой, кто использует GNOME Shell, может установить его в свою систему без необходимости устанавливать в свою систему специальную вилку GNOME для Pop.
Итак, почему для нас это проблема и почему так много наших пользователей переходят на i3wm?
GNOME в настоящее время поддерживает только половину плитки, при которой одно окно размещается на одной стороне экрана, а другое окно — на другой стороне экрана. Если у вас более двух окон, предполагается разместить их на отдельных рабочих пространствах, мониторах или чередовать окна с помощью Alt
+ Tab
.
Обычно это работает нормально, если у вас всего несколько приложений. Если вам нужно одновременно отображать более двух окон, единственный вариант — вручную перетащить окна на место и изменить их размер, чтобы они соответствовали друг другу — очень трудоемкий процесс, который можно легко автоматизировать и оптимизировать.
Предположим, вы счастливый (или, возможно, невезучий) обладатель сверхширокого дисплея. В развернутом окне большая часть настроек и элементов управления будет распределена по крайнему левому и крайнему правому углам. Приложение может разместить панель с кнопками в крайнем левом углу, в то время как другие кнопки будут смещены либо в дальний центр, либо в крайнее правое положение.
Полуплитка в этом сценарии означает, что каждое окно будет размером с весь дисплей с разрешением 2560x1440 или 4K. В любом случае, при таких экстремальных размерах мышь становится совершенно бесполезной, а приложениями становится невыносимо пользоваться на практике.
Когда вы боретесь с оконным менеджером, быстро становится ясно, что любая попытка управлять окнами традиционным способом, когда вам нужно вручную перемещать окна на место, а затем вручную изменять их размер, бесполезна. Люди далеко не так точны и быстры, как алгоритмы, в выравнивании окон рядом друг с другом на дисплее.
Рабочий стол GNOME имеет множество полезных функций интеграции с рабочим столом, которые теряются при переключении на сеанс i3wm. Хотя к сеансу i3wm можно подключить различные службы сеансов GNOME, большая часть возможностей рабочего стола GNOME при этом все равно теряется. Обзор приложения, панель GNOME и расширения GNOME.
Хуже того, многие пользователи совершенно незнакомы с тайловыми оконными менеджерами и могут никогда не чувствовать себя комфортно, переключаясь на один из них «холодно». Предлагая мозаичное управление окнами в качестве функции, которую можно включить, мы можем дать пользователю возможность легко получить больший контроль над своим рабочим столом, так что идея мозаичного управления окнами внезапно становится доступной.
Есть также те, кто хочет использовать традиционное управление окнами с накоплением, но они также хотят иметь возможность выбрать расширенное управление окнами с мозаикой. Таким образом, при необходимости должна быть возможность выбрать мозаичное управление окнами. Другие операционные системы успешно сочетают функции управления окнами мозаики с традиционным управлением окнами стекирования, и мы считаем, что можем сделать это и с GNOME.
Используйте ветку, соответствующую вашей версии оболочки GNOME ( git checkout branch_name
):
GNOME 3.36–41: используйте ветку master_focal
.
GNOME 42–44: используйте ветку master_jammy
.
GNOME 45: используйте ветку master_mantic
.
GNOME 46+: используйте ветку master_noble
.
Для сборки проекта также необходимы GNU Make и TypeScript.
Для правильной работы оболочки необходимо изменить сочетания клавиш GNOME по умолчанию. Для локальной установки запустите make local-install
.
Если вы хотите удалить расширение, вы можете вызвать make uninstall
, а затем открыть панель «Сочетания клавиш» в настройках GNOME и выбрать кнопку «Сбросить все..» в строке заголовка.
Обратите внимание: если вы собираете пакет для своего дистрибутива Linux, многие функции Pop Shell не будут работать «из коробки», поскольку требуют изменений в сочетаниях клавиш GNOME по умолчанию. Локальная установка необходима, если вы не упаковываете сеанс GNOME с отключенными или измененными сочетаниями клавиш по умолчанию.
Fedora: sudo dnf install gnome-shell-extension-pop-shell xprop
Gentoo: emerge gnome-shell-extension-pop-shell
openSUSE Tumbleweed: sudo zypper install gnome-shell-extension-pop-shell
Arch Linux (используя Yay в качестве помощника AUR):
yay -S gnome-shell-extension-pop-shell
Для предварительно скомпилированной двоичной версии: yay -S gnome-shell-extension-pop-shell-bin
Для версии репозитория GitHub: yay -S gnome-shell-extension-pop-shell-git
Функции, общие для режимов укладки и автоматической мозаики.
Они являются ключом ко многим сочетаниям клавиш, используемым плиточными оконными менеджерами. В дальнейшем в этом документе эти клавиши будут называться <Direction>
, что по умолчанию соответствует следующим клавишам:
Left
или h
Down
или j
Up
или k
Right
или l
Super
+ q
: закрыть окно.
Super
+ m
: развернуть сфокусированное окно.
Super
+ ,
: свернуть выделенное окно.
Super
+ Esc
: экран блокировки.
Super
+ f
: Файлы
Super
+ e
: электронная почта
Super
+ b
: веб-браузер
Super
+ t
: Терминал
Этот режим активируется с помощью
Super
+Return
.
Режим управления окнами активирует дополнительное управление с клавиатуры размером и расположением текущего окна. Поведение этого режима немного меняется в зависимости от того, находитесь ли вы в режиме автоматического разбиения или в режиме укладки по умолчанию. В режиме по умолчанию отображается наложение, привязанное к сетке, которая представляет возможное будущее местоположение и размер вашего сфокусированного окна. Это поведение немного меняется в режиме автоматического разбиения на плитки, где изменение размеров выполняется немедленно, а наложения отображаются только при переключении окон.
Активация этого параметра обеспечивает следующее поведение:
<Direction>
В режиме по умолчанию отображаемое наложение будет перемещаться по сетке.
В режиме автоматической плитки это изменит размер окна.
Shift
+ <Direction>
В режиме по умолчанию это изменит размер наложения.
В режиме автоматической плитки это ничего не даст.
Ctrl
+ <Direction>
Выбирает окно в заданном направлении наложения
При нажатии клавиши Return
положения окон меняются местами.
Shift
+ Ctrl
+ <Direction>
В режиме автоматического разбиения размер изменяется в противоположном направлении.
O
: переключение между горизонтальным и вертикальным расположением мозаики в режиме автоматической мозаики.
~
: переключение между плавающим и мозаичным режимом в режиме автоматической мозаики.
Return
: Применяет запрошенные изменения.
Esc
: Отменяет любые запрошенные изменения.
Если вы не находитесь в режиме управления окнами, нажатие Super
+ <Direction>
переместит фокус окна на окно в заданном направлении. Оно рассчитывается на основе расстояния между центром стороны сфокусированного окна, от которой окно смещается, и противоположной стороной окружающих его окон.
При переключении фокуса влево расчет будет осуществляться от центра восточной стороны сфокусированного окна до центра западной стороны всех остальных окон. Мы выбираем окно с наименьшим расстоянием.
Pop Shell предоставляет интегрированную программу запуска, которая напрямую взаимодействует с нашей службой запуска всплывающих окон. JSON IPC используется для асинхронной связи между оболочкой и программой запуска. Эта функциональность была отделена от оболочки из-за проблем с производительностью и удобством обслуживания. Новый лаунчер написан на Rust и полностью асинхронен. Средство запуска имеет обширные функции, которые будут полезны для реализации средств запуска на рабочем столе, выходящих за рамки расширения оболочки.
Зазоры улучшают эстетику кафельных окон и облегчают захват края конкретного окна. Мы решили добавить поддержку внутренних и внешних пробелов и сделали эти параметры настраиваемыми во всплывающем меню расширения.
В окнах с декорациями на стороне сервера строки заголовков могут быть полностью скрыты, что приводит к увеличению площади экрана для ваших приложений и визуально более чистой среде. Эту функцию можно включить во всплывающем меню расширения. Окна можно перемещать с помощью мыши, удерживая Super
при щелчке и перетаскивании окна в другое место, или используя сочетания клавиш, встроенные в pop-shell. Окна можно закрыть, нажав Super
+ Q
, и развернуть с помощью Super
+ M
Это режим по умолчанию для Pop Shell, который сочетает в себе традиционное управление окнами штабелирования с дополнительными функциями управления окнами мозаики.
В этом режиме дисплеи разделены на сетку столбцов и строк. При входе в режим плитки окна привязываются к этой сетке по мере их размещения. Количество строк и столбцов можно настроить во всплывающем меню расширения на панели.
Дополнительной функцией, улучшающей работу с плитками, является возможность привязывать окна к сетке при помощи мыши для их перемещения и изменения размера. Это обеспечивает ту же точность, что и вход в режим управления окнами для позиционирования окна с помощью клавиатуры, но с удобством и привычностью мыши. Эту функцию можно включить через всплывающее меню расширения.
По умолчанию этот режим отключен. Управление окнами осуществляется с помощью древовидного оконного менеджера. Как и в i3, каждый узел дерева представляет две ветви. Ветвью может быть окно, ответвление, содержащее несколько ветвей, или стек, содержащий множество окон. Каждая ветвь представляет собой прямоугольную область пространства на экране и может быть разделена путем создания дополнительных ветвей внутри ветки. При создании окон они назначаются активному окну или стеку, что создает новую вилку в окне или прикрепляет окно к сфокусированному стеку. Когда окна уничтожаются, выполняется обратное: дерево сжимается и окна переставляются в новые размеры.
Super
+ O
Переключает ориентацию плитки вилки
Super
+ G
Переключает окно между плавающим и мозаичным режимом.
См. #настройка плавающего списка окон.
Существует файл $XDG_CONFIG_HOME/pop-shell/config.json
, куда вы можете добавить следующую структуру:
{ class: "<WM_CLASS String from xprop>", title: "<Optional Window Title>" }
Например, при выполнении xprop
в настройках GNOME (или Центре управления GNOME) значения WM_CLASS — это gnome-control-center
и Gnome-control-center
. Используйте второе значение (Gnome-control-center), которое будет читать всплывающая оболочка. Поле title
является необязательным.
После применения изменений в config.json
вы можете перезагрузить тайлинг, если он не работает с первого раза.
Из-за рискованного характера простого JavaScript это расширение GNOME Shell написано на TypeScript. Помимо предоставления статической проверки типов и самодокументируемых классов и интерфейсов, он позволяет нам писать современный синтаксис JavaScript, одновременно поддерживая генерацию кода для старых целей.
Пожалуйста, установите следующее в качестве зависимостей при разработке:
Node.js
LTS+ (v12+)
Последняя версия npm
(поставляется с NodeJS)
npm install typescript@latest
Во время работы над оболочкой вы можете перекомпилировать, перенастроить, переустановить и перезапустить GNOME Shell с журналированием с помощью make debug
. Обратите внимание, что это надежно работает только в сеансах X11, поскольку Wayland выйдет на экран входа в систему при перезапуске оболочки.
Обсуждения приветствуются в Pop Chat
Лицензия GNU General Public License, версия 3.0 (ЛИЦЕНЗИЯ или https://www.gnu.org/licenses/gpl-3.0.en.html).
Любой вклад, намеренно представленный вами для включения в работу, должен быть лицензирован под лицензией GNU GPLv3.