5.9 KiB
title, version, lastUpdated
| title | version | lastUpdated |
|---|---|---|
| Konfiguracja headless w Termux | 3.8.49 | 2026-07-25 |
Konfiguracja headless w Termux
OmniRoute może działać jako serwer headless na Androidzie przez Termux. Aplikacja desktopowa Electron nie jest obsługiwana w Termux, ale webowy dashboard oraz API zgodne z OpenAI działają z lokalnej przeglądarki lub z innych urządzeń w tej samej sieci.
Wymagania wstępne
Zainstaluj Termux z F-Droid lub z wydań na GitHub, następnie zaktualizuj pakiety i zainstaluj narzędzia kompilacji wymagane przez natywne zależności, takie jak better-sqlite3.
pkg update
pkg upgrade
pkg install nodejs python build-essential git
Wersja Node.js: OmniRoute wymaga Node
>=22.22.2 <23 || >=24.0.0 <27(zgodnie zengineswpackage.json/SUPPORTED_NODE_RANGE). Pakietnodejs-ltsw Termux zwykle dostarcza Node 20 LTS, który nie jest już wspierany — zamiast tego zainstalujpkg install nodejs(current) i sprawdź, czynode --versionzgłasza linię 22.x/24.x+.
Jeśli kompilacja natywnego pakietu się nie powiedzie, ponów powyższe polecenie pkg install, a następnie spróbuj ponownie zainstalować OmniRoute.
Instalacja
Uruchom najnowszy opublikowany pakiet bezpośrednio:
npx -y omniroute@latest
Możesz też zainstalować go globalnie:
npm install -g omniroute
omniroute
Uruchomienie
Uruchom OmniRoute w trybie serwera headless:
omniroute
lub:
npx omniroute
Dashboard nasłuchuje pod adresem:
http://localhost:20128
Otwórz ten URL w przeglądarce Androida. Jeśli uruchamiasz klientów wewnątrz Termux, użyj tego samego hosta i portu jako bazowego URL zgodnego z OpenAI.
Działanie w tle
Dla prostego procesu w tle:
nohup omniroute > omniroute.log 2>&1 &
Aby go zatrzymać:
pkill -f omniroute
Dla automatycznego startu po uruchomieniu urządzenia zainstaluj dodatek Termux:Boot i utwórz skrypt startowy:
mkdir -p ~/.termux/boot
cat > ~/.termux/boot/omniroute.sh <<'EOF'
#!/data/data/com.termux/files/usr/bin/sh
cd "$HOME"
nohup omniroute > "$HOME/omniroute.log" 2>&1 &
EOF
chmod +x ~/.termux/boot/omniroute.sh
Optymalizacja baterii w Androidzie może zatrzymać długo działające procesy w tle. Wyłącz optymalizację baterii dla Termux, jeśli serwer ma pozostać online.
Dostęp z innych urządzeń
Znajdź adres IP telefonu w sieci WiFi:
ip addr show wlan0
Następnie otwórz dashboard z innego urządzenia:
http://PHONE_IP:20128
Na przykład:
http://192.168.1.50:20128
Trzymaj telefon i klienta w tej samej zaufanej sieci. Jeśli udostępniasz OmniRoute poza telefonem, włącz klucze API oraz uwierzytelnianie dashboardu.
Katalog danych
Domyślnie OmniRoute przechowuje dane w katalogu domowym Termux, zgodnie z tą samą ścieżką danych po stronie serwera co na Linuxie. Aby umieścić bazę w konkretnej lokalizacji:
export DATA_DIR="$HOME/.omniroute"
omniroute
Ograniczenia
- Electron nie działa w Termux.
- Brak systemowego tray ani integracji z pulpitem.
- Ta konfiguracja jest wyłącznie serwerowa: korzystaj z dashboardu w przeglądarce.
- Natywne zależności mogą wymagać lokalnej kompilacji.
- Urządzenia Android z małą ilością pamięci mogą wymagać mniejszej liczby równoczesnych żądań.
- Funkcje MITM / systemowych certyfikatów mogą wymagać pracy na poziomie magazynu zaufania Androida poza Termux.
Rozwiązywanie problemów
Unsupported platform: android (każde żądanie zwraca HTTP 500)
Objaw: omniroute / omniroute serve wypisuje ✔ OmniRoute is running!, ale każde żądanie do dashboardu lub API zwraca goły 500 Internal Server Error. Plik ~/.omniroute/logs/application/app.log pozostaje pusty, APP_LOG_LEVEL=debug nic sensownego nie wypisuje, a ciało odpowiedzi to zwykły tekst (Internal Server Error) bez szczegółów JSON.
Przyczyna: Niektóre buildy Termux/Node zgłaszają process.platform === "android". Next.js getCacheDirectory() nie obsługuje tej platformy: wymaga, aby ~/.cache (lub generyczny katalog tmp) już istniał, w przeciwnym razie kończy się błędem podczas ładowania instrumentation hooka z komunikatem:
Error: An error occurred while loading instrumentation hook: Unsupported platform: android
Ponieważ hook się nie ładuje, logowanie nigdy się nie uruchamia — błąd 500 wygląda na całkowicie niemożliwy do zdiagnozowania. OmniRoute tworzy ~/.cache (i ustawia XDG_CACHE_HOME, gdy nie jest ustawione) w punkcie wejścia CLI przed startem Next.js, aby ta sonda zakończyła się powodzeniem na Androidzie/Termux.
Obsługiwane rozwiązanie (bez łatania pakietu):
mkdir -p ~/.cache
omniroute serve
W aktualnych buildach OmniRoute CLI robi to automatycznie na Androidzie/Termux — świeża instalacja npx -y omniroute@latest / globalna nie powinna wymagać kroku ręcznego. Jeśli po aktualizacji nadal widzisz błąd, utwórz raz ~/.cache jak wyżej i zrestartuj.
Nie łataj dist/server.js, aby wymusić process.platform = "linux". Tego typu łatka pakietu jest nadpisywana przy każdej reinstalacji/aktualizacji i jest zbędna, gdy katalog cache już istnieje.
Błędy kompilacji better-sqlite3
Zainstaluj toolchain kompilacji Termux:
pkg install nodejs python build-essential
Następnie uruchom ponownie:
npx -y omniroute@latest
Port już zajęty
Sprawdź, co nasłuchuje na domyślnym porcie:
ss -ltnp | grep 20128
Zatrzymaj stary proces:
pkill -f omniroute
Dashboard niedostępny z innego urządzenia
Upewnij się, że oba urządzenia są w tej samej sieci WiFi, a następnie przetestuj z Termux:
curl http://localhost:20128
Jeśli dostęp lokalny działa, a dostęp z LAN nie, sprawdź izolację hotspotu/WiFi w Androidzie oraz ewentualny profil zapory lub VPN na telefonie.