Termal Desktop

Pourquoi un bureau par SSH.

Un environnement graphique sur un serveur distant ressemble à une solution en quête de problème. Voici l'argumentaire honnête - y compris les cas où vous devriez fermer cette page et garder votre terminal.

« Je peux déjà tout faire avec ssh et vim »

C'est vrai. Chacune des choses décrites sur cette page est possible avec une session SSH, un shell et un éditeur que vous connaissez déjà. Si vous administrez un seul serveur, que vim vous est naturel et que votre travail tient dans un terminal - ce n'est pas pour vous, et nous préférons que vous gardiez votre installation.

La couche graphique n'existe pas parce que le terminal serait insuffisant. Elle existe parce qu'un terminal est une interface séquentielle, et que certaines tâches ne le sont pas. Surveiller un transfert tout en lisant un journal tout en modifiant une configuration, c'est trois fenêtres dans n'importe quel bureau - et trois volets tmux plus beaucoup de discipline dans un terminal.

L'affirmation est volontairement étroite : non pas « mieux que le terminal », mais « plus rapide que le terminal sur un ensemble précis de tâches ». Termal OS embarque un vrai shell PTY précisément parce que le terminal reste le bon outil la plupart du temps.

Où la couche graphique gagne vraiment sa place

Quatre situations, celles qui reviennent le plus.

  • Déplacer des fichiers, et voir où ça en est. Copier un répertoire d'un endroit à un autre avec scp, c'est un curseur qui clignote et de l'espoir. L'explorateur le fait avec une file d'attente, un pourcentage par transfert et un renommage plutôt qu'un écrasement silencieux quand la destination porte déjà ce nom. Sur un dossier de 4 Go et une liaison lente, « est-ce que ça avance encore ? » est une vraie question.
  • Lire du code que vous n'avez pas écrit. Modifier un fichier connu, c'est le travail de vim. Comprendre une base de code inconnue - passer d'un fichier à l'autre, suivre un include, chercher dans une arborescence - c'est le travail d'un arbre de fichiers et d'onglets. C'est ce qu'apporte un éditeur Monaco posé sur le système de fichiers distant, sans rien récupérer en local.
  • Arriver sur un serveur qu'on n'a jamais vu. C'est le cas le plus fort. Termal détecte ce que la machine fait tourner - Plesk, cPanel, ou simplement nginx ou Apache -, liste les sites qu'elle sert avec la version de PHP réellement utilisée par chacun, montre les services et conteneurs actifs, et trouve les fichiers de journaux. Obtenir la même image à la main, c'est une douzaine de commandes et la connaissance des endroits où chaque distribution range les choses.
  • Tester depuis la position réseau du serveur. Une route interne qui répond sur le serveur et nulle part ailleurs est malaisée à inspecter depuis un terminal. Le client HTTP exécute curlsur le serveur et présente les en-têtes et le corps. Le navigateur va plus loin : il sort de votre machine par défaut, mais vous pouvez basculer sa sortie réseau sur le serveur - le trafic passe alors par un tunnel SOCKS5 ouvert sur la connexion SSH que vous avez déjà, et une pastille dans la barre d'outils indique laquelle des deux est active. Avec les outils de développement ancrés par onglet, une page interne devient quelque chose qu'on regarde, plutôt que quelque chose qu'on déduit.
Termal OS listant les sites hébergés sur un serveur, chacun avec la version de PHP réellement servie et des boutons pour les statistiques, les journaux d'accès, les erreurs et git pull
Le troisième cas, en un écran : tous les sites hébergés par le serveur, la version de PHP que chacun sert réellement, et si une mise à jour attend. Obtenir cela à la main, c'est une douzaine de commandes et savoir où votre distribution range les choses. Les noms de domaine sont floutés.
Une fenêtre de Termal OS intitulée transfert entre serveurs, avec une barre de progression à 41 pour cent pendant la copie d'un fichier, et un explorateur de fichiers de chaque côté
Le premier cas : une copie en cours entre deux serveurs, avec une barre de progression plutôt qu'un curseur qui clignote.
Réglages du navigateur de Termal OS proposant deux sorties réseau : une connexion directe depuis cette machine, ou un tunnel SOCKS par le serveur SSH, chaque carte nommant son fournisseur d'accès
Le quatrième cas est un réglage : le même navigateur, deux façons de sortir - directement depuis votre machine, ou par le serveur via le tunnel SSH. Les deux adresses IP publiques et la localisation sont pixellisées ici.

Tout cela sur une seule connexion

C'est le point qui compte du point de vue de l'architecture, et c'est pourquoi ce bureau n'est pas un simple habillage posé sur une poignée d'appels SSH.

Termal OS entretient un pool de connexions SSH réutilisées - une par serveur, avec un keepalive, et tout circule dessus : les métriques, l'explorateur de fichiers, le terminal, l'éditeur, le suivi des journaux. Ouvrir le gestionnaire de fichiers n'ouvre pas une seconde session. Aucun port supplémentaire, aucun agent, aucune seconde authentification, et rien d'installé sur la machine. Du point de vue du serveur, vous êtes une unique connexion SSH qui fait des choses ordinaires.

Cette contrainte est aussi ce qui permet au bureau de fonctionner sur des hébergements où vous n'avez ni root ni le droit d'installer quoi que ce soit : mutualisé, infogéré, le serveur d'un client. Un panneau d'administration graphique qui exigerait un démon y serait inutilisable.

