LogiShell docs Open app

See the screen of your machines

One click: Open screen

In Computers every machine of yours has an Open screen button. One click opens the live screen of that machine as a tab inside LogiShell, next to your files and sites, in the web app and in the desktop app alike. Nothing is installed for it: no VNC server, no Tailscale, no address to paste. The picture travels the same road as your terminal on that machine, directly when the machine is the one you sit at, through your LogiShell account otherwise.

When the picture cannot come, the tab says why and what to press:

The tab saysWhat to do
Waiting for that machine to allow itpress Allow in LogiShell on that machine
Screen sharing is off on this machinein LogiShell on that machine: Settings, Devices, Show this machine's screen to my devices
This is a work machinenothing: its screen stays on it
The machine sent an empty pictureon a Mac: System Settings, Privacy and Security, Screen and System Audio Recording, turn on LogiShell, then quit and reopen LogiShell
This machine has no screen to showit runs without a display, or (on Linux without GNOME) without a screenshot tool
The live screen did not openupdate LogiShell on that machine, or press Try again
Connection dropped, reconnectingnothing: it comes back by itself

Video, measured on 20 October 2026 from a Windows 11 PC (RTX 4060 Ti) to a Mac on another network, Tailscale off on the Mac:

WhatMeasured
Picture1920×1080 (the PC's own resolution), 56 to 58 frames per second
CodecH.264, encoded by the graphics card
Bitrateabout 5 Mbps on a calm screen, up to 12 Mbps allowed for 1080p
Round trip42 to 45 ms, through the Cloudflare relay (no direct road between those two networks)
From opening the tab to the first frame2.2 to 2.4 seconds
Back after the signalling connection was cut2.5 seconds, by itself

Pictures without the app, by system:

SystemTaken byMeasured on 14 October 2026
macOSthe built in screencapture7.7 frames per second at 1280 pixels, about 110 KB a frame
WindowsWindows itself (GDI), inside LogiShell10 frames per second at 1280 pixels, about 70 KB a frame
Linux with GNOME (Wayland or X11)GNOME itself (the same screen cast GNOME Remote Desktop uses), inside LogiShell8 frames per second at 1280 pixels, 36 ms a frame (24 October 2026, Ubuntu 26.04, GNOME 50)
Other Linuxgrim (Wayland with wlroots), ImageMagick or scrot (X11), spectaclenot measured yet; the last one is slow, about a frame a second

The numbers are from the machine to a viewer next to it. Through your account add the round trip of your network, which the corner of the tab shows.

Control: mouse, keyboard and clipboard over the video

Control in the bar of a video tab asks you once: *control this machine for this session? Press Start control*, and from then on your clicks, drags, right clicks, wheel and keys go to that machine through the same connection as the picture, so control is as smooth as the video.

Control works only when all of these hold, and the tab says in words which one is missing:

The machine writes every control session to its journal: who took control of which screen, when, for how long, and how many clicks, keys and clipboard transfers, never what was typed or where. On a real screen the person at the machine sees a bar Your screen is being controlled with Stop, and the Pause key stops control at once.

Where it works today: desks on any Linux machine with docker (the runner types with xdotool inside the desk). Windows machines (the runner types with SendInput), Linux machines with GNOME (the runner types through GNOME itself, over the picture stream) and Linux desktops with X11 and xdotool get it with the next desktop update; until then Control says the app there is too old and offers Control over pictures. A Mac cannot be controlled over the video yet.

Desks: a screen for a machine without one

A server has no screen. A desk gives it one: a container on that machine with its own display, a window manager, a terminal and a browser, shown in LogiShell through the same video stream as a real screen. The same thing is a sandbox: a throwaway desk for a task, which you remove when it is done.

On any Linux machine with docker and a current LogiShell runner:

lsh desk new            # a sandbox named desk-1, desk-2 ...
lsh desk new box --size 1920x1080
lsh desk ls
lsh desk open box       # the link that opens its screen in LogiShell
lsh desk rm box         # container, files and screen are gone

In Computers such a machine has a New desk button and a button per desk; each desk opens as its own screen tab. The desk named main is the screen of the machine itself, so Open screen on a server shows its desk.

The VNC side road

A connected machine gives you terminals and agent sessions. Some work still needs the desktop itself: an installer with a window, a permission prompt, a browser that is signed in over there. This page puts the live desktop of that machine into a browser tab on your Mac or phone, and gives an agent a way to look at the same screen and press things on it.

It is built from parts that already exist (a VNC server, noVNC, Tailscale) and one installer of ours. It is a side road, and the page says where it ends: see what is not here before you put it on a machine.

What you need

Three things, and only the third is ours.

  1. A machine with a desktop session and a VNC server on it. Which server depends on the system, see the table below. A server with no monitor and no graphical session has no screen to show: the page will open and stay empty. For that machine the road is the terminal, not the screen.
  2. Tailscale on the machine and on every device you watch from, signed in to the same account. It is the only way in from outside.
  3. Linux or WSL2 with systemd, where the installer runs. On Windows that is WSL on the same PC.
SystemScreen serverWhere the installer runs
Windows 10 or 11TightVNC, installed as a system service, with a passwordWSL2 on the same PC
macOSbuilt in: System Settings, General, Sharing, Screen Sharing, then allow VNC viewers with a passworda Linux machine in the same Tailscale network, pointed at the Mac
Linux, X11x11vnc, listening on 127.0.0.1the same machine
Linux, Wayland with wlroots (sway and relatives)wayvnc, listening on 127.0.0.1the same machine
Linux, GNOME on Waylandneither of the two serves itnot supported
No monitor, no desktop sessionnothing to showuse the terminal instead

Only the first row has been run by us end to end, on one PC with Windows 11 and WSL2. The other rows are written from the documentation of those programs and wait for their first machine. If one of them does not match what you see, the page is wrong and we want to know.

Why not RDP on Windows: Windows Home cannot be an RDP host, and a road that fails on the first home PC is not a road.

On Windows, noVNC lives in WSL and reaches the VNC server through the WSL gateway. Allow incoming port 5900 in the Windows firewall from the WSL subnet only. Never forward port 5900 on your router.

Install with one command

On the Linux machine, or inside WSL, from a copy of the LogiShell repository:

sudo bash infra/remote-screen/install.sh --tailscale

The installer is four files in infra/remote-screen/. Today it runs from a checkout of the repository; it is not served from a public address yet.

What it does:

It does not install the VNC server (you did that in the step above), it does not touch the firewall, and it does not open a port to the internet.

Running it again is safe and keeps the earlier settings. Useful flags:

FlagMeaningDefault
--vnc-host <address>where the VNC server listensin WSL the Windows side, otherwise 127.0.0.1
--vnc-port <port>port of the VNC server5900
--port <port>where the browser page listens6080
--tailscaleshow the page to your Tailscale devicesoff
--uninstallremove everything it installed

For a Mac, run the installer on a Linux machine in the same Tailscale network and name the Mac: --vnc-host <address of the Mac>.

When something is missing, the installer says so in words instead of failing halfway:

Open it from a Mac

Install Tailscale on the Mac and sign in with the same account. Then open:

http://<address of the machine in Tailscale>:6080/vnc.html?autoconnect=1&resize=scale

The installer prints this address at the end. It is also the output of tailscale ip -4 on the machine. The page asks for the VNC password, and then you see the desktop and can use the mouse and keyboard.

Open it from a phone

Install the Tailscale app, sign in with the same account, and open the same address in the phone browser. The on-screen keyboard and the extra keys (Ctrl, Alt, Tab, Esc) live in the side panel of noVNC.

Hands for an agent

lsh-hands is a small VNC client in one file. An agent that already has a shell on that machine (a LogiShell terminal, or ssh) uses it to look at the screen and act on it.

lsh-hands size                          # width and height of the screen in pixels
lsh-hands shot ~/shot.png --scale 2     # a frame, half size
lsh-hands click 640 360 --scale 2       # coordinates of a frame at the same scale
lsh-hands click 100 200 --button right
lsh-hands click 100 200 --double
lsh-hands move 100 200
lsh-hands scroll 640 360 3              # above zero is down
lsh-hands type "some text"
lsh-hands key ctrl+c                    # enter, alt+tab, win+d, f5 ...
lsh-hands latency                       # ms from a pointer move to the screen answering

The working order for an agent is always the same: take a frame, look at it, act once, take a frame again. Clicking twice without looking in between is how an agent ends up in the wrong window.

The VNC password comes from the environment, never from a file:

LSH_VNC_PASSWORD='<your VNC password>' lsh-hands shot ~/shot.png --scale 2

If you keep secrets in Doppler, --secret <name of the secret> at install time makes lsh-hands fetch the value at the moment of the call. Only the name is stored on the machine.

Security

What is not here

Speed and quality

Numbers from one machine of ours (Windows 11 with WSL2, RTX 4060 Ti), measured on 12 October 2026. They are a measurement, not a promise: your network decides yours.

RoadRound trip
the VNC server itself, per screen update54 ms
directly over Tailscale, machine idle41 to 55 ms
directly over Tailscale, machine under load95 to 165 ms
through a Tailscale relay70 ms
through a server of our own in the middle140 ms

Measure your own road with lsh-hands latency: six pointer moves, the time until the screen answers each, and the median.

This is enough to open a window, press a button and type a line. VNC sends pictures of the parts of the screen that changed, so anything that moves (scrolling, video, dragging a window) looks blurred and jumps. That is how the protocol works, not a setting to tune.

Two things that help before you reach for anything else:

When you need smooth video

For anything that moves, use a video stream next to the browser view, over the same Tailscale network: Sunshine on the machine and Moonlight on the Mac or phone. On the machine above this gave 1920x1080 at 60 frames per second, encoded as HEVC on the graphics card.

  1. Install Sunshine on the machine with the desktop and set a login in its web page, which opens on the machine itself.
  2. Install Moonlight on the Mac or the phone.
  3. In Moonlight add the machine by its Tailscale address. Moonlight shows a PIN; type it into the Sunshine page to pair.
  4. Pick the desktop in Moonlight.

Two things to know. On Windows, Sunshine runs in Windows itself, so Tailscale has to be installed in Windows as well as in WSL; on our PC both joined the network and both connected directly. And the portable build of Sunshine does not show the Windows sign-in screen or permission prompts: for those, the browser view is still the one that works.

Keep both. The browser view needs nothing installed on the watching device and is what lsh-hands talks to. The video stream is for your eyes.

Tailscale or a Cloudflare tunnel

TailscaleCloudflare Tunnel
Pathdevice to device, directly when the networks allow italways through a Cloudflare server
CarriesTCP and UDP, so video streams workweb and TCP
On the watching devicethe Tailscale app, signed innothing, a browser is enough
Who can reach itdevices in your networkwhoever passes the gate you put in front

For a screen, Tailscale is the fit: it is the shorter path and it carries the UDP that a video stream needs. A Cloudflare tunnel suits a web page you want to open from a device where you cannot install anything. If you do put the screen page behind a tunnel, put an access gate in front of it first: without one, an eight character VNC password is all that stands between the internet and your keyboard.

Tailscale's plans, as their site listed them on 12 October 2026: Personal is free. Signing in with a company domain counts as a business account, which gets a 14 day trial and then needs a plan (Standard was 8 dollars per user per month). Prices change, so read tailscale.com/pricing before you count on any of this.

Remove it

sudo bash infra/remote-screen/install.sh --uninstall

This removes the service, the lsh-hands command, /opt/lsh-screen, and the Tailscale road if the installer opened it. It leaves the VNC server alone, because you installed that.

What comes next in the product

The road LogiShell is building goes through the node you already paired, with no VNC and no second network to set up. What exists there now: one frame on request (Show screen on the machine's card in Settings → Devices) and the live picture (Open screen in Computers, described at the top of this page). Still ahead, with no date attached:

The video stream of our own is here since 20 October 2026, and control over it since 21 October 2026: see the top of this page.

The design is written down in the repository: docs/superpowers/specs/2026-09-24-remote-control-design.md. When input and the stream are built, this side road is removed with the --uninstall command above.