SharkTTY 1.6 salió el 27 de junio, junto con SharkTTY Desk 0.6.0 para el Mac. Es la versión en la que el escritorio remoto dejó de significar una pantalla. La mayor parte del trabajo, sin embargo, está debajo: una conexión que se rinde en los sitios correctos, reintenta en los sitios correctos y te dice cuál de las dos cosas pasó.
Todas las pantallas, no solo una
Hasta 1.6, conectarse a un Mac con tres monitores te daba uno de ellos. Podías elegir cuál, y ahí acababa la historia. Eso hacía que un Mac con varias pantallas pareciera más pequeño desde un teléfono de lo que es en persona, y la parte del escritorio que necesitabas estaba invariablemente en la pantalla que no mirabas.
1.6 las envía todas. La vista agregada coloca las pantallas juntas, y tocar o arrastrar sobre cualquiera de ellas toma el control de esa pantalla — el puntero va donde va tu dedo, sobre la pantalla en la que caiga. Cada pantalla se transmite bajo demanda en lugar de todas a la vez, que es la única razón por la que un Mac de tres monitores resulta usable a través de la conexión de un teléfono.
La misma versión permitió editar un escritorio guardado y obtener su enlace compartido sin salir de la sesión, así que preparar el acceso para un segundo dispositivo dejó de implicar desconectarse antes.
Reconexiones que de verdad reconectan
Un escritorio remoto que se cae en un viaje en ascensor no es un escritorio remoto. La ruta de conexión en 1.6 se reconstruyó en torno a un orden de preferencia sencillo: probar primero una ruta directa punto a punto, porque es más rápida y no involucra a nadie más, y recurrir a un relé solo cuando la ruta directa no aparece. Punto a punto primero es planificación, no un interruptor de preferencias — la app hace competir las rutas y se queda con la que responde.
Los reintentos son donde estas cosas suelen torcerse, en una de dos direcciones. Reintenta todo y una credencial equivocada se convierte en un bucle infinito que parece un problema de red. No reintentes nada y un corte de dos segundos en la red móvil termina tu sesión. Así que 1.6 separa los casos: un rechazo de autenticación detiene el recorrido de alternativas de inmediato, porque probar la siguiente ruta con la misma clave equivocada fallará igual, mientras que un fallo de transporte espera con variación aleatoria y sigue intentándolo. Esa variación importa más de lo que parece — sin ella, todos los clientes que cayeron en el mismo instante vuelven en el mismo instante.
Además de eso: la app ahora nota cuándo vuelve la red y se recupera en lugar de agotar lo que le queda de espera, la ruta WebSocket recibió un keepalive para que los equipos intermedios dejen de cortar sesiones inactivas, y el bucle de aceptación dejó de descartar conexiones que llegaban mientras estaba ocupado con la anterior.
Enlaces cortos, y conectar sin copiar nada
Una cadena de emparejamiento es una línea larga de texto con un host, un puerto, la huella de un certificado y un token dentro. Está bien para escanearla y es penosa para enviársela a alguien. 1.6 añadió enlaces cortos tanto para el relé independiente como para el gestionado: la app resuelve el enlace, recibe un token de vuelta y se conecta con él — sin huellas que comparar a ojo, sin nada que pegar.
Un arreglo pequeño y relacionado, de la categoría de cosas que nunca deberían haber hecho falta: el escáner de QR ahora ignora los códigos que no son una cadena de emparejamiento ni un enlace corto, en vez de intentar sacar una conexión del QR de una Wi-Fi que alguien dejó en un cartel.
Cifrado en la ruta del relé
Las tramas del relé WebSocket van cifradas en 1.6, y el relé gestionado emite tickets en lugar de aceptar cualquier cosa que aparezca en la sala correcta. Ambas son pasos en la misma dirección: el trabajo del relé es reenviar bytes entre dos extremos que ya se han puesto de acuerdo entre ellos, y cuanto menos pueda hacer con esos bytes, mejor. Si prefieres no confiar en el relé de nadie, el independiente es de código abierto y puedes ejecutarlo tú.
Versiones que negocian en vez de adivinar
La app y el agente del Mac ahora intercambian una versión de protocolo y un conjunto de bits de capacidades antes de hacer cualquier otra cosa. Es poco vistoso y se amortiza la primera vez que una app antigua se encuentra con un agente nuevo: en lugar de una conexión que funciona a medias y luego falla en algún punto confuso, la app sabe exactamente qué puede hacer el otro extremo, y una app demasiado antigua recibe un aviso claro para actualizar. Todo lo que ha venido después se apoya en esos bits de capacidades — la negociación del códec de audio en 1.8 es el mismo mecanismo.
La autenticación por código de conexión llegó también aquí, con limitación de intentos y una lista de permitidos en el lado del Mac, para que un código que se filtre no pueda forzarse por fuerza bruta en silencio.
Seis idiomas, terminados
La interfaz quedó traducida en esta versión a los seis idiomas admitidos, no a casi todos. Las apps de terminal acumulan muchísimas cadenas cortas, y el último veinte por ciento son las que nadie ve hasta que algo va mal — que es exactamente cuando importa leer un error en tu propio idioma.
Y las pequeñas
- Márgenes de área segura en el terminal, para que el texto ya no quede debajo de las esquinas redondeadas ni del indicador de inicio.
- Memoria de teclado por host: el teclado que estabas usando con un host es el teclado que recuperas.
- Un techo de calidad xHD para el escritorio remoto, para cuando tienes el ancho de banda y quieres los píxeles.
- El puerto SSH se escribe en vez de subirlo con un contador, algo que agradecerá cualquiera que haya tenido que llegar a 2222 a toques.
Todas las funciones de 1.6 son gratis. Las únicas compras integradas son propinas opcionales, y no desbloquean nada.
Lee esta entrada en: English · 中文 · 日本語 · Español · Français · 한국어 · Українська
Más sobre la app en la guía de SharkTTY, las notas breves para usuarios en Novedades, y la vía más rápida para escribirnos es el tablón de comentarios. Volver al blog de desarrollo.