GNU/Linux >> Znalost Linux >  >> Linux

Jak funguje vstup z klávesnice a textový výstup?

Předpokládejme, že stisknu A zadejte textový editor a tím se vloží znak a v dokumentu a zobrazí jej na obrazovce. Vím, že aplikace editoru nekomunikuje přímo s hardwarem (mezi tím je jádro a podobně), takže co se děje uvnitř mého počítače?

Přijatá odpověď:

Existuje několik různých scénářů; Popíšu ty nejčastější. Následující makroskopické události jsou:

  1. Vstup:událost stisknutí klávesy se přenese z hardwaru klávesnice do aplikace.
  2. Zpracování:o tom rozhoduje aplikace, protože klíč A bylo stisknuto, musí zobrazit znak a .
  3. Výstup:Aplikace vydá příkaz k zobrazení a na obrazovce.

Aplikace GUI

De facto standardním grafickým uživatelským rozhraním unixových systémů je X Window System, často nazývaný X11, protože se stabilizoval v 11. verzi svého základního protokolu mezi aplikacemi a zobrazovacím serverem. Mezi jádrem operačního systému a aplikacemi je umístěn program zvaný X server; poskytuje služby včetně zobrazení oken na obrazovce a přenosu stisku kláves do okna, které má fokus.

Vstup

+----------+              +-------------+         +-----+
| keyboard |------------->| motherboard |-------->| CPU |
+----------+              +-------------+         +-----+
             USB, PS/2, …                 PCI, …
             key down/up

Nejprve se informace o stisknutí a uvolnění klávesy přenesou z klávesnice do počítače a uvnitř počítače. Podrobnosti závisí na typu hardwaru. Nebudu se touto částí více zabývat, protože informace zůstávají v této části řetězce stejné:byla stisknuta nebo uvolněna určitá klávesa.

         +--------+        +----------+          +-------------+
-------->| kernel |------->| X server |--------->| application |
         +--------+        +----------+          +-------------+
interrupt          scancode             keysym
                   =keycode            +modifiers

Když dojde k hardwarové události, CPU spustí přerušení, které způsobí spuštění nějakého kódu v jádře. Tento kód detekuje, že hardwarovou událostí je stisknutí nebo uvolnění klávesy z klávesnice, a zaznamená kód skenování který identifikuje klíč.

X server čte vstupní události prostřednictvím souboru zařízení, například /dev/input/eventNNN na Linuxu (kde NNN je číslo). Kdykoli dojde k události, jádro signalizuje, že existují data ke čtení z tohoto zařízení. Soubor zařízení přenáší události klíče nahoru/dolů se skenovacím kódem, který může, ale nemusí být identický s hodnotou přenášenou hardwarem (jádro může přeložit skenovací kód z hodnoty závislé na klávesnici na běžnou hodnotu a Linux nepřesílá znovu skenovací kódy, které nezná).

X nazývá skenovací kód, který přečte, kód klíče . X server udržuje tabulku, která převádí kódy klíčů na keysymy (zkratka pro „key symbol“). Keycodes jsou číselné, zatímco keysyms jsou názvy jako A , aacute , F1 , KP_Add , Control_L , … Symbol kláves se může lišit v závislosti na tom, které modifikační klávesy byly stisknuty (Shift , Ctrl , …).

Existují dva mechanismy pro konfiguraci mapování z kódů kláves na keysyms:

  • xmodmap je tradiční mechanismus. Jedná se o jednoduchou tabulku mapující kódy kláves na seznam klíčových symbolů (neupravený, posunutý, …).
  • XKB je výkonnější, ale složitější mechanismus s lepší podporou více modifikátorů, mimo jiné zejména pro dvoujazyčnou konfiguraci.

Aplikace se připojí k X serveru a obdrží upozornění, když je stisknuta klávesa, když je aktivní okno dané aplikace. Upozornění ukazuje, že byl stisknut nebo uvolněn určitý klávesový sym, a také jaké modifikátory jsou aktuálně stisknuty. Keysyms můžete zobrazit spuštěním programu xev z terminálu. Co aplikace s informacemi udělá, je na ní; některé aplikace mají konfigurovatelné vazby kláves.

