Библиотека сайта rus-linux.net
Цилюрик О.И. Модули ядра 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 |