Pop Shell est une couche pilotée par clavier pour GNOME Shell qui permet une navigation et une gestion rapides et judicieuses des fenêtres. La fonctionnalité principale de Pop Shell est l'ajout d'une gestion avancée des fenêtres en mosaïque, une fonctionnalité très recherchée au sein de notre communauté. Pour beaucoup – y compris nous-mêmes – i3wm est devenu le principal concurrent du bureau GNOME.
La gestion des fenêtres en mosaïque dans GNOME est pratiquement inexistante, ce qui rend l'interaction avec le bureau difficile lorsque vos besoins dépassent ceux de deux fenêtres à un moment donné. Heureusement, GNOME Shell est un bureau extensible doté de bases permettant d'implémenter un gestionnaire de fenêtres en mosaïque au-dessus du bureau.
Par conséquent, nous voyons ici une opportunité d'améliorer la convivialité du bureau GNOME pour mieux répondre aux besoins de notre communauté avec Pop Shell. La gestion avancée des fenêtres en mosaïque est indispensable pour le bureau, c'est pourquoi nous avons fusionné la gestion des fenêtres en mosaïque de type i3 avec le bureau GNOME pour le meilleur des deux mondes.
La proposition : intégration possible en amont dans GNOME
Le problème : pourquoi nous en avons besoin dans GNOME
Installation : Pour ceux qui souhaitent l'installer sur leur distribution
La solution :
Fonctionnalités partagées : comportements partagés entre les modes d'empilement et de mosaïque automatique
Mode flottant : Comportements spécifiques au mode flottant
Mode Mosaïque : Comportements spécifiques au mode Mosaïque automatique
Développeurs : Guide pour démarrer le développement
Une proposition d'intégration des fonctionnalités de gestion des fenêtres en mosaïque de Pop Shell dans GNOME est actuellement en cours de développement. Il sera créé en tant que problème GitLab sur GNOME Shell pour une discussion future, une fois que nous aurons investi notre temps dans la production d'un prototype fonctionnel et appris ce qui fonctionne et ce qui ne fonctionne pas dans la pratique.
Idéalement, les fonctionnalités explorées dans Pop Shell seront disponibles pour tout environnement utilisant Mutter, étendant ainsi considérablement la capacité de mosaïque à demi-moniteur actuellement présente. En commençant comme une extension shell, toute personne utilisant GNOME Shell peut l'installer sur son système, sans avoir à installer un fork de GNOME spécifique à Pop sur son système.
Alors, pourquoi est-ce un problème pour nous, et pourquoi tant de nos utilisateurs passent-ils à i3wm ?
GNOME ne prend actuellement en charge que le semi-mosaïque, qui consiste à afficher en mosaïque une fenêtre d'un côté de l'écran et une autre fenêtre de l'autre côté de l'écran. Si vous avez plus de deux fenêtres, il est prévu de les placer sur des espaces de travail, des moniteurs séparés ou d'alterner entre les fenêtres avec Alt
+ Tab
.
Cela a tendance à fonctionner correctement si vous ne disposez que d’une petite poignée d’applications. Si vous avez besoin de plus de deux fenêtres à la fois sur un écran, votre seule option consiste à faire glisser manuellement les fenêtres en position et à les redimensionner pour qu'elles s'ajustent les unes aux autres - un processus très long qui pourrait facilement être automatisé et rationalisé.
Supposons que vous soyez un propriétaire chanceux – ou peut-être malchanceux – d'un écran ultra-large. Une fenêtre agrandie aura une grande partie de ses préférences et de ses contrôles dispersés dans les coins les plus à gauche et à l’extrême droite. L'application peut placer un panneau avec des boutons à l'extrême gauche, tandis que d'autres boutons sont déplacés vers le centre éloigné ou vers l'extrême droite.
Dans ce scénario, la mosaïque en demi-mosaïque signifie que chaque fenêtre sera aussi grande qu'un écran entier de 2 560 x 1 440 ou 4K. Dans les deux cas, à des tailles aussi extrêmes, la souris devient complètement inutile – et les applications deviennent insupportables à utiliser – en pratique.
Alors que vous luttez contre le gestionnaire de fenêtres, il devient rapidement clair que toute tentative de gérer les fenêtres de manière traditionnelle par empilement (où vous devez déplacer manuellement les fenêtres en place, puis les redimensionner manuellement) est vaine. Les humains sont loin d’être aussi précis ou aussi rapides que les algorithmes pour aligner les fenêtres les unes à côté des autres sur un écran.
Le bureau GNOME est livré avec de nombreuses fonctionnalités d'intégration de bureau utiles, qui sont perdues lors du passage à une session i3wm. Bien qu'il soit possible de connecter divers services de session GNOME à une session i3wm, une grande partie de l'expérience du bureau GNOME est toujours perdue au cours du processus. La présentation de l'application, le panneau GNOME et les extensions GNOME.
Pire encore, de nombreux utilisateurs ne sont absolument pas familiers avec les gestionnaires de fenêtres en mosaïque et ne se sentiront peut-être jamais à l'aise de passer à un seul. En proposant la gestion des fenêtres en mosaïque comme fonctionnalité pouvant être activée, nous pouvons permettre à l'utilisateur d'acquérir facilement un meilleur contrôle sur son bureau, de sorte que l'idée de la gestion des fenêtres en mosaïque devienne soudainement accessible.
Il y a en outre ceux qui souhaitent bénéficier de l'expérience traditionnelle de gestion des fenêtres empilées, mais ils souhaitent également pouvoir opter pour une gestion avancée des fenêtres en mosaïque. Il devrait donc être possible d'opter pour la gestion des fenêtres en mosaïque si nécessaire. D'autres systèmes d'exploitation ont combiné avec succès les fonctionnalités de gestion de fenêtres en mosaïque avec l'expérience traditionnelle de gestion de fenêtres empilées, et nous pensons que nous pouvons également le faire avec GNOME.
Utilisez la branche correspondant à votre version de GNOME Shell ( git checkout branch_name
) :
GNOME 3.36 à 41 : utilisez la branche master_focal
.
GNOME 42 à 44 : utilisez la branche master_jammy
.
GNOME 45 : utilisez la branche master_mantic
.
GNOME 46+ : utilisez la branche master_noble
.
GNU Make et TypeScript sont également requis pour construire le projet.
Le bon fonctionnement du shell nécessite la modification des raccourcis clavier par défaut de GNOME. Pour une installation locale, exécutez make local-install
.
Si vous souhaitez désinstaller l'extension, vous pouvez appeler make uninstall
, puis ouvrir le panneau "Raccourcis clavier" dans les paramètres GNOME pour sélectionner le bouton "Réinitialiser tout..." dans la barre d'en-tête.
Notez que si vous emballez pour votre distribution Linux, de nombreuses fonctionnalités de Pop Shell ne fonctionneront pas immédiatement car elles nécessitent des modifications des raccourcis clavier par défaut de GNOME. Une installation locale est nécessaire si vous n'emballez pas votre session GNOME avec ces raccourcis clavier par défaut non définis ou modifiés.
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 (en utilisant Yay comme assistant AUR) :
yay -S gnome-shell-extension-pop-shell
Pour la version binaire précompilée : yay -S gnome-shell-extension-pop-shell-bin
Pour la version du référentiel GitHub : yay -S gnome-shell-extension-pop-shell-git
Fonctionnalités partagées entre les modes d’empilement et de mosaïque automatique.
Ceux-ci sont essentiels à de nombreux raccourcis utilisés par les gestionnaires de fenêtres en mosaïque. Ce document fera désormais référence à ces clés sous le nom de <Direction>
, qui sont par défaut les clés suivantes :
Left
ou h
Down
ou j
Up
ou k
Right
ou l
Super
+ q
: Fermer la fenêtre
Super
+ m
: Maximiser la fenêtre focalisée
Super
+ ,
: Réduire la fenêtre focalisée
Super
+ Esc
: Écran de verrouillage
Super
+ f
: Fichiers
Super
+ e
: Email
Super
+ b
: Navigateur Web
Super
+ t
: Borne
Ce mode est activé avec
Super
+Return
.
Le mode de gestion des fenêtres active un contrôle supplémentaire du clavier sur la taille et l'emplacement de la fenêtre actuellement ciblée. Le comportement de ce mode change légèrement selon que vous êtes en mode mosaïque automatique ou en mode d'empilement par défaut. Dans le mode par défaut, une superposition s'affiche alignée sur une grille, qui représente un emplacement futur possible et la taille de votre fenêtre ciblée. Ce comportement change légèrement en mode de mosaïque automatique, où les redimensionnements sont effectués immédiatement et les superpositions ne sont affichées que lors du changement de fenêtre.
L'activation de cette option active les comportements suivants :
<Direction>
En mode par défaut, cela déplacera la superposition affichée en fonction d'une grille
En mode mosaïque automatique, cela redimensionnera la fenêtre
Shift
+ <Direction>
En mode par défaut, cela redimensionnera la superposition
En mode mosaïque automatique, cela ne fera rien
Ctrl
+ <Direction>
Sélectionne une fenêtre dans la direction donnée de la superposition
Lorsque vous appuyez sur Return
, les positions des fenêtres seront inversées
Shift
+ Ctrl
+ <Direction>
En mode mosaïque automatique, cela se redimensionne dans la direction opposée
O
: Bascule entre la mosaïque horizontale et verticale en mode mosaïque automatique
~
: Bascule entre flottant et mosaïque en mode mosaïque automatique
Return
: Applique les modifications qui ont été demandées
Esc
: annule toutes les modifications demandées
Lorsque vous n'êtes pas en mode de gestion des fenêtres, appuyer sur Super
+ <Direction>
déplacera le focus de la fenêtre vers une fenêtre dans la direction donnée. Ceci est calculé en fonction de la distance entre le centre du côté de la fenêtre focalisée à partir duquel la fenêtre est décalée et le côté opposé des fenêtres qui l'entourent.
Basculer le focus vers la gauche calculera à partir du centre du côté est de la fenêtre focalisée vers le centre du côté ouest de toutes les autres fenêtres. La fenêtre la plus éloignée est la fenêtre que nous choisissons.
Pop Shell fournit un lanceur intégré qui s'interface directement avec notre service de lanceur pop. JSON IPC est utilisé pour communiquer entre le shell et le lanceur de manière asynchrone. Cette fonctionnalité a été séparée du shell en raison de problèmes de performances et de maintenabilité. Le nouveau lanceur est écrit en Rust et entièrement asynchrone. Le lanceur possède des fonctionnalités étendues qui seraient utiles pour implémenter des lanceurs de bureau au-delà d’une extension shell.
Les espaces améliorent l'esthétique des fenêtres carrelées et permettent de saisir plus facilement le bord d'une fenêtre spécifique. Nous avons décidé d'ajouter la prise en charge des espaces internes et externes et avons rendu ces paramètres configurables dans le menu contextuel de l'extension.
Les fenêtres avec des décorations côté serveur peuvent avoir leurs barres de titre complètement masquées, ce qui génère un espace d'écran supplémentaire pour vos applications et un environnement visuellement plus propre. Cette fonctionnalité peut être activée dans le menu contextuel de l'extension. Les fenêtres peuvent être déplacées avec la souris en maintenant Super
lorsque vous cliquez et faites glisser une fenêtre vers un autre emplacement, ou en utilisant les raccourcis clavier natifs du pop-shell. Les fenêtres peuvent être fermées en appuyant sur Super
+ Q
et agrandies avec Super
+ M
.
Il s'agit du mode par défaut de Pop Shell, qui combine la gestion traditionnelle des fenêtres d'empilement avec des fonctionnalités facultatives de gestion des fenêtres en mosaïque.
Dans ce mode, les affichages sont divisés en une grille de colonnes et de lignes. Lorsque vous passez en mode mosaïque, les fenêtres sont alignées sur cette grille au fur et à mesure de leur placement. Le nombre de lignes et de colonnes est configurable dans le menu contextuel de l'extension dans le panneau.
Une fonctionnalité facultative pour améliorer votre expérience de mosaïque est la possibilité d'aligner les fenêtres sur la grille lorsque vous utilisez votre souris pour les déplacer et les redimensionner. Cela offre la même précision que l'entrée en mode de gestion des fenêtres pour positionner une fenêtre avec votre clavier, mais avec la commodité et la familiarité d'une souris. Cette fonctionnalité peut être activée via le menu contextuel de l'extension.
Désactivé par défaut, ce mode gère les fenêtres à l'aide d'un gestionnaire de fenêtres en mosaïque arborescente. Semblable à i3, chaque nœud de l’arbre représente deux branches. Une branche peut être une fenêtre, un fork contenant plus de branches ou une pile contenant de nombreuses fenêtres. Chaque branche représente une zone d'espace rectangulaire sur l'écran et peut être subdivisée en créant plus de branches à l'intérieur d'une branche. Au fur et à mesure que les fenêtres sont créées, elles sont affectées à la fenêtre ou à la pile qui est activement focalisée, ce qui crée un nouveau fork sur une fenêtre ou attache la fenêtre à la pile focalisée. Au fur et à mesure que les fenêtres sont détruites, l'inverse est effectué pour compresser l'arborescence et réorganiser les fenêtres à leurs nouvelles dimensions.
Super
+ O
Bascule l'orientation de la mosaïque d'un fork
Super
+ G
Bascule une fenêtre entre flottante et mosaïque.
Voir #personnalisation de la liste flottante de la fenêtre
Il existe le fichier $XDG_CONFIG_HOME/pop-shell/config.json
dans lequel vous pouvez ajouter la structure suivante :
{ class: "<WM_CLASS String from xprop>", title: "<Optional Window Title>" }
Par exemple, en effectuant xprop
sur les paramètres GNOME (ou le centre de contrôle GNOME), les valeurs WM_CLASS sont gnome-control-center
et Gnome-control-center
. Utilisez la deuxième valeur (Gnome-control-center), que le pop-shell lira. Le champ title
est facultatif.
Après avoir appliqué les modifications dans config.json
, vous pouvez recharger la mosaïque si elle ne fonctionne pas du premier coup.
En raison de la nature risquée du JavaScript simple, cette extension GNOME Shell est écrite en TypeScript. En plus de fournir des classes et des interfaces de vérification de type statique et d'auto-documentation, il nous permet d'écrire une syntaxe JavaScript moderne tout en prenant en charge la génération de code pour des cibles plus anciennes.
Veuillez installer les éléments suivants en tant que dépendances lors du développement :
Node.js
LTS+ (v12+)
Dernier npm
(livré avec NodeJS)
npm install typescript@latest
Tout en travaillant sur le shell, vous pouvez recompiler, reconfigurer, réinstaller et redémarrer GNOME Shell avec journalisation avec make debug
. Notez que cela ne fonctionne de manière fiable que dans les sessions X11, puisque Wayland quittera l'écran de connexion au redémarrage du shell.
Discussions bienvenues sur Pop Chat
Sous licence GNU General Public License, version 3.0, (LICENSE ou https://www.gnu.org/licenses/gpl-3.0.en.html)
Toute contribution intentionnellement soumise pour inclusion dans le travail par vous doit être sous licence GNU GPLv3.