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
  • Szukaj

  • Kategorie

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

    • WinScreen czyli terminal z wirtualnymi oknami
    • Style Mover czyli przenoszenie stylów HTML
    • Generator obrazów AI za pomocą API
    • Generator modulacji AM i FM
    • Generator plików tekstowych i binarnych
  • Strona odwiedzona

    od 11.01.2013

  • Doskonała platforma e-learningowa Uzyskaj certyfikat IT

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