ITBlog

IT Blog w tematach różnych...

  • O blogu…
  • Edukacja
    • Moodle – stare
    • Moodle2
    • Testy
    • Wykłady IT
  • Firma

WinScreen czyli terminal z wirtualnymi oknami

Napisane przez Igor Brzeżek on 16 czerwca 2026
Napisane w: Programowanie.

Contents
  1. WinScreen – multiplekser terminali dla Windows wzorowany na GNU Screen
  2. Do czego służy WinScreen?
  3. Jak to działa – architektura wewnętrzna
  4. Funkcje i możliwości
  5. Wymagania
  6. Instalacja i uruchomienie
  7. Opcje wiersza poleceń – szczegółowy opis
  8. Skróty klawiszowe
  9. Tryb zmiany nazwy
  10. Plik konfiguracyjny
  11. Sekcja [statusbar]
  12. Sekcja
  13. Sekcja [keybindings]
  14. Przykładowa konfiguracja
  15. Pliki sesji
  16. Języki i tłumaczenia
  17. Przykłady użycia
  18. 1. Uruchomienie domyślne
  19. 2. Uruchomienie z konkretną nazwą sesji
  20. 3. Dołączenie do istniejącej sesji
  21. 4. Uruchomienie z PowerShell
  22. 5. Użycie własnego pliku konfiguracyjnego
  23. 6. Lista aktywnych sesji
  24. 7. Użycie polskiego interfejsu
  25. Ograniczenia
  26. 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ć.

WinScreen – okno informacyjne


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 – angielski
  • winscreen_pl.lng – polski
  • winscreen_de.lng – niemiecki
  • winscreen_cz.lng – czeski
  • winscreen_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

Nawigacja

← Style Mover czyli przenoszenie stylów HTML
Observium – prosty monitoring naszej sieci (część 1: konfiguracja i uruchomienie + SNMP) →
  • Szukaj

  • Kategorie

    • IT ogólnie (158)
      • AI (1)
      • Bezpieczeństwo (20)
        • Model AAA (7)
        • Szyfrowanie (1)
      • CCTV (3)
      • Hardware (2)
      • Podstawy informatyki (1)
      • Sieci (47)
        • Cisco (4)
          • Obsługa haseł (2)
        • MikroTik (8)
        • Monitorowanie sieci (3)
        • Pomiary w sieciach LAN (6)
          • iptraf-ng (3)
        • Protokół ARP (5)
        • Symulator sieci GNS3 (5)
        • Tunelowanie ruchu (6)
          • Tunele GRE (2)
          • Tunele SSH (4)
        • WLAN / WiFi (7)
      • Software (78)
        • Bazy danych (13)
        • Programowanie (21)
        • Systemy operacyjne (21)
          • Linux Debian (18)
        • Windows (8)
      • Wirtualizacja (26)
  • Ostatnie wpisy

    • Opencode – darmowe kredyty
    • Tunel SSH – zwrotny (remote forwading)
    • GNS3 – Interfejsy sieciowe
    • GNS3 – Konfiguracja urządzenia IOU (L2/L3)
    • Tunel GRE + EoIP na Cisco
  • Strona odwiedzona

    od 11.01.2013

  • Doskonała platforma e-learningowa Uzyskaj certyfikat IT

Proudly powered by WordPress Theme: Parament by Automattic.
7ads6x98y

Powered by
Necessary cookies enable essential site features like secure log-ins and consent preference adjustments. They do not store personal data.
None
Functional cookies support features like content sharing on social media, collecting feedback, and enabling third-party tools.
None
Analytical cookies track visitor interactions, providing insights on metrics like visitor count, bounce rate, and traffic sources.
None
Advertisement cookies deliver personalized ads based on your previous visits and analyze the effectiveness of ad campaigns.
None
Unclassified cookies are cookies that we are in the process of classifying, together with the providers of individual cookies.
None
Powered by