GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Kerja Input Keyboard Dan Output Teks?

Misalkan saya menekan tombol A masukkan editor teks dan ini menyisipkan karakter a dalam dokumen dan menampilkannya di layar. Saya tahu aplikasi editor tidak berkomunikasi secara langsung dengan perangkat keras (ada kernel dan hal-hal di antaranya), jadi apa yang terjadi di dalam komputer saya?

Jawaban yang Diterima:

Ada beberapa skenario yang berbeda; Saya akan menjelaskan yang paling umum. Peristiwa makroskopik berturut-turut adalah:

  1. Input:peristiwa penekanan tombol ditransmisikan dari perangkat keras keyboard ke aplikasi.
  2. Pemrosesan:aplikasi memutuskan itu karena kunci A ditekan, itu harus menampilkan karakter a .
  3. Output:aplikasi memberikan perintah untuk menampilkan a di layar.

Aplikasi GUI

Antarmuka pengguna grafis standar de facto dari sistem unix adalah Sistem X Window, sering disebut X11 karena distabilkan dalam versi ke-11 protokol intinya antara aplikasi dan server tampilan. Sebuah program yang disebut server X berada di antara kernel sistem operasi dan aplikasi; menyediakan layanan termasuk menampilkan jendela di layar dan mengirimkan penekanan tombol ke jendela yang memiliki fokus.

Masukan

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

Pertama, informasi tentang penekanan tombol dan pelepasan tombol ditransmisikan dari keyboard ke komputer dan di dalam komputer. Detailnya tergantung pada jenis perangkat keras. Saya tidak akan membahas lebih jauh tentang bagian ini karena informasinya tetap sama di seluruh bagian rantai ini:tombol tertentu ditekan atau dilepaskan.

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

Ketika peristiwa perangkat keras terjadi, CPU memicu interupsi, yang menyebabkan beberapa kode di kernel dieksekusi. Kode ini mendeteksi bahwa peristiwa perangkat keras adalah penekanan tombol atau pelepasan tombol yang berasal dari keyboard dan merekam kode pindai yang mengidentifikasi kuncinya.

Server X membaca kejadian input melalui file perangkat, misalnya /dev/input/eventNNN di Linux (di mana NNN adalah angka). Setiap kali ada peristiwa, kernel memberi sinyal bahwa ada data untuk dibaca dari perangkat itu. File perangkat mentransmisikan peristiwa naik/turun kunci dengan kode pindaian, yang mungkin identik atau tidak dengan nilai yang dikirimkan oleh perangkat keras (kernel dapat menerjemahkan kode pindaian dari nilai yang bergantung pada keyboard ke nilai yang sama, dan Linux tidak. jangan mengirim ulang kode pindaian yang tidak diketahuinya).

X memanggil kode pindaian yang dibacanya sebagai kode kunci . Server X mengelola tabel yang menerjemahkan kode kunci menjadi keysyms (kependekan dari “simbol kunci”). Kode kunci adalah numerik, sedangkan simbol kunci adalah nama seperti A , aacute , F1 , KP_Add , Control_L , … Keysym mungkin berbeda tergantung pada tombol pengubah mana yang ditekan (Shift , Ctrl , …).

Ada dua mekanisme untuk mengonfigurasi pemetaan dari kode kunci ke keysym:

  • xmodmap adalah mekanisme tradisional. Ini adalah tabel sederhana yang memetakan kode kunci ke daftar simbol kunci (tidak dimodifikasi, digeser, ...).
  • XKB adalah mekanisme yang lebih kuat, tetapi lebih kompleks dengan dukungan yang lebih baik untuk lebih banyak pengubah, khususnya untuk konfigurasi dua bahasa.

Aplikasi terhubung ke server X dan menerima pemberitahuan saat tombol ditekan saat jendela aplikasi tersebut memiliki fokus. Pemberitahuan menunjukkan bahwa keysym tertentu ditekan atau dilepaskan serta pengubah apa yang saat ini ditekan. Anda dapat melihat keysyms dengan menjalankan program xev dari sebuah terminal. Apa yang dilakukan aplikasi dengan informasi itu terserah; beberapa aplikasi memiliki ikatan kunci yang dapat dikonfigurasi.

