CLI-Tools (Claude Code, GitHub Copilot, jedes Terminal) per PWA von Mobilgeräten/Desktop fernsteuern.
Termote = Terminal + Remote
🇬🇧 English | 🇻🇳 Tiếng Việt | 🇨🇳 简体中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇪🇸 Español | 🇧🇷 Português (BR) | 🇫🇷 Français | 🇷🇺 Русский | 🇮🇩 Bahasa Indonesia
- Session-Wechsel: Mehrere tmux-Sessions mit Erstellen/Bearbeiten/Löschen
- Session-Tabs: Horizontale Tab-Leiste zum schnellen Fensterwechsel
- Mobilfreundlich: Virtuelle Tastatur-Toolbar (Tab/Ctrl/Shift/Pfeiltasten, erweiterbar)
- Gestenunterstützung: Wischen für Ctrl+C, Tab, Verlaufsnavigation
- Befehlsverlauf: Zuvor gesendete Befehle mit Suche abrufen
- Schnellaktionen: Schwebendes Menü für häufige Operationen (clear, cancel, exit)
- Verbindungsanzeige: Echtzeit-Serverstatus mit automatischer Trennungserkennung
- Update-Prüfung: Automatische Benachrichtigung über neue Versionen von GitHub Releases
- PWA: Auf dem Homescreen installierbar, offline-fähig
- Persistente Sessions: tmux hält Sessions am Leben
- Einklappbare Seitenleiste: Desktop-Oberfläche mit ein-/ausschaltbarer Session-Seitenleiste
- Vollbildmodus: Immersives Terminal-Erlebnis
- Konfigurationsspeicherung: Automatische Speicherung der Installationseinstellungen mit AES-256-verschlüsseltem Passwort
flowchart TB
subgraph Client["Client (Mobil/Desktop)"]
PWA["PWA - React + TypeScript"]
Gestures["Gestensteuerung"]
Keyboard["Virtuelle Tastatur"]
end
subgraph Server["tmux-api Server :7680"]
Static["Statische Dateien"]
Proxy["WebSocket Proxy"]
API["REST API /api/tmux/*"]
Auth["Basic Auth"]
end
subgraph Backend["Backend-Dienste"]
ttyd["ttyd :7681"]
tmux["tmux"]
Shell["Shell"]
Tools["CLI Tools"]
end
Gestures --> PWA
Keyboard --> PWA
PWA --> Static
PWA <--> Proxy
PWA --> API
Auth -.-> Static & Proxy & API
Proxy <--> ttyd
API --> tmux
ttyd --> tmux --> Shell --> Tools
📖 Neu bei Termote? Schau dir die Erste-Schritte-Anleitung für eine vollständige Anleitung mit Beispielen an.
./scripts/termote.sh # Interaktives Menü
./scripts/termote.sh install container # Container-Modus (docker/podman)
./scripts/termote.sh install native # Native-Modus (Host-Tools)
./scripts/termote.sh link # Globalen Befehl 'termote' erstellen
make test # Tests ausführenNach
linkkanntermoteüberall verwendet werden:termote health,termote install native --lanTipp: Installiere gum für verbesserte interaktive Menüs (optional, Bash-Fallback verfügbar)
macOS/Linux:
# Herunterladen und vor der Installation fragen (Standard: Native-Modus)
curl -fsSL https://raw.githubusercontent.com/lamngockhuong/termote/main/scripts/get.sh | bash
# Automatisch ohne Nachfrage installieren
curl -fsSL .../get.sh | bash -s -- --yes
# Nur herunterladen (nicht installieren)
curl -fsSL .../get.sh | bash -s -- --download-only
# Automatisch mit gespeicherter Konfiguration aktualisieren
curl -fsSL .../get.sh | bash -s -- --update
# Bestimmte Version installieren
curl -fsSL .../get.sh | bash -s -- --version 0.0.4
# Mit explizitem Modus und Optionen
curl -fsSL .../get.sh | bash -s -- --yes --container --lan
curl -fsSL .../get.sh | bash -s -- --yes --native --tailscale myhost
# Neues Passwort erzwingen (gespeicherte Konfiguration ignorieren)
curl -fsSL .../get.sh | bash -s -- --yes --container --freshWindows (PowerShell):
Hinweis: Falls die Skriptausführung auf Ihrem System deaktiviert ist, führen Sie zuerst Folgendes aus:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
# Herunterladen und vor der Installation fragen (Standard: Native-Modus)
irm https://raw.githubusercontent.com/lamngockhuong/termote/main/scripts/get.ps1 | iex
# Automatisch ohne Nachfrage installieren
$env:TERMOTE_AUTO_YES = "true"; irm .../get.ps1 | iex
# Mit explizitem Modus
$env:TERMOTE_MODE = "container"; irm .../get.ps1 | iex
# Automatisch mit gespeicherter Konfiguration aktualisieren
$env:TERMOTE_UPDATE = "true"; irm .../get.ps1 | iex# Alles-in-einem (Zugangsdaten werden automatisch generiert, Logs prüfen: docker logs termote)
docker run -d --name termote -p 7680:7680 ghcr.io/lamngockhuong/termote:latest
# Mit benutzerdefinierten Zugangsdaten
docker run -d --name termote -p 7680:7680 \
-e TERMOTE_USER=admin -e TERMOTE_PASS=secret \
ghcr.io/lamngockhuong/termote:latest
# Ohne Authentifizierung (nur für lokale Entwicklung)
docker run -d --name termote -p 7680:7680 \
-e NO_AUTH=true \
ghcr.io/lamngockhuong/termote:latest
# Mit Volume für Persistenz
docker run -d --name termote -p 7680:7680 \
-v termote-data:/home/termote \
ghcr.io/lamngockhuong/termote:latest
# Benutzerdefiniertes Workspace-Verzeichnis einbinden
docker run -d --name termote -p 7680:7680 \
-v ~/projects:/workspace \
ghcr.io/lamngockhuong/termote:latest
# Mit Tailscale HTTPS (erfordert Tailscale auf dem Host)
docker run -d --name termote -p 7680:7680 \
-e TERMOTE_USER=admin -e TERMOTE_PASS=secret \
ghcr.io/lamngockhuong/termote:latest
sudo tailscale serve --bg --https=443 http://127.0.0.1:7680
# Zugriff unter: https://your-hostname.tailnet-name.ts.net# Neuestes Release herunterladen
VERSION=$(curl -s https://api.github.com/repos/lamngockhuong/termote/releases/latest | grep tag_name | cut -d '"' -f4)
wget https://github.com/lamngockhuong/termote/releases/download/${VERSION}/termote-${VERSION}.tar.gz
tar xzf termote-${VERSION}.tar.gz
cd termote-${VERSION#v}
# Installieren (interaktives Menü oder mit Modus)
./scripts/termote.sh install
./scripts/termote.sh install containergit clone https://github.com/lamngockhuong/termote.git
cd termote
./scripts/termote.sh install containerHinweis:
termote.shist das einheitliche CLI mit Unterstützung fürinstall(baut aus Quellcode, verwendet vorgefertigte Artefakte wenn verfügbar),uninstallundhealth.
flowchart LR
subgraph Container["Container-Modus"]
direction TB
C1["Docker/Podman"] --> C2["tmux-api :7680"] --> C3["ttyd :7681"] --> C4["tmux"]
end
subgraph Native["Native-Modus"]
direction TB
N1["Hostsystem"] --> N2["tmux-api :7680"] --> N3["ttyd :7681"] --> N4["tmux + Host-Tools"]
end
User["Benutzer"] --> Container & Native
| Modus | Beschreibung | Anwendungsfall | Plattform |
|---|---|---|---|
--container |
Container-Modus | Einfache Bereitstellung, isolierte Umgebung | macOS, Linux |
--native |
Alles nativ | Zugriff auf Host-Tools (claude, gh) | macOS, Linux |
| Flag | Beschreibung |
|---|---|
--lan |
Im LAN freigeben (Standard: nur localhost) |
--tailscale <host[:port]> |
Tailscale HTTPS aktivieren |
--no-auth |
Basis-Authentifizierung deaktivieren |
--port <port> |
Host-Port (Standard: 7680, Windows: 7690) |
--fresh |
Neues Passwort erzwingen (gespeicherte Konfig. ignorieren) |
--update |
Automatisch mit gespeicherter Konfig. aktualisieren |
--version <ver> |
Bestimmte Version installieren (mit oder ohne v) |
| Umgebungsvariable | Beschreibung |
|---|---|
WORKSPACE |
Host-Verzeichnis zum Einbinden (Standard: ./workspace) |
TERMOTE_USER |
Benutzername für Authentifizierung (Standard: automatisch generiert) |
TERMOTE_PASS |
Passwort für Authentifizierung (Standard: automatisch generiert) |
NO_AUTH |
Auf true setzen, um Authentifizierung zu deaktivieren |
Skripte erkennen automatisch podman oder docker -- beide funktionieren identisch.
./scripts/termote.sh install container # localhost mit Basic Auth
./scripts/termote.sh install container --no-auth # localhost ohne Auth
./scripts/termote.sh install container --lan # LAN-Zugriff
# Zugriff: http://localhost:7680
# Benutzerdefiniertes Workspace-Verzeichnis (wird als /workspace im Container eingebunden)
WORKSPACE=~/projects ./scripts/termote.sh install container
WORKSPACE=/path/to/code make install-containerSicherheitshinweis: Vermeiden Sie es,
$HOMEdirekt einzubinden -- sensible Verzeichnisse wie.ssh,.gnupgwären im Container zugänglich. Binden Sie stattdessen spezifische Projektverzeichnisse ein.
Verwenden, wenn Zugriff auf Host-Binaries benötigt wird (claude, git, usw.):
# Linux
sudo apt install ttyd tmux
# Oder: sudo snap install ttyd
./scripts/termote.sh install native
# macOS
brew install ttyd tmux go
./scripts/termote.sh install native
# Zugriff: http://localhost:7680Verwendet tailscale serve für automatisches HTTPS (keine manuelle Zertifikatsverwaltung):
# Nur Tailscale (Standard-Port 443)
./scripts/termote.sh install container --tailscale myhost.ts.net
# Benutzerdefinierter Port
./scripts/termote.sh install native --tailscale myhost.ts.net:8765
# Tailscale + LAN-Zugriff
./scripts/termote.sh install container --tailscale myhost.ts.net --lan
# Zugriff: https://myhost.ts.net (oder :8765 für benutzerdefinierten Port)./scripts/termote.sh uninstall container # Container-Modus
./scripts/termote.sh uninstall native # Native-Modus
./scripts/termote.sh uninstall all # Alles# Option 1: Automatisch mit gespeicherter Konfiguration aktualisieren
curl -fsSL .../get.sh | bash -s -- --update
# Option 2: Einzeiler erneut ausführen (vergleicht Versionen, fragt vor Installation)
curl -fsSL .../get.sh | bash
# Option 3: Manuell aktualisieren
./scripts/termote.sh uninstall [container|native]
git pull origin main # Falls vom Quellcode installiert
./scripts/termote.sh install [container|native] [--lan] [--tailscale ...]| Plattform | Container | Native | CLI-Skript |
|---|---|---|---|
| Linux | ✓ | ✓ | termote.sh |
| macOS | ✓ | ✓ | termote.sh |
| Windows | termote.ps1 |
⚠️ Windows-Unterstützung (Experimentell): Die Windows-Unterstützung befindet sich derzeit in einem frühen Stadium und erfordert weitere Tests. Der Container-Modus erfordert Docker Desktop, der Native-Modus erfordert psmux. Bitte melden Sie Probleme auf GitHub.
Der Windows Native-Modus verwendet psmux (tmux-kompatibler Terminal-Multiplexer für Windows):
# psmux installieren
winget install psmux
# Termote ausführen
.\scripts\termote.ps1 install native
.\scripts\termote.ps1 install container # Oder Container-Modus mit Docker DesktopStandardmäßig lädt
install nativeden Fork/MSVC-ttyd-Build herunter (funktioniert unter dem neuesten Windows); mit-Ttyd officialwird stattdessen der Upstream-Build von tsl0922/ttyd verwendet.
| Aktion | Geste |
|---|---|
| Abbrechen/Unterbrechen | Nach links wischen (Ctrl+C) |
| Tab-Vervollständigung | Nach rechts wischen |
| Verlauf hoch | Nach oben wischen |
| Verlauf runter | Nach unten wischen |
| Einfügen | Lange drücken |
| Schriftgröße | Zusammen-/Auseinanderziehen |
Die virtuelle Toolbar bietet: Tab, Esc, Ctrl, Shift, Pfeiltasten und gängige Tastenkombinationen. Unterstützt Ctrl+Shift-Kombinationen (Einfügen, Kopieren). Wechsel zwischen minimal und erweitert für zusätzliche Tasten (Home, End, Delete, usw.).
termote/
├── Makefile # Build-/Test-/Deploy-Befehle
├── Dockerfile # Docker-Modus (tmux-api + ttyd)
├── docker-compose.yml
├── entrypoint.sh # Docker-Entrypoint
├── docs/ # Dokumentation
│ └── images/screenshots/ # App-Screenshots
├── pwa/ # React PWA
│ └── src/
│ ├── components/
│ ├── contexts/
│ ├── hooks/
│ ├── types/
│ └── utils/
├── tmux-api/ # Go-Server
│ ├── main.go # Einstiegspunkt
│ ├── serve.go # Server (PWA, Proxy, Auth)
│ └── tmux.go # tmux API-Handler
├── scripts/
│ ├── termote.sh # Unix CLI (install/uninstall/health)
│ ├── termote.ps1 # Windows PowerShell CLI
│ ├── get.sh # Unix Online-Installer (curl | bash)
│ └── get.ps1 # Windows Online-Installer (irm | iex)
├── tests/ # Testsuite
│ ├── test-termote.sh
│ ├── test-termote.ps1 # Windows-Tests
│ ├── test-get.sh
│ └── test-entrypoints.sh
└── website/ # Astro Starlight Docs-Seite
└── src/content/docs/ # MDX-Dokumentation
make build # PWA und tmux-api bauen
make test # Alle Tests ausführen
make health # Service-Health prüfen
make clean # Container stoppen
# E2E-Tests (erfordert laufenden Server)
./scripts/termote.sh install container # Zuerst Server starten
pnpm --filter termote test:e2e # Playwright-Tests ausführen
pnpm --filter termote test:e2e:ui # Mit UI-Debugger ausführenManuelles Testen: Siehe Selbsttest-Checkliste
- tmux prüfen:
tmux ls - Sicherstellen, dass ttyd das Flag
-Averwendet (attach-or-create)
- tmux-api-Logs prüfen:
docker logs termote - Sicherstellen, dass ttyd auf Port 7681 läuft
- Sicherstellen, dass das Viewport-Meta-Tag vorhanden ist
- Auf einem echten Gerät testen, nicht im Emulator
ps aux | grep ttyd # Prüfen, ob ttyd läuft
ps aux | grep tmux-api # Prüfen, ob tmux-api läuft
lsof -i :7680 # Sicherstellen, dass der Port belegt ist- Standard: nur localhost - nicht im LAN erreichbar, es sei denn das Flag
--lanwird verwendet - Basic Auth standardmäßig aktiviert -
--no-authverwenden, um für lokale Entwicklung zu deaktivieren - Integrierter Brute-Force-Schutz - Rate-Limiting (5 Versuche/Min. pro IP)
- HTTPS (Tailscale) für Produktion verwenden
- Auf vertrauenswürdige Netzwerke/VPN beschränken
| Projekt | Beschreibung |
|---|---|
| GitHub Flex | Cross-Browser-Erweiterung (Chrome & Firefox), die die GitHub-Oberfläche mit Produktivitätsfunktionen erweitert |
| TabRest | Chrome-Erweiterung, die inaktive Tabs automatisch entlädt, um Speicher freizugeben |
| Specpin | Heftet lebende, Git-versionierte Business-Spezifikationen an die Elemente deiner laufenden Web-UI (Browser-Erweiterung + Go-Sidecar) |
MIT