V typické konfiguraci, když stisknete klávesu označenou A bez modifikátorů se odešle keyym a do aplikace; pokud je aplikace v režimu, ve kterém píšete text, vloží se znak a .

Vztah rozložení klávesnice a xmodmap jde do podrobností o vstupu z klávesnice. Jak fungují události myši v linuxu? poskytuje přehled o vstupu myši na nižších úrovních.

Výstup

+-------------+        +----------+          +-----+         +---------+
| application |------->| X server |---····-->| GPU |-------->| monitor |
+-------------+        +----------+          +-----+         +---------+
               text or              varies          VGA, DVI,
               image                                HDMI, …

Existují dva způsoby, jak zobrazit znak.

  • Vykreslování na straně serveru :aplikace říká X serveru „nakreslete tento řetězec v tomto písmu na této pozici“. Písmo se nachází na X serveru.
  • Vykreslování na straně klienta :aplikace vytvoří obrázek, který představuje znak ve zvoleném písmu, a poté řekne X serveru, aby tento obrázek zobrazil.
Související:Používat heslo k ochraně textového souboru?

Viz Jaké jsou účely různých typů písem XWindows? pro diskusi o vykreslování textu na straně klienta a serveru pod X11.

Co se stane mezi X serverem a Graphics Processing Unit (procesor na grafické kartě), je velmi závislé na hardwaru. Jednoduché systémy mají X server kreslení v oblasti paměti nazývané framebuffer, kterou GPU zachycuje pro zobrazení. Pokročilé systémy, jaké najdete na jakémkoli PC nebo smartphonu 21. století, umožňují GPU provádět některé operace přímo pro lepší výkon. Nakonec GPU přenáší obsah obrazovky pixel po pixelu každý zlomek sekundy na monitor.

Aplikace v textovém režimu běžící v terminálu

Pokud je váš textový editor aplikací v textovém režimu spuštěnou v terminálu, pak je to terminál, který je aplikací pro účely výše uvedené části. V této části vysvětlím rozhraní mezi aplikací v textovém režimu a terminálem. Nejprve popisuji případ emulátoru terminálu běžícího pod X11. Jaký je přesný rozdíl mezi „terminálem“, „skořápkou“, „tty“ a „konzolí“? zde může být užitečné pozadí. Po přečtení tohoto si možná budete chtít přečíst mnohem podrobněji Jaké jsou odpovědnosti jednotlivých komponent pseudoterminálu (PTY) (software, hlavní strana, podřízená strana)?

Vstup

      +-------------------+               +-------------+
----->| terminal emulator |-------------->| application |
      +-------------------+               +-------------+
keysym                     character or
                           escape sequence

Emulátor terminálu přijímá události jako „Left bylo stisknuto při Shift byl dole“. Rozhraní mezi emulátorem terminálu a aplikací v textovém režimu je pseudoterminál (pty) , znakové zařízení, které přenáší bajty. Když emulátor terminálu přijme událost stisknutí klávesy, transformuje ji na jeden nebo více bajtů, které aplikace přečte ze zařízení pty.

Tisknutelné znaky mimo rozsah ASCII se přenášejí jako jeden nebo více bajtů v závislosti na znaku a kódování. Například v kódování UTF-8 znakové sady Unicode jsou znaky v rozsahu ASCII kódovány jako jeden bajt, zatímco znaky mimo tento rozsah jsou kódovány jako více bajtů.

Stisky kláves, které odpovídají funkční klávese nebo tisknutelném znaku s modifikátory, jako je Ctrl nebo Alt jsou odesílány jako úniková sekvence . Únikové sekvence se obvykle skládají z escape znaků (hodnota bajtu 27 =0x1B =

Linux
  1. Co je Makefile a jak funguje?

  2. Co je webový server a jak webový server funguje?

  3. Ssh – Jak Ssh vyzve k zadání hesla, když jsou všechny vstupy a výstupy přesměrovány?

  1. Jak přesměrovat výstup do souboru a Stdout v Linuxu

  2. Jak interpretovat a opravit chybu vstupu/výstupu v Linuxu?

  3. Linux:Jak použít soubor jako vstup a výstup zároveň?

  1. Jak získat vstup a výstup z terminálu do textového souboru?

  2. Jak zkopírovat a vložit v Putty

  3. Jak přesměrovat výstup do souboru a stdout