Dalam konfigurasi umum, saat Anda menekan tombol berlabel A tanpa pengubah, ini mengirimkan keysym a ke aplikasi; jika aplikasi dalam mode di mana Anda mengetik teks, ini akan menyisipkan karakter a .

Hubungan tata letak keyboard dan xmodmap lebih detail pada input keyboard. Bagaimana cara kerja acara mouse di linux? memberikan gambaran umum tentang input mouse di tingkat yang lebih rendah.

Keluaran

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

Ada dua cara untuk menampilkan karakter.

  • Perenderan sisi server :aplikasi memberi tahu server X "gambar string ini dalam font ini pada posisi ini". Font berada di server X.
  • Perenderan sisi klien :aplikasi membuat gambar yang mewakili karakter dalam font yang dipilihnya, lalu memberi tahu server X untuk menampilkan gambar tersebut.
Terkait:Gunakan kata sandi untuk melindungi file teks?

Lihat Apa tujuan dari berbagai jenis font XWindows? untuk diskusi tentang rendering teks sisi-klien dan sisi-server di bawah X11.

Apa yang terjadi antara server X dan Unit Pemrosesan Grafik (prosesor pada kartu video) sangat bergantung pada perangkat keras. Sistem sederhana memiliki pengambilan X server di wilayah memori yang disebut framebuffer, yang diambil oleh GPU untuk ditampilkan. Sistem canggih seperti yang ditemukan pada PC atau smartphone abad ke-21 memungkinkan GPU melakukan beberapa operasi secara langsung untuk kinerja yang lebih baik. Pada akhirnya, GPU mentransmisikan konten layar piksel demi piksel setiap sepersekian detik ke monitor.

Aplikasi mode teks, berjalan di terminal

Jika editor teks Anda adalah aplikasi mode teks yang berjalan di terminal, maka terminallah yang merupakan aplikasi untuk tujuan bagian di atas. Di bagian ini, saya menjelaskan antarmuka antara aplikasi mode teks dan terminal. Pertama saya menjelaskan kasus emulator terminal yang berjalan di bawah X11. Apa perbedaan yang tepat antara 'terminal', 'shell', 'tty' dan 'konsol'? mungkin latar belakang yang berguna di sini. Setelah membaca ini, Anda mungkin ingin membaca lebih detail Apa tanggung jawab setiap komponen Terminal-Pseudo (PTY) (perangkat lunak, sisi master, sisi budak)?

Masukan

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

Emulator terminal menerima kejadian seperti “Left ditekan saat Shift sedang turun”. Antarmuka antara emulator terminal dan aplikasi mode teks adalah terminal semu (pty) , perangkat karakter yang mengirimkan byte. Saat emulator terminal menerima peristiwa penekanan tombol, ia mengubahnya menjadi satu atau beberapa byte yang dapat dibaca aplikasi dari perangkat pty.

Karakter yang dapat dicetak di luar rentang ASCII ditransmisikan sebagai satu atau lebih byte tergantung pada karakter dan penyandian. Misalnya, dalam pengkodean UTF-8 dari kumpulan karakter Unicode, karakter dalam rentang ASCII dikodekan sebagai satu byte, sedangkan karakter di luar rentang tersebut dikodekan sebagai beberapa byte.

Penekanan tombol yang sesuai dengan tombol fungsi atau karakter yang dapat dicetak dengan pengubah seperti Ctrl atau Alt dikirim sebagai escape sequence . Urutan escape biasanya terdiri dari karakter escape (nilai byte 27 =0x1B =

Linux
  1. Apa itu Makefile dan bagaimana cara kerjanya?

  2. Cara mengarahkan output ke file dan stdout

  3. Bagaimana cara menampilkan teks berwarna ke terminal Linux?

  1. Apa itu Server Web, dan Bagaimana Cara Kerja Server Web?

  2. Cara Mengarahkan Output ke File dan Stdout di Linux

  3. Bagaimana opsi '-s', '-t', dan '-c' dari perintah tr bekerja di Unix?

  1. Ssh – Bagaimana Ssh Meminta Kata Sandi Saat Semua Input dan Output Dialihkan?

  2. Bagaimana Mendapatkan Input Dan Output Di Terminal Ke File Teks??

  3. Cara menyalin dan menempel di Putty