Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра Linux
Назад Окружение и инструменты Вперед

Подсистема X11, терминал и текстовая консоль

Ряд авторов утверждают, что графическая подсистема X11 не подходит как среда для разработки приложений ядра, для этого годится только текстовая консоль ... хотя дальше они же сами и отказываются от такого своего утверждения и показывают примеры, выполняемые в графическом терминале X11. Тем не менее, нужно отчётливо представлять соотношения текстовых и графических интерфейсов в Linux и их особенностей и ограничений.

= = = = = = = = = =

здесь Рис.3 : место графической подсистемы X11 в системе Linux.

= = = = = = = = = =

Графическая подсистема X11 (в реализациях X11R6 или Xorg) не является составной частью операционной системы Linux (UNIX), а является надстройкой пользовательского уровня (даже для работы с видео оборудованием использующей работу с видеоадаптером API пользовательского уровня). Это принципиально отличает Linux от систем семейства Windows. О системе графической X11 нужно знать и постоянно помнить следующее:

а). Это надстройка над операционной системой, работающая в пользовательском адресном пространстве.

б). Протокол X (пользовательского уровня модели OSI), по которому взаимодействуют X-клиент (GUI приложения) и X-сервер (графическая подсистема), является сетевым протоколом; грубые нарушения в настройках и функционировании сети могут приводить к потере работоспособности графической подсистемы.

в). Сетевой протокол X может использовать в качестве транспортного уровня альтернативно различные протоколы, в частности: TCP/IP и потоковый доменный протокол UNIX (UND).

г). Вывод (и ввод) на терминал (в графической системе X11) проходит через множество промежуточных слоёв, в отличие от текстовой консоли, и может значительно отличаться по поведению при работе с программами ядра.

Далее, в силу её значимости для отработки программ ядра, возвратимся к текстовой консоли. Число текстовых консолей (обычно по умолчанию 6) в Linux (в отличие, например, от FreeBSD) — величина легко изменяемая. При работе с программами ядра число консолей может понадобится значительно увеличить... В некоторых более старых дистрибутивах (и других UNIX системах) используется хорошо описанный способ — конфигурационный файл /etc/inittab:

$ uname -r

2.6.18-92.el5

$ cat /etc/inittab

	...
	# Run gettys in standard runlevels
	1:2345:respawn:/sbin/mingetty tty1
	2:2345:respawn:/sbin/mingetty tty2
	3:2345:respawn:/sbin/mingetty tty3
	4:2345:respawn:/sbin/mingetty tty4
	5:2345:respawn:/sbin/mingetty tty5
	6:2345:respawn:/sbin/mingetty tty6
	...

Значения полей следующие: идентификатор записи, уровень (или уровни) выполнения (runlevels), для которого эта запись имеет силу, акция, выполняемая при этом, и собственно исполняемая команда (в данном случае - команда авторизации консоли mingetty). Добавление новых строк будет давать нам новые консоли.

Но в некоторых новых дистрибутивах файл /etc/inittab практически пустой:

# uname -r

2.6.32.9-70.fc12.i686.PAE

# cat /etc/inittab

	...
	# Terminal gettys (tty[1-6]) are handled by /etc/event.d/tty[1-6] and
	# /etc/event.d/serial
	...

В этом варианте начальная инициализация консолей, как нам и подсказывает показанный комментарий, происходит в каталоге :

# ls /etc/event.d/tty*

tty1 tty2 tty3 tty4 tty5 tty6

# cat /etc/event.d/tty6

	...
	respawn
	exec /sbin/mingetty tty6
	...

Как и в предыдущем случае, создание дополнительных консолей очевидно: а). создайте новый файл /etc/event.d/tty7 (и т. д.) , б). скопируйте в него содержимое /etc/event.d/tty6 и в). подредактируйте в показанной строке номер соответствующего tty...

Для проверки того, сколько сейчас активных консолей, у вас в арсенале есть команда:

$ fgconsole

7

- 6 текстовых + X11, не удивляйтесь, если в некоторых дистрибутивах (новых) вы получите странный результат, например, число 3 : команда даёт число открытых консолей, на которых уже произведен logon!

Сколько много может быть создано текстовых консолей в системе? Максимальное число — 64, поскольку для устройств tty* статически зарезервирован диапазон младших номеров устройств до 63 :

$ ls /dev/tty*

	/dev/tty    /dev/tty16  /dev/tty24  /dev/tty32  /dev/tty40  /dev/tty49  /dev/tty57  /dev/tty8
	/dev/tty0   /dev/tty17  /dev/tty25  /dev/tty33  /dev/tty41  /dev/tty5   /dev/tty58  /dev/tty9
	...
	/dev/tty14  /dev/tty22  /dev/tty30 /dev/tty39  /dev/tty47  /dev/tty55  /dev/tty63
	/dev/tty15  /dev/tty23  /dev/tty31 /dev/tty4   /dev/tty48  /dev/tty56  /dev/tty7

$ ls -l /dev/tty63

crw-rw---- 1 root tty 4, 63 Мар 12 10:15 /dev/tty63

Последний вопрос: как бегло переключаться между большим числом консолей?

1. Посредством клавиатурной комбинации <Ctrl>+<Alt>+<Fi> - где i — номер функциональной клавиши: 1...12.

2. В режиме текстовой консоли во многих дистрибутивах по клавише PrintScreen включено «пролистывание» активизированных консолей, начиная с первой.

3. Самый универсальный способ — команда (смена виртуального терминала):

# chvt 5

- которая переносит нас в ту консоль, номер которой указан в качестве ее аргумента. Эта команда может потребовать root привилегий, и может вызвать недоумение сообщением:

$ chvt 2

chvt: VT_ACTIVATE: Операция не позволяется

Пример того, как получить информацию (если забыли) кто, как и где зарегистрирован в системе, и как эту информацию толковать:

$ who

	root     tty2         2011-03-19 08:55
	olej     tty3         2011-03-19 08:56
	olej     :0           2011-03-19 08:22
	olej     pts/1        2011-03-19 08:22 (:0)
	olej     pts/0        2011-03-19 08:22 (:0)
	olej     pts/2        2011-03-19 08:22 (:0)
	olej     pts/3        2011-03-19 08:22 (:0)
	olej     pts/4        2011-03-19 08:22 (:0)
	olej     pts/5        2011-03-19 08:22 (:0)
	olej     pts/6        2011-03-19 08:22 (:0)
	olej     pts/9        2011-03-19 09:03 (notebook)

- здесь:

а) 2 (строки 1, 2) - регистрации в текстовых консолях (# 2 и 3) под разными именами (root и olej);

б) X11 (строка 3) - регистрация (консоль #7, CentOS 5.2 ядро 2.6.18);

в) 7 открытых графических терминалов в X11, дисплей :0;

г) одна удалённая регистрация по SSH (последняя строка) с компьютера с именем notebook.


Предыдущий раздел: Оглавление Следующий раздел:
Системные файлы   Компилятор GCC