Ce que contient réellement le bureau

Un gestionnaire de fenêtres avec barre des tâches, menu démarrer et icônes de bureau, et 23 applications. Celles qui font le travail :

  • Explorateur - explorateur SFTP : copier, déplacer, envoyer, télécharger un dossier sous forme d'archive, permissions, glisser-déposer, file de transferts avec progression.
  • Terminal - un véritable shell PTY, pas une simple boîte à commandes.
  • Termal Code - Monaco (l'éditeur de VS Code) avec arborescence et onglets, éditant directement sur le système de fichiers distant.
  • Navigateur - multi-onglets, favoris, téléchargements, affichage de la source, et outils de développement ancrés par onglet.
  • Moniteur, Processus, Journaux - métriques en direct, liste de processus depuis laquelle on peut tuer une tâche, et suivi des journaux avec détection automatique des fichiers Apache, nginx, PHP, MySQL et syslog habituels.
  • Requête web, Zip, Git, FTP, Corbeille - les petits outils qui, sinon, vous renvoient au shell en plein milieu d'une tâche.
  • Copilote - des questions en langage courant, auxquelles répondent une commande et son explication. Rien ne s'exécute avant votre clic, et tout passe par votre propre clé d'API.

Il y a aussi un client de messagerie, des notes, une calculatrice, un convertisseur, un sélecteur de couleurs et quelques jeux. Treize des vingt-trois sont désactivées par défaut - seuls le magasin d'applications, les paramètres, l'explorateur et la corbeille sont permanents - parce qu'un premier lancement qui enfouirait l'explorateur sous un menu de jeux serait son propre argument contre l'idée entière. Activez ce que vous utilisez.

Bureau Termal OS avec Termal Git affichant un historique de commits et un diff, à côté de Termal Code, éditeur Monaco ouvert sur un fichier PHP
L'historique Git, un diff et l'éditeur Monaco ouverts en même temps - le problème de l'interface séquentielle, résolu de la façon la plus ordinaire.
Menu contextuel sur un fichier distant dans Termal OS, proposant ouvrir, ouvrir avec, télécharger, télécharger sur mon ordinateur, créer un raccourci, compresser, copier, couper, renommer, permissions, mettre à la corbeille et supprimer définitivement
Clic droit sur un fichier distant : ouvrir avec, télécharger sur votre ordinateur, compresser, permissions, mettre à la corbeille. Il se comporte comme un bureau parce que c'en est un.

Ce que les développeurs devraient regarder

Le bureau est extensible, et son modèle d'extension est ce qu'il y a de plus intéressant dans le code.

Une application tierce s'exécute dans une iframe en bac à sable. Elle ne peut toucher ni au système de fichiers, ni au réseau, ni au presse-papiers directement. Chaque appel privilégié passe par un message vers l'hôte, qui le confronte aux permissions déclarées par l'application dans son manifeste - et il n'y en a que six : fs.read, fs.write, net, storage, clipboard, webview. Elles vous sont montrées au moment de l'installation. La règle inscrite dans l'en-tête du moteur est sans détour : l'iframe n'est jamais digne de confiance, l'hôte valide tout.

Cela compte davantage ici que dans la plupart des systèmes d'extensions, parce que ces applications s'exécutent contre des serveurs auxquels vous avez donné un accès SSH. Un magasin où une extension pourrait lire vos clés en silence serait indéfendable.

Et le SDK n'est pas une API séparée, au rabais, greffée pour les tiers : la calculatrice intégrée est enregistrée via Termal.app() - le point d'entrée public qu'utilise une application tierce. Huit exemples complets sont livrés avec le SDK, d'une application de notes à un hôte de webview en passant par un widget serveur.

Une application Termal tierce s'exécutant dans le bac à sable, son journal indiquant : permissions du manifeste presse-papiers et stockage, écriture presse-papiers, setTitle, stockage persistant entre les redémarrages
L'argument ci-dessus, en fonctionnement. Voici une application tierce dans son bac à sable : la première ligne de son propre journal est l'ensemble des permissions qu'elle a déclarées, et chaque appel en dessous est un appel que le manifeste autorisait.

La référence complète - manifeste, moteur d'exécution, boîtes de dialogue, sélecteurs de fichiers, stockage, réseau, webview, presse-papiers, contrôle de fenêtre, traductions, empaquetage - se trouve sur la page du Termal App Studio.

Ce qu'il n'est pas

  • Pas un remplacement de votre terminal. Il en contient un, et vous l'utiliserez. Si votre travail tient déjà dans un shell, le bureau n'ajoute rien dont vous ayez besoin.
  • Pas un protocole de bureau distant. Ni X11, ni VNC, ni RDP, ni serveur d'affichage du côté de votre machine. Le gestionnaire de fenêtres tourne localement, dans l'application ; seuls les fichiers, le shell et les métriques traversent la connexion SSH.
  • Pas actif en permanence. La collecte continue fenêtre fermée, mais l'application doit tourner sur une machine allumée. Refermez le portable et elle s'arrête - voyez la comparaison avec Netdata, où ce point pèse le plus.
  • Pas fait pour mille serveurs. De quelques-uns à quelques dizaines. Linux par SSH uniquement : pas de SNMP, pas de Windows, pas de découverte réseau.