Remote Desktop

Windows-Rechner im selben Fenster wie die SSH-Sitzungen: dieselbe Hostliste, dieselben Gruppen, dieselben gespeicherten Zugänge — und derselbe verschlüsselte Abgleich. Ein Remote-Desktop-Host ist in tessera ein Host wie jeder andere, nur mit einem anderen Protokoll.

Einen Rechner anlegen

Im Hostformular ganz oben auf Remote Desktop umschalten. Was darunter steht, wechselt mit: Schlüssel, Weiterleitungen und Umgebungsvariablen verschwinden, dafür kommen Domäne, Bildschirm und Übertragung dazu. Was ohne Shell nichts bedeutet, ist weg statt wirkungslos.

Der übliche Port ist 3389 und zieht beim Umschalten mit — aber nur, wenn dort noch die Vorgabe des alten Protokolls stand. Wer 13389 eingetragen hat, meint 13389.

Benutzer und Passwort kommen aus denselben gespeicherten Zugängen wie bei SSH — Administrator auf zwölf Rechnern ist zwölfmal derselbe Zugang. Die Domäne steht am Host, weil derselbe Zugang in verschiedenen Domänen gelten kann. Ohne hinterlegtes Passwort wird beim Verbinden gefragt.

Das Zertifikat

Beim ersten Verbinden zeigt tessera den SHA-256-Fingerabdruck des Serverzertifikats und fragt nach. Ändert er sich später, bricht die Verbindung ab — es gibt kein „trotzdem verbinden“. Genau wie bei SSH-Host-Schlüsseln, mit demselben Code und in derselben Tabelle.

Ein Windows-Rechner im eigenen Netz zeigt fast immer ein selbstsigniertes Zertifikat. Eine Kettenprüfung schlüge dort jedes Mal fehl — und ein Client, der daraufhin alles annimmt, hat eine verschlüsselte Verbindung zu einem Unbekannten und merkt es nie. Mehr dazu unter Sicherheitsmodell.

Auflösung

ModusWas passiert
Dem Fenster folgen Die Gegenstelle wird auf die Fenstergröße umgestellt. Jeder Bildpunkt dort ist genau ein Bildpunkt hier.
Fest Feste Auflösung. Passt sie nicht ins Fenster, wird gescrollt.
Fest, eingepasst Feste Auflösung, auf die Fläche verkleinert. Seitenverhältnis bleibt.

„Dem Fenster folgen“ ist der schärfste Modus, und zwar aus einem einfachen Grund: Was nicht umgerechnet wird, kann auch nicht unscharf werden. Jede Skalierung — auch eine gute — macht Schrift weicher. Umgestellt wird 400 Millisekunden nach dem letzten Zug am Fensterrand; jede Zwischengröße auszuhandeln hieße, während des Ziehens dauernd neu zu verhandeln.

Damit „ein Bildpunkt ist ein Bildpunkt“ auch wirklich stimmt, rastet tessera das Bild auf ganze Bildpunkte des Schirms ein. Die angeforderte Auflösung muss gerade sein — ungerade Breiten zerlegen die Kachelrasterung mancher Codecs —, und der übrige Punkt landet sonst als halber Punkt Versatz unter dem Bild. Ein halber Punkt Versatz ohne Glättung ist genau der Fall, in dem der Zeichner Zeile für Zeile neu entscheidet, welche er nimmt: Dann fehlt an Schrift die unterste Zeile, und Unterlängen sehen abgeschnitten aus.

Beherrscht die Gegenstelle das Umstellen im Betrieb nicht, sagt es die Werkzeugleiste — dann gilt die Auflösung, mit der verbunden wurde.

Tastatur

Zeichen gehen als Unicode hinaus, Tasten als Scancode. Der Unterschied ist der ganze Punkt: Ein ü über Scancodes zu schicken hieße, die Tastaturbelegung der Gegenseite zu erraten. So kommt an, was Sie tippen, unabhängig davon, ob dort Deutsch, Englisch oder Französisch eingestellt ist.

Windows-Taste, Alt+Tab, Strg+Esc, Alt+Esc und Druck behandelt der Fenstermanager normalerweise selbst. tessera fängt sie ab, solange eine Sitzung den Fokus hat und ein tessera-Fenster im Vordergrund ist — dann gehen sie an die Gegenseite.

Strg+Alt+Entf lässt sich nicht abfangen. Die Sequenz behandelt winlogon, bevor irgendein Programm sie sieht — genau deshalb kann kein Programm einen Anmeldebildschirm fälschen. In der Sitzung nimmt Strg+Alt+Ende ihren Platz ein, und in der Werkzeugleiste steht ein Knopf. Der Windows-Client von Microsoft macht es genauso.

Zwischenablage

Text in beide Richtungen, je Host einstellbar: nicht teilen, nur von dort hierher oder in beide Richtungen.

Was auf der Gegenseite kopiert wird, landet hier in der Zwischenablage. Umgekehrt sieht tessera in der örtlichen Zwischenablage nach, solange die Sitzung den Fokus hat — Flutter kennt kein Ereignis für Zwischenablage-Änderungen, und das Betriebssystem meldet keins, das hier ankäme. Beim Hineinklicken wird sofort nachgesehen: der häufige Fall ist „woanders kopiert, hier eingefügt“. Eine App, die im Hintergrund im Sekundentakt die Zwischenablage liest, täte etwas, das man von ihr nicht erwartet.

