Un shell graphique natif pour SSH
(probablymarcus.com)- Si les serveurs et les appareils edge fournissaient un shell graphique basé sur le navigateur au lieu d’exposer seulement un terminal, les apps distantes pourraient être utilisées plus naturellement depuis d’autres appareils
- Ce shell fournit un écran d’accueil des apps et une API de résolution d’URL entre apps, afin de créer des flux où fichiers ou ressources sont transmis à l’app appropriée
- Les apps fournissent leur UI via un petit serveur HTTP, mais ne fonctionnent pas comme des serveurs web publics ordinaires : elles agissent comme des serveurs privés, principalement prévus pour un accès via SSH ou local
- Le chiffrement peut être confié à la couche SSH au lieu d’être implémenté directement par chaque app, ce qui permet à chaque serveur d’app de conserver une structure simple avec peu de dépendances
- Lewis a pour cela conçu Outer Loop comme navigateur SSH et publié l’open source Outer Shell, en pensant à la fois aux apps HTML et aux apps natives outerframe
Un shell graphique fonctionnant au-dessus de SSH
- Le navigateur web est déjà un exemple bien établi du flux dans lequel un appareil, le serveur, fournit une expérience à un autre appareil, le client
- En appliquant la même approche aux serveurs et aux appareils edge, il devient possible d’utiliser des apps graphiques même dans un environnement distant, plutôt que des apps en terminal
- Le shell fournit un écran d’accueil pour les apps, et chaque app sert une interface utilisateur web via un petit serveur HTTP
- L’API du shell permet aux apps de trouver leurs URL respectives et crée des connexions entre apps
- Par exemple, si une app s’enregistre comme éditeur de texte, un double-clic sur un fichier texte dans une autre app peut l’ouvrir dans cette app d’édition
- Une app peut être une app web existante basée sur HTML, ou une app native outerframe
Mode d’implémentation et projets publiés
- Le serveur HTTP d’une app fonctionne généralement comme un serveur privé, inaccessible depuis d’autres appareils du réseau
- L’utilisateur l’emploie via SSH ou en local
- Contrairement à la plupart des outils serveur existants basés sur le web, il utilise principalement des fichiers de socket de domaine Unix plutôt que des ports localhost
- Les fichiers de socket de domaine Unix sont similaires aux ports, mais existent dans le système de fichiers et disposent de permissions utilisateur explicites
- Chaque serveur HTTP n’a pas besoin de gérer lui-même le chiffrement
- Le chiffrement est pris en charge par la couche SSH
- Cela permet à chaque serveur d’app de rester très simple, sans dépendances
- Outer Loop a été conçu comme un navigateur SSH pour ce type de shell graphique
- L’open source Outer Shell a été publié
- La documentation associée est proposée en trois volets
- Outer Loop : fonctionnement du navigateur
- Outer Shell : API d’Outer Shell et ajout d’apps
- Outerframe : fonctionnement des apps natives
- Dans un navigateur, des fonctionnalités comme la connexion à des sockets Unix étaient considérées comme très spécialisées, mais combinées à des capacités comme la prise en charge de SSH et de sudo, elles ouvrent de nouvelles possibilités techniques
- Des apps web individuelles de type serveur, comme Jupyter et Tensorboard, sont apparues, mais chacune utilise un protocole de sécurité ad hoc, et aucune méthode commune pour les transmettre « correctement » ne s’est imposée
- Avec l’IA qui peut désormais aider à écrire du code, il est devenu pratique pour chaque app de disposer d’une base de code propre à chaque plateforme cible ; l’architecture web proposée paraît naturelle : HTML pour la lecture et les apps légères, et des apps natives adaptées à la plateforme pour les apps de travail
1 commentaires
Avis de Hacker News
C’est assez frustrant de voir autant de réactions dénigrer cette idée. Une grande partie du lectorat de HN semble encore prisonnière d’un suprémacisme TUI, avec peu d’intérêt pour les GUI
Deux points sont essentiels. Les TUI ne sont pas intrinsèquement supérieures aux GUI, et SSH, en tant que couche de transport, devrait prendre en charge non seulement le transfert de pty, c’est-à-dire la couche d’affichage TUI, mais aussi une couche d’affichage GUI
En réalité, ces deux points existaient déjà dans UNIX il y a 30 ans, avec le protocole X et la solution
ssh -X. Mais X n’a pas gagné, et l’avenir où l’on se connecte à une machine distante avecssh -Xpuis où l’on lancegnome-control-centerpour voir apparaître une fenêtre de réglages permettant de configurer l’ordinateur distant n’est jamais arrivé. Si vous pensez que ça marche, essayez vous-même : l’expérience est désastreuseCe besoin a pourtant perduré, et des apps comme Jupyter Notebook ont commencé à être développées sous forme de serveurs web. Le format documentaire du web, son styling et son langage de script côté client sont devenus, malgré tous leurs défauts, utilisables comme couche d’affichage pour des apps interactives ; et comme le web partait à l’origine de documents distants, la transparence réseau y est intégrée
Quand on regarde les apps Electron, il faut reconnaître que la stack HTML/CSS/JS occupe aussi une position dominante dans les apps desktop, et il est naturel de l’exploiter comme couche d’affichage d’apps distantes via SSH. Ce projet semble aller dans ce sens
Comme X, une app Electron sépare serveur d’affichage et client, appelés respectivement “renderer process” et “main process”, qui communiquent par IPC. En théorie, avec un moyen de transport IPC adapté, on pourrait exécuter le main process et le renderer process sur des machines différentes ; cela ne paraît pas très différent de cette idée
ssh -Xfonctionne bien selon le toolkit utilisé et la distance/latence. Par exemple, Gtk n’est pas idéal à cause de son pipeline de renduQuand la distance et la latence deviennent suffisamment importantes, il faut réfléchir à ce que l’on présente à l’utilisateur. Quelle que soit le média, on ne peut pas échapper aux limites physiques. Tout outil qui promet un accès graphique distant doit être conçu en tenant compte de la latence. Si vim fonctionne bien même avec de la latence, c’est essentiellement parce qu’il empile les commandes dans une file avant de les envoyer
waypipe. Donc cet avenir n’est pas mortgnome-control-centersur une machine distante viassh -Xpour configurer un serveur ne soit jamais arrivé. Configurer un serveur avec une GUI est une manière détestable de faire, et j’espère qu’elle restera cantonnée au monde WindowsCela ressemble à une solution en quête d’un problème, comme il y en a déjà eu beaucoup par le passé. La citation ci-dessous semble bien correspondre à cette tentative
« Ceux qui ne comprennent pas Unix sont condamnés à le réinventer, en moins bien. » ~Henry Spencer
Presque toutes les machines destinées aux développeurs ont un serveur SSH installé et accessible
Pourquoi un terminal SSH devrait-il ressembler à une cochonnerie en texte seul façon années 1960 ? Pourquoi les TUI devraient-elles être la meilleure chose à faire transiter par SSH ? Pourquoi ne peut-on pas regarder un film en 4K dans le terminal, ou parcourir le web avec un pinch-to-zoom ?
L’idée de visualiser des répertoires Linux via SSH avec des composants d’UI natifs, par exemple, semble intéressante
Cela dit, une partie du problème semble déjà résolue autrement, comme avec un montage
sshfsCela me rappelle un ancien article sur les thermostats programmables. Il expliquait qu’ils sont assez puissants pour être configurés très finement, mais horribles à utiliser pour la plupart des gens. L’idée était proche de ceci : “les gens ne veulent pas apprendre votre système abscons, ils veulent les bénéfices que ce système promet”. Une bonne UI doit savoir minimiser cet écart
L’idée de séparer le frontend et le backend des apps graphiques est bonne. Mais difficile de dire que c’est nouveau ; peut-être que quelque chose m’échappe
Il semble ne pas connaître
X11Forwarding yesni leshtml5 web appDes choses comme la capacité d’un navigateur à se connecter à un socket Unix ont été rejetées au motif qu’il s’agit d’une fonctionnalité extrêmement de niche
Ce n’est pas implémenté pour des raisons de sécurité. Du moins pour les sockets Unix bruts ; d’autres ports limités à WebSocket ou HTTP sont possibles
On ne peut pas autoriser le navigateur à se connecter à n’importe quel socket. Beaucoup de sockets ne souhaitent explicitement pas de connexions depuis un navigateur, ou ne sont même pas conçus en tenant compte du fait qu’un navigateur pourrait s’y connecter
Il faudrait donc ajouter une sorte de liste d’autorisation, ce qui rendrait la fonctionnalité trop complexe pour un cas aussi niche
Je pense donc que le point central était bien son caractère de niche
À noter qu’Outer Loop ajoute une liste d’autorisation : https://outerloop.sh/unix-domain-sockets/
J’essaie de comprendre comment Outer Shell fonctionne ici. Sur le site, la motivation est présentée ainsi
Les apps comme Jupyter ou TensorBoard, lorsqu’elles tournent sur un serveur distant, ne sont généralement pas visibles dans un navigateur web standard. Il serait très dangereux de laisser tout Internet accéder à ces apps. À la place, elles tournent sur un port local du serveur, auquel mon ordinateur ne peut pas accéder directement
Traditionnellement, pour y accéder, il fallait ouvrir un nouveau terminal et exécuter des commandes comme
ssh -L 24601:localhost:8889 mrcslws@lambda4.mycompany.com &,ssh -L 24602:localhost:6006 mrcslws@lambda4.mycompany.com &, dit-ilC’est bien ça ? En général, on n’utilise ce genre de forwarding SSH que pendant le prototypage, et au moment du déploiement on crée plutôt un site web du type
myjupyternotebook.com, avec une authentification pour empêcher les autres d’y accéder, non ? L’authentification HTTP Basic n’est pas non plus une catastropheSi l’on veut exposer publiquement via SSH plutôt que via HTTP, il existe aussi d’autres options, comme le placer derrière un VPN ou un tunnel
Outer Loop est très chouette, mais je ne comprends pas bien pourquoi c’est nécessaire. J’ai l’impression de passer à côté de quelque chose, donc j’aimerais qu’on m’aide à comprendre pourquoi cela a été créé
Je suis plutôt du côté des usages comme les expériences de deep learning, l’optimisation de kernels GPU ou le développement robotique. Un robot n’est qu’un serveur qui bouge, et dans ces cas-là on utilise explicitement un ordinateur distant
Pour les gens de ce groupe, j’ai l’impression que cet outil paraîtra plus intuitif que le flux que tu proposes. Cela dit, je projette peut-être ma propre façon de voir
Pour moi, cela ressemble à quelque chose de fondamental qui pourrait exister. Une sorte de système d’exploitation graphique remote-first
ssh -D 4711 -q -C -N user@hostAvec ça,
localhost:4711devient un proxy SOCKS5 que vous pouvez configurer dans le navigateurBien sûr, un VPN WireGuard est préférable. Surtout, SSH multiplexe sur une seule connexion TCP, donc si un paquet est perdu, tout le trafic forwardé est bloqué jusqu’à sa retransmission : c’est du head-of-line blocking
L’auteur semble ne jamais avoir entendu parler de Cockpit
Les choses qu’il décrit comme « inexistantes » ou « nouvelles » sont dans Cockpit depuis plus de dix ans. Cela inclut les connexions à des serveurs web basées sur des sockets, la séparation backend-frontend des apps serveur, et même l’idée d’une console serveur avec accès au shell
À la question « n’est-il pas étrange que cela n’existe pas encore ? », je répondrais non. Parce que cela existe depuis longtemps
Sincèrement,
La police des guidelines HN :-)
https://news.ycombinator.com/newsguidelines.html
Super article. Je vais le mettre en favori pour mes recherches
La fonctionnalité « clickity clackity » de mon terminal [0] est attachée à la machine locale, donc dès qu’on passe en distant, l’aspect graphique disparaît
Cela commence à changer petit à petit grâce à la relecture hors ligne [1] : une GUI native et une TUI fonctionnent ensemble pour ouvrir des possibilités comme le retour en arrière. Mais il reste beaucoup de chemin, et c’est agréable de voir d’autres personnes expérimenter sérieusement. Le terminal est un domaine largement négligé
[0] https://terminal.click
[1] https://terminal.click/posts/2026/06/tui-stability/#:~:text=...
Les gens habitués au terminal oublient à quel point SSH est hostile pour quelqu’un qui ne l’a pas appris à l’université
Si cela peut abaisser la barrière à l’entrée pour de petites équipes qui gèrent un VPS sans recruter une personne dédiée à la plateforme, ce sera une réussite. Je me demande toutefois comment ils gèrent les clés et les jump hosts
Impressionnant. On va clairement dans la bonne direction
La couche de séparation entre le front et le back doit être découpée au plus petit « morceau » possible
Beaucoup de gens sarcastiques ici comprendraient s’ils « ressentaient » eux-mêmes la latence et le surcoût supplémentaires. Il n’y a pas eu assez de réflexion pour découper les données avec soin selon chaque cas d’usage
Plus encore, dans la démo, l’app
top, dont il était dit qu’elle « génère de la charge en faisant souvent bouger la configuration », aurait selon moi dû faire davantage de rendu côté client via JIT. Ainsi, l’information échangée entre le Pi et le client aurait été réduite à quelque chose comme des deltas compressés de la sortie depsIl ne faut pas faire ça. Il existe de nombreuses et très bonnes raisons de sécurité, anciennes, ainsi que des raisons d’isolation du plan de contrôle web, pour lesquelles on n’autorise pas les sockets générales dans le navigateur
L’analogie mécanique la plus proche, c’est pourquoi les ATV à trois roues sont une mauvaise idée
Les sockets doivent être bloquées par défaut et ne s’ouvrir qu’après avoir été explicitement ajoutées à une liste d’autorisation côté serveur
Il faut une vraie prise en compte de sudo, afin qu’il soit impossible d’atteindre des sockets root sans le mot de passe sudo. Cette fonctionnalité est importante parce que, sinon, on crée une incitation à faire tourner des backends root sur des sockets accessibles à l’utilisateur
Plus de détails ici : https://outerloop.sh/security/