#include <curses.h>
#include <unistd.h>
static struct termios initial_settings, new_settings;
static int peek_character = -1;
void init_keyboard();
void close_keyboard();
int kbhit();
int readch();
2. Π€ΡΠ½ΠΊΡΠΈΡ main Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ init_keyboard Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°, Π·Π°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΈΠΊΠ» ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π²ΡΠ·ΡΠ²Π°Ρ Π² Π½Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ kbhit. ΠΡΠ»ΠΈ Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ»Π°Π²ΠΈΡΠ° <q>, ΡΡΠ½ΠΊΡΠΈΡ close_keyboard Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ:
int main() {
int ch = 0;
init_keyboard();
while (ch != 'q') {
printf("looping\n");
sleep(1);
if (kbhit()) {
ch = readch();
printf("you hit %c\n", ch);
}
}
close_keyboard();
exit(0);
}
3. Π€ΡΠ½ΠΊΡΠΈΠΈ init_keyboard ΠΈ close_keyboard Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» Π² Π½Π°ΡΠ°Π»Π΅ ΠΈ ΠΊΠΎΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
void init_keyboard() {
tcgetattr(0, &initial_settings);
new_settings = initial_settings;
new_settings.c_lflag &= ~ICANON;
new_settings.c_lflag &= ~ECHO;
new_settings.c_lflag &= ~ISIG;
new_settings.c_cc[VMIN] = 1;
new_settings.c_cc[VTIME] = 0;
tcsetattr(0, TCSANOW, &new_settings);
}
void close_keyboard() {
tcsetattr(0, TCSANOW, &initial_settings);
}
4. Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠ°Ρ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ:
int kbhit() {
char ch;
int nread;
if (peek_character != -1) return 1;
new_settings.c_cc[VMIN] = 0;
tcsetattr(0, TCSANOW, &new_settings);
nread = read(0, sch, 1);
newrsettings.c_cc[VMIN] = 1;
tcsetattr(0, TCSANOW, &new_settings);
if (nread == 1) {
peek_character = ch;
return 1;
}
return 0;
}
5. ΠΠ°ΠΆΠ°ΡΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ readch, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΡΠ΅ΠΌ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ -1 ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ peek_character Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΊΠ»Π°:
int readch() {
char ch;
if (peek_character != -1) {
ch = peek_character;
peek_character = -1;
return ch;
}
read(0, &ch, 1);
return ch;
}
ΠΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (kbhit.c), ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄:
$ ./kbhit
looping
looping
looping
you hit h
looping
looping
looping
you hit d
looping
you hit q
$
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
Π’Π΅ΡΠΌΠΈΠ½Π°Π» Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ init_keyboard Π½Π° ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° (MIN=1, TIME=0). Π€ΡΠ½ΠΊΡΠΈΡ kbhit ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π²Π²ΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ Π²ΠΎΠ·Π²ΡΠ°Ρ (MIN=0, TIME=0) ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠΈΡΠ°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ, Π½ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΠ΅ Π΅Π³ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, Π³ΠΎΡΠΎΠ²ΡΠ΅ Π²Π΅ΡΠ½ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π² Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎ Π΅Π΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ
ΠΠ‘ Linux ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠΌΠΈ. ΠΠΊΡΠ°Π½, ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΈ ΠΌΡΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΠ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ΄ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ², Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π½Π° ΡΡΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅. ΠΠ±ΡΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΠ‘ Linux ΡΠ°ΡΡΡΠΈΡΠ°Π½Π° Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ 8 Π΄ΠΎ 12 Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»Π΅ΠΉ. ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ /dev/ttyN, Π³Π΄Π΅ N β Π½ΠΎΠΌΠ΅Ρ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΉΡΡ Ρ 1.
ΠΡΠ»ΠΈ Π²Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΠ΅ΡΡ Π² Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Linux Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ, Π²Π°ΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ°Π»Π΅Π΅ Π²Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΠ΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ. Π ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ Π²Π°ΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ β ΠΏΠ΅ΡΠ²Π°Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠΎΠ»Ρ, ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ /dev/tty1.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ who ΠΈ ps Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΡΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π»ΡΡ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π° ΡΡΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ:
$ who
neil tty1 Mar 8 18:27
$ ps -e
PID TTY TIME CMD
1092 tty1 00:00:00 login
1414 tty1 00:00:00 bash
1431 tty1 00:00:00 emacs
ΠΠ· ΡΡΠΎΠ³ΠΎ ΡΠΊΠΎΡΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ neil Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π»ΡΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΠ» ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Emacs Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΠ, ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ /dev/tty1.
ΠΠ±ΡΡΠ½ΠΎ ΠΠ‘ Linux Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ getty, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΌΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΡ ΡΠ΅ΡΡΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΡ , ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΡΠ΅ΡΡΡ ΡΠ°Π·, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΡΠΊΡΠ°Π½, ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΈ ΠΌΡΡΡ. Π£Π²ΠΈΠ΄Π΅ΡΡ ΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ps:
$ ps -Π°
PID TTY TIME CMD
1092 tty1 00:00:00 login
1093 tty2 00:00:00 mingetty
1094 tty3 00:00:00 mingetty
1095 tty4 00:00:00 mingetty
1096 tty5 00:00:00 mingetty
1097 tty6 00:00:00 mingetty
Π ΡΡΠΎΠΌ Π²ΡΠ²ΠΎΠ΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ getty Π΄Π»Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ SUSE, mingetty, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉΡΡ Π½Π° ΠΏΡΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΡ ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡ <Ctrl>+<Alt>+<FN>, Π³Π΄Π΅ N β Π½ΠΎΠΌΠ΅Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° Π²ΡΠΎΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»Ρ, Π½Π°ΠΆΠΌΠΈΡΠ΅ <Ctrl>+<Alt>+<F2>, ΠΈ <Ctrl>+<Alt>+<F1>, ΡΡΠΎΠ±Ρ Π²Π΅ΡΠ½ΡΡΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»Ρ. (ΠΡΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π° Π½Π΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ, ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ <Ctrl>+<FN>.)
ΠΡΠ»ΠΈ Π² Linux Π·Π°ΠΏΡΡΠ΅Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π»ΠΈΠ±ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ startx ΠΈΠ»Π½ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠΊΡΠ°Π½ΠΎΠ² xdm, Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ, ΠΎΠ±ΡΡΠ½ΠΎ /dev/tty7, ΡΡΠ°ΡΡΡΠ΅Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° X Window System. ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Ρ Π½Π΅Π΅ Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ, ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡ <Ctrl>+<Alt>+<FN>, Π° Π²Π΅ΡΠ½ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ <Ctrl>+<Alt>+<F7>.
Π ΠΠ‘ Linux ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅Π°Π½ΡΠ° X. ΠΡΠ»ΠΈ Π²Ρ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅ ΡΡΠΎ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
$ startx -- :1
Linux Π·Π°ΠΏΡΡΡΠΈΡ ΡΠ΅ΡΠ²Π΅Ρ X Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π° /dev/tty8, ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΡ <Ctrl>+<Alt>+<F8> ΠΈ <Ctrl>+<Alt>+<F7>.
ΠΠΎ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Ρ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅. ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΌΠΈ ΠΏΡΠ°Π²Π°ΠΌΠΈ, Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΠ²Π°ΡΡ, ΡΡΠΈΡΡΠ²Π°ΡΡ Ρ Π½ΠΈΡ Π΄Π°Π½Π½ΡΠ΅, ΠΏΠΈΡΠ°ΡΡ Π½Π° Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.
ΠΡΠ΅Π²Π΄ΠΎΡΠ΅ΡΠΌΠΈΠ½Π°Π»Ρ
Π£ ΠΌΠ½ΠΎΠ³ΠΈΡ UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ, Π²ΠΊΠ»ΡΡΠ°Ρ Linux, Π΅ΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ, ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠΌ. ΠΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠΈΠ΅ Π½Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Ρ Π½ΠΈΡ Π½Π΅Ρ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ Ρ Π½ΠΈΠΌΠΈ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠ² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΈΠ³ΡΠ°ΡΡΠΈΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ Π² ΡΠ°Ρ ΠΌΠ°ΡΡ, Π½Π΅ Π²Π·ΠΈΡΠ°Ρ Π½Π° ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ-ΠΈΠ³ΡΠΎΠΊΠΎΠΌ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠ΅Π΅ ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊ, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Ρ ΠΎΠ΄Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΡΠ΅Π²Π΄ΠΎΡΠ΅ΡΠΌΠΈΠ½Π°Π»Ρ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΠΌΠ°Π½ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΈΡ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.
ΠΠ΄Π½ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠ΅Π²Π΄ΠΎΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠ² (Π΅ΡΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»Π°) ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°Π²ΠΈΡΠ΅Π»Π° ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π‘Π΅ΠΉΡΠ°Ρ ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡ Single UNIX Specification (Π΅Π΄ΠΈΠ½ΡΠΉ ΡΡΠ°Π½Π΄Π°ΡΡ UNIX) ΠΊΠ°ΠΊ UNIX98 Pseudo-Terminals (ΠΏΡΠ΅Π²Π΄ΠΎΡΠ΅ΡΠΌΠΈΠ½Π°Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ° UNIX98) ΠΈΠ»ΠΈ PTY.
Π Π΅Π·ΡΠΌΠ΅
Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ Π²Ρ ΡΠ·Π½Π°Π»ΠΈ ΠΎ ΡΡΠ΅Ρ Π°ΡΠΏΠ΅ΠΊΡΠ°Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠΌ. Π Π½Π°ΡΠ°Π»Π΅ Π³Π»Π°Π²Ρ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΎΡΡ ΠΎΠ± ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠΏΠΎΡΠΎΠ±Π°Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³Π° Ρ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠΌ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΡ ΠΏΠΎΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π½Π° Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ Ρ Π΅Π³ΠΎ ΠΈΡΡΠΎΡΠΈΠ΅ΠΉ. ΠΠ°ΡΠ΅ΠΌ Π²Ρ ΡΠ·Π½Π°Π»ΠΈ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΈ ΡΡΡΡΠΊΡΡΡΠ΅ termios, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ Π² ΠΠ‘ Linux Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ½ΠΊΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠΌ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ terminfo ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎ-Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΌ ΡΡΠΈΠ»Π΅ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ Π½Π° ΡΠΊΡΠ°Π½, ΠΈ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ Ρ ΠΏΡΠΈΠ΅ΠΌΠ°ΠΌΠΈ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΡ. Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²Ρ ΡΠ·Π½Π°Π»ΠΈ ΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΡ ΠΈ ΠΏΡΠ΅Π²Π΄ΠΎΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°Ρ .
ΠΠ»Π°Π²Π° 6
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌΠΈ ΡΠΊΡΠ°Π½Π°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ curses
Π Π³Π»Π°Π²Π΅ 5 Π²Ρ ΡΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΡΠ»ΡΡΡΠΈΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄ΠΎΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΠΊΠ°ΠΊ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π²ΡΠ²ΠΎΠ΄ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, Π½Π΅ Π·Π°Π²ΠΈΡΡΡΠΈΠΌ ΠΎΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° (GTI ΠΈΠ»ΠΈ termios) ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ tparm ΠΈ ΡΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π΅ΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΡΠΎ ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.