Übertragen werden Text, Dateien und ganze Ordner. Wer auf der Gegenseite kopiert, findet das Kopierte hier in der Zwischenablage und fügt es im Explorer ein; umgekehrt genauso. Geholt wird stückweise, eine Datei nach der anderen — eine Datei, die nicht in den Arbeitsspeicher passt, geht damit trotzdem durch.

Ein Ordner wird dabei rekursiv aufgelöst: der Ordner selbst, seine Unterordner und jede Datei darin, jeweils mit dem relativen Pfad, aus dem die Gegenseite denselben Aufbau wieder anlegt. Eingefügt wird danach der Ordner und nicht eine lose Liste seiner Dateien — in beide Richtungen. Ein leerer Ordner geht als leerer Ordner hinüber.

Drei Grenzen dabei: Verknüpfungen werden beim Absteigen ausgelassen — ein Ordner, der auf sich selbst zeigt, liefe sonst im Kreis. Der Dateiname auf der Leitung fasst 260 Zeichen samt relativem Pfad; was tiefer liegt, bleibt liegen, und das gilt für jeden Client. Und tessera hört bei 32 Ebenen und 4096 Einträgen je Kopiervorgang auf, damit ein versehentlich kopierter Ordner nicht die Sitzung damit belegt, seinen Baum abzulaufen.

Was drüben kopiert wird, holt tessera sofort, nicht erst beim Einfügen. Verzögert zu holen verlangte zu merken, wann jemand außerhalb der Sitzung einfügt, und das meldet kein Betriebssystem. Wer drüben etwas sehr Großes kopiert, löst damit also gleich die Übertragung aus.

Bilder fehlen weiterhin. Von drüben geholte Dateien landen unter %TEMP%\tessera-rdp und bleiben dort — die Zwischenablage zeigt auf sie, solange sie liegen.

Beim Verbinden meldet tessera einmal an, was es anzubieten hat — und wenn das nichts ist, meldet es nichts an. Das leert die Zwischenablage der Gegenseite. Ohne diese Anmeldung schaltet das Protokoll den Kanal gar nicht erst frei, und danach ginge in keiner Richtung mehr etwas; jeder andere Client macht es genauso.

Der Paste-Filter greift hier nicht. Er entfernt Steuerzeichen und ESC-Sequenzen, weil sie in einer Shell zu Befehlen werden. In ein Windows-Eingabefeld eingefügt sind sie harmlos, und ihre Entfernung wäre Datenverlust. Was im Terminal gilt, gilt hier also bewusst nicht.

Durch einen Sprunghost

Ein Windows-Rechner, der nur über einen Linux-Server erreichbar ist, bekommt diesen als Sprunghost — dasselbe Feld wie bei SSH. tessera baut dann selbst eine SSH-Verbindung dorthin, legt eine Weiterleitung auf Port 3389 des Ziels und verbindet Remote Desktop dahinter. Ketten sind erlaubt: der Sprunghost darf selbst hinter einem liegen.

Der Fingerabdruck hängt dabei am echten Ziel und nicht am örtlichen Tunnelport. Der ist bei jedem Start ein anderer, und eine Prüfung daran liefe beim nächsten Mal leer, ohne dass es jemand merkt.

Bei jedem Verbindungsversuch entsteht ein frischer Tunnel. Nach einem Abbruch ist der alte meist mit tot; ihn wiederzuverwenden hieße, auf einen Port zu verbinden, hinter dem niemand mehr steht — und der Fehler sähe aus wie ein Problem der Gegenstelle.

Snippets

Snippets gelten auch in einer Remote-Desktop-Sitzung, mit denselben Geltungsbereichen. Der Weg dorthin ist der Knopf Snippets in der Werkzeugleiste — ein Tastenkürzel wäre hier eine Sackgasse, weil alle Tasten an die Gegenseite gehen.

Zwei Unterschiede zum Terminal, beide bewusst:

Ton

Je Host abschaltbar, Vorgabe aus. Ton, den niemand erwartet, ist auf einem Arbeitsplatz eine Zumutung. Übertragen wird unkomprimiertes PCM in CD-Qualität; die Gegenstelle wandelt darauf um.

Gepuffert wird eine halbe Sekunde. Was darüber hinausgeht, ist nicht mehr die Reaktion auf das, was man sieht — dann ist Verwerfen ehrlicher als eine Verzögerung, die immer weiter wächst. Gibt es kein Ausgabegerät, bleibt es still, und die Sitzung läuft trotzdem.

Neu verbinden

Bricht die Verbindung ab, versucht tessera es von selbst: nach 2, 5, 15, 30 und 60 Sekunden. Dieselben Abstände wie bei SSH — zwei Sitzungstypen, die sich beim Wiederverbinden unterschiedlich verhalten, fühlten sich an wie zwei Programme. Ein sauberes Abmelden ist kein Abbruch und löst nichts aus.

Was tessera hier nicht kann