- WinScreen – multiplekser terminali dla Windows wzorowany na GNU Screen
- Do czego służy WinScreen?
- Jak to działa – architektura wewnętrzna
- Funkcje i możliwości
- Wymagania
- Instalacja i uruchomienie
- Opcje wiersza poleceń – szczegółowy opis
- Skróty klawiszowe
- Tryb zmiany nazwy
- Plik konfiguracyjny
- Sekcja [statusbar]
- Sekcja
- Sekcja [keybindings]
- Przykładowa konfiguracja
- Pliki sesji
- Języki i tłumaczenia
- Przykłady użycia
- 1. Uruchomienie domyślne
- 2. Uruchomienie z konkretną nazwą sesji
- 3. Dołączenie do istniejącej sesji
- 4. Uruchomienie z PowerShell
- 5. Użycie własnego pliku konfiguracyjnego
- 6. Lista aktywnych sesji
- 7. Użycie polskiego interfejsu
- Ograniczenia
- Podsumowanie
WinScreen – multiplekser terminali dla Windows wzorowany na GNU Screen
WinScreen to lekki multiplekser terminali dla systemu Windows, inspirowany klasycznym GNU Screen oraz tmux. Program pozwala zarzadzać wieloma sesjami terminalowymi (oknami) w ramach jednego okna konsoli Windows. Został napisany w ANSI C z wykorzystaniem Windows Console API oraz Windows Pseudo Console (ConPTY).
Licencja: GNU GPL 3.0
Repozytorium: github.com/IgorBrzezek/WinScreen
Do czego służy WinScreen?
WinScreen rozwiązuje problem ograniczenia do pojedynczej sesji terminala w systemie Windows. Umożliwia:
- Prowadzenie wielu sesji shell – jednoczesna praca w cmd.exe, PowerShell czy innym shellu w jednym oknie konsoli.
- Odłączanie i ponowne dołączanie – możesz odłączyć klienta od serwera, a shell działa dalej w tle. Później możesz się ponownie dołączyć z tej samej lub innej konsoli.
- Zachowanie sesji po rozłączeniu – procesy uruchomione w oknach terminala nie są zabijane przy odłączeniu klienta.
- Pracę na wielu oknach jednocześnie – do 10 okien terminala, między którymi możesz swobodnie przełączać.
Jak to działa – architektura wewnętrzna
WinScreen wykorzystuje architekturę klient-serwer z komunikacją przez lokalne gniazdo TCP (loopback).
- Proces serwera działa w tle (headless) i zarządza oknami terminala. Każde okno to osobna Pseudo Konsola Windows (ConPTY) z uruchomionym w niej shellem (np. cmd.exe).
- Proces klienta łączy się z serwerem przez TCP i zapewnia interaktywny interfejs użytkownika – obsługę klawiatury oraz renderowanie ekranu.
- Protokół komunikacji – klient i serwer wymieniają się wiadomościami przez TCP: klient wysyła naciśnięte klawisze (komenda CMD_KBD), serwer odsyła zawartość ekranu ANSI/VT100 (CMD_SCR). Dodatkowo obsługiwane są komendy detach (CMD_DET), quit (CMD_QUIT) oraz akcje (CMD_ACT) takie jak utworzenie nowego okna, zmiana okna, zmiana nazwy itp.
Schemat architektury:
+----------------------------+ TCP +----------------------------+
| Proces klienta |<----------------->| Proces serwera |
| +----------+ +----------+ | CMD_KBD/CMD_SCR | +----------+ +----------+ |
| | Renderer | | Input | | | | Window 0 | | Window 1 | |
| | (ANSI) | |(klawiat.)| | | | cmd.exe | |powershell| |
| +----------+ +----------+ | | +----------+ +----------+ |
+----------------------------+ | +----------------------+ |
| | Manager + Session | |
| | (zarządzanie oknami) | |
| +----------------------+ |
+---------------------------+
Funkcje i możliwości
- Wiele okien terminala – do 10 jednoczesnych sesji shell.
- Odłączanie i załączanie – sesje są trwałe; możesz je porzucić i wrócić do nich później.
- Pasek statusu – konfigurowalny pasek u dołu lub u góry ekranu z listą okien, zegarem i nazwą hosta.
- Obsługa ANSI 256 kolorów – pełna emulacja terminala z parsowaniem sekwencji VT100/ANSI.
- Zmiana nazw okien – możesz interaktywnie nadawać oknom własne nazwy.
- Konfigurowalne skróty klawiszowe – klawisz prefix (domyślnie Ctrl+A) można zmienić.
- Plik konfiguracyjny – plik INI z ustawieniami kolorów paska statusu, shella i skrótów.
- Wklejanie ze schowka – prawy przycisk myszy wkleja zawartość schowka do terminala.
- Nakładki pomocy i informacji – wyświetlanie listy okien, pomocy i informacji o sesji w stylu DOS-owych ramek.
- Pliki językowe – translacja interfejsu użytkownika za pomocą plików .lng (dołączone: angielski, polski, niemiecki, czeski, słowacki).
Wymagania
- System Windows 10 lub 11 (wymagany ConPTY).
- Brak zewnętrznych bibliotek – program korzysta wyłącznie z Windows Console API, Winsock oraz ConPTY.
- Plik .exe o wielkości ok. 170 KB, statycznie linkowany, bez zależności runtime.
Instalacja i uruchomienie
Ponieważ WinScreen to pojedynczy plik wykonywalny, instalacja ogranicza się do pobrania winscreen.exe i umieszczenia go w wybranym katalogu. Kompilacja ze źródeł wymaga MinGW-w64:
make -f Makefile.mingw
Po skompilowaniu uruchamiasz:
winscreen.exe [opcje]
Opcje wiersza poleceń – szczegółowy opis
| Opcja | Opis | Domyślnie |
|---|---|---|
-h |
Wyświetla krótką pomoc. | – |
-c PLIK |
Ścieżka do pliku konfiguracyjnego (INI). | winscreen.cfg |
-S NAZWA |
Nazwa sesji (domyślnie auto-generowana: WinScr_YYYYMMDD_HHMMSS). |
auto |
-r NAZWA |
Dołącz do istniejącej sesji o podanej nazwie. | – |
-e POLECENIE |
Polecenie shella dla pierwszego okna (np. powershell.exe). |
cmd.exe |
-n NAZWA |
Nazwa pierwszego okna. | shell |
--encoding ENC |
Kodowanie terminala (zarezerwowane, obecnie utf-8). | utf-8 |
--linebuf N |
Wiersze bufora przewijania (zarezerwowane). | 256 |
-ls |
Lista aktywnych sesji. | – |
--version |
Wyświetla numer wersji. | – |
--lang PLIK |
Ładuje plik tłumaczenia/językowy. | winscreen.lng |
--CLEAN_ALL_SESSIONS |
Zabija wszystkie procesy WinScreen i usuwa pliki sesji. | – |
Skróty klawiszowe
Wszystkie polecenia wydaje się po naciśnięciu klawisza prefix (domyślnie Ctrl+A), a następnie odpowiedniego klawisza komendy.
| Kombinacja | Akcja |
|---|---|
Ctrl+A c |
Utwórz nowe okno. |
Ctrl+A n |
Przełącz do następnego okna. |
Ctrl+A p |
Przełącz do poprzedniego okna. |
Ctrl+A k |
Zamknij (zabij) bieżące okno. |
Ctrl+A d |
Odłącz od sesji. |
Ctrl+A w |
Wyświetl listę okien. |
Ctrl+A h / ? / / |
Wyświetl nakładkę pomocy. |
Ctrl+A i |
Wyświetl informacje o sesji. |
Ctrl+A a |
Zmień nazwę bieżącego okna. |
Ctrl+A r |
Odśwież ekran. |
Ctrl+A 0–9 |
Przełącz bezpośrednio do okna o danym indeksie. |
Ctrl+A Ctrl+A |
Przełącz do poprzednio aktywnego okna. |
Tryb zmiany nazwy
Po naciśnięciu Ctrl+A a na pasku statusu pojawia się prompt Rename: _. Wpisz nową nazwę i naciśnij Enter, aby zatwierdzić, lub Escape, aby anulować.
Plik konfiguracyjny
WinScreen odczytuje plik konfiguracyjny w formacie INI. Domyślna ścieżka to winscreen.cfg w bieżącym katalogu. Możesz podać inny plik za pomocą opcji -c.
Sekcja [statusbar]
| Klawisz | Opis | Wartość domyślna |
|---|---|---|
position |
Położenie paska: top lub bottom. |
bottom |
background_color |
Kolor tła paska (indeks ANSI 256). | 4 (niebieski) |
foreground_color |
Kolor tekstu paska. | 15 (jasny biały) |
active_window_fg |
Kolor nazwy aktywnego okna. | 14 (jasny cyjan) |
active_window_bg |
Kolor tła nazwy aktywnego okna. | 4 (niebieski) |
inactive_window_fg |
Kolor nazwy nieaktywnego okna. | 7 (biały) |
inactive_window_bg |
Kolor tła nazwy nieaktywnego okna. | 4 (niebieski) |
window_brackets |
Styl nawiasów: brackets, parens, angles, braces. |
parens |
active_symbol |
Symbol oznaczający aktywne okno. | * |
show_clock |
Pokazuj zegar: yes/no. |
no |
clock_format |
Format zegara: HH:MM lub HH:MM:SS. |
HH:MM |
clock_position |
Położenie zegara: left lub right. |
right |
hostname |
Pokazuj nazwę hosta: ON/OFF. |
OFF |
hostname_fg |
Kolor nazwy hosta. | 11 (jasny żółty) |
clock_fg |
Kolor zegara. | 14 (jasny cyjan) |
Sekcja
| Klawisz | Opis | Wartość domyślna |
|---|---|---|
command |
Ścieżka do pliku wykonywalnego shella. | cmd.exe |
default_name |
Domyślna nazwa nowych okien. | shell |
Sekcja [keybindings]
| Klawisz | Opis | Wartość domyślna |
|---|---|---|
prefix |
Kombinacja klawisza prefix (ostatni znak to klawisz wirtualny). | Ctrl+A |
Przykładowa konfiguracja
[statusbar]
position = bottom
background_color = 236
foreground_color = 15
show_clock = yes
clock_format = HH:MM:SS
clock_position = right
hostname = ON
window_brackets = braces
command = powershell.exe
default_name = PS
[keybindings]
prefix = Ctrl+B
Pliki sesji
Metadane sesji są przechowywane w plikach .txt w katalogu %APPDATA%\WinScreen\sessions\. Każdy plik zawiera:
name=WinScr_20260101_120000
pid=12345
port=54321
windows=3
created=1767225600
encoding=utf-8
Aby wyświetlić listę aktywnych sesji, użyj:
winscreen.exe -ls
Aby zabić wszystkie procesy WinScreen i usunąć pliki sesji:
winscreen.exe --CLEAN_ALL_SESSIONS
Języki i tłumaczenia
WinScreen obsługuje tłumaczenie interfejsu na fly za pomocą plików .lng. Dołączone tłumaczenia:
winscreen.lng– angielskiwinscreen_pl.lng– polskiwinscreen_de.lng– niemieckiwinscreen_cz.lng– czeskiwinscreen_sk.lng– słowacki
Użycie:
winscreen.exe --lang winscreen_pl.lng
Przykłady użycia
1. Uruchomienie domyślne
winscreen.exe
Uruchamia serwer i automatycznie dołącza klienta z domyślnym shellem cmd.exe.
2. Uruchomienie z konkretną nazwą sesji
winscreen.exe -S mojprojekt
Tworzy sesję o nazwie mojprojekt, do której możesz później powrócić.
3. Dołączenie do istniejącej sesji
winscreen.exe -r mojprojekt
Dołącza do istniejącej sesji o podanej nazwie.
4. Uruchomienie z PowerShell
winscreen.exe -e powershell.exe
Pierwsze okno otwiera PowerShell zamiast cmd.exe.
5. Użycie własnego pliku konfiguracyjnego
winscreen.exe -c moja-konfiguracja.cfg
6. Lista aktywnych sesji
winscreen.exe -ls
Wyświetla wszystkie aktywne sesje WinScreen z ich nazwami, PID, portami i liczbą okien.
7. Użycie polskiego interfejsu
winscreen.exe --lang winscreen_pl.lng
Interfejs programu wyświetlany jest w języku polskim.
Ograniczenia
- Tylko system Windows (wykorzystuje Win32 API, ConPTY i Winsock).
- Maksymalnie 10 okien (stała
MAX_WINDOWS). - Bufor przewijania nie jest jeszcze zaimplementowany w wersji C.
- Obsługa myszy ograniczona do wklejania prawym przyciskiem (niskopoziomowy hook).
- Wyłącznie UTF-8 (parametr encoding zarezerwowany na przyszłe użycie).
Podsumowanie
WinScreen to doskonałe narzędzie dla wszystkich, którzy pracują w konsoli Windows i potrzebują zarządzać wieloma sesjami terminala. Architektura klient-serwer z możliwością odłączania i ponownego dołączania sprawia, że sesje są trwałe i nie giną po zamknięciu okna konsoli. Konfigurowalny pasek statusu, obsługa 256 kolorów ANSI, wbudowane nakładki pomocy oraz pliki językowe czynią go rozwiązaniem eleganckim i praktycznym.
Jako projekt open source na licencji GNU GPL, WinScreen stanowi świetny przykład, jak w czystym C z wykorzystaniem nowoczesnych API Windows (ConPTY) zbudować funkcjonalny multiplekser terminali. Program jest lekki (ok. 170 KB), nie wymaga zewnętrznych bibliotek i działa na każdym Windows 10/11.
Źródła: github.com/IgorBrzezek/WinScreen

