виртуальный терминал (vt aka tty). Вопросы.

Вопросы программного кода и архитектуры Linux

Модератор: Olej

vola
Интересующийся
Сообщения: 4
Зарегистрирован: 30 ноя 2011, 18:00
Контактная информация:

виртуальный терминал (vt aka tty). Вопросы.

Непрочитанное сообщение vola » 30 ноя 2011, 23:01

Доьрый день.
Вот пытаюсь понять концепцию виртуальных терминалов в Linux. Появились вопросы - хотел бы их задать:

-1. Мы начали загружаться - и видим графическую загрузку Ubuntu. Иксы
ещё не стартовали. Что отвечает за графический вывод ?
0. Вот мы загрузились и видим перед собой gdm (kdm). Работает ли X сервер в этот момент?
1. Я так понимаю что со старта - Ubuntu запускает семь (default) вирт. терминалов, на одном из которых (седьмой по-умолчанию) - запускается gdm + X11. Может ли на одном vt быть запущено более одного X сервера одновременно(довустим они настроены для работы каждый со своей видеокартой и мониторами)?
2. Можем ли мы запустить ещё один X сервер на другом vt если на vt7 X сервер уже запущен? а) для одного и тогоже пользователя б) для разных пользователей
3. Вот мы залогинились на vt1 и vt2 под одним и тем же пользователем. Сессии. Это одна и таже сессия или две разных ?
4. Я так понимаю что залогинившись и под собой в vt7 и перейдя в vt1, опять же под собой, я могу погасить иксы на vt7 сделав sudo service gdm stop. Как так получаеться что я могу достучаться до программы запущеной с другого vt? Или это только типа "сервисы" шаряться между разными vt ? Или как вообще?
6. Где можно посмотреть схему как связаны между собой - множество экземпляров vt, множество экземпляров X серверов, множество сессий , множество видеоадаптеров (и их драйверов)?

Спасибо.

dmitriev
Писатель
Сообщения: 461
Зарегистрирован: 12 янв 2009, 19:36
Контактная информация:

Re: виртуальный терминал (vt aka tty). Вопросы.

Непрочитанное сообщение dmitriev » 01 дек 2011, 06:31

-1. Где же там графическая? Там одни буковки - это текстовый режим. А заставку можно, например, закодировать по пикселям.

0. У разных дистрибутивов немного разный сценарий загрузки. Не знаю как в Ubuntu. Посмотрите сами. Для этого перейдите в любой другой vt и запустите команду pstree -cup увидите все процессы в виде дерева.

1. Нет.

2. Только если они настроены для работы каждый со своей видеокартой и мониторами.

3. Опять поможет команда pstree -cup у каждого процесса есть уникальный номер.

4. Вообще: у каждого процесса есть один хозяин. Вы можете делать что угодно с вашими собственными процессами (и неважно из какого vt). А root может работать со всеми процессами.

6. При помощи команды pstree -cup.

Не придавайте вы виртуальным терминалам мистического значения - это просто семь дверей одного дома. В доме все идет своим чередом, независимо от того в какую из дверей вы вошли.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: виртуальный терминал (vt aka tty). Вопросы.

Непрочитанное сообщение Olej » 01 дек 2011, 14:55

dmitriev писал(а): Не придавайте вы виртуальным терминалам мистического значения - это просто семь дверей одного дома.
Именно так. Потому как система X и всё, что связано с GUI - в UNIX (Linux):
- это "внешняя" пользовательская подсистема ... даже работу с портами видеоадаптера (драйвера видеоадаптера) X11 производит в юзерспейс, не используя пространство ядра, модули etc. (не считая каких-то дополнительных проприетарных заморочек, например NVIDIA, ...);
- эта внешняя надстройка X11 может быть в системе, а может её и вовсе не быть (часто в серверах) - от этого системы не убудет... а вот GUI без ядра или консольной терминальной системы быть не может;
- X11 вообще принципиально сетевая система (и X - сетевой протокол):

Код: Выделить всё

[olej@notebook etc]$ cat /etc/services | grep ' X '
xdmcp           177/tcp                         # X Display Mgr. Control Proto
x11             6000/tcp        X               # the X Window System
xfs             7100/tcp        font-service    # X font server
gss-xlicen      128/tcp                 # GSS X License Verification
gss-xlicen      128/udp                 # GSS X License Verification
font-service    7100/udp                # X Font Service
- и X-сервера задача только прослушивать сетевой порт (UND или TCP) и отрабатывать по нему протокол (пользовательского уровня модели OSI);
vola писал(а): -1. Мы начали загружаться - и видим графическую загрузку Ubuntu. Иксы
ещё не стартовали. Что отвечает за графический вывод ?
Наличие графического вывода вовсе не означает (не связано) с X11 - переведите сами видеоадаптер (записью по портам) в графический видеорежим - и будет вам счастье :lol:, некоторые программы так и делают, простейший пример - загрузчик GRUB, который прорисовывает графический экран, вот такую картинку:

Код: Выделить всё

[olej@notebook grub]$ sudo cat /boot/grub/menu.lst | grep image
splashimage=(hd0,0)/grub/splash.xpm.gz

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: виртуальный терминал (vt aka tty). Вопросы.

Непрочитанное сообщение Olej » 01 дек 2011, 15:22

vola писал(а): 1. Я так понимаю что со старта - Ubuntu запускает семь (default) вирт. терминалов, на одном из которых (седьмой по-умолчанию) - запускается gdm + X11. Может ли на одном vt быть запущено более одного X сервера одновременно(довустим они настроены для работы каждый со своей видеокартой и мониторами)?
Не вирт. терминалов(с) а текстовых консолей.
В Linux (в отличие, например, от FreeBSD, как мне помнится?) число таких консолей — величина легко изменяемая динамически (настройками, в ходе работы, без пересборки ядра).
В старой системе конфигурирования это было:

Код: Выделить всё

$ 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
...
Сейчас вы увидите этот файл практически пустым, указывающим только дефаултный уровень старта:

Код: Выделить всё

[olej@notebook etc]$ cat /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/event.d/rcS
#
# Individual runlevels are started by /etc/event.d/rc[0-6]
#
# Ctrl-Alt-Delete is handled by /etc/event.d/control-alt-delete
#
# Terminal gettys (tty[1-6]) are handled by /etc/event.d/tty[1-6] and
# /etc/event.d/serial
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(8), initctl(8), and events(5).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:5:initdefault:
Или его просто нет (Ubuntu 10.4):

Код: Выделить всё

olej@atom:/etc$ cat /etc/inittab
cat: /etc/inittab: Нет такого файла или каталога
Зато, в зависимости от системы конфигурирования вы можете найти что-то подобное:
- в Fedora:

Код: Выделить всё

[olej@notebook event.d]$ pwd
/etc/event.d
[olej@notebook event.d]$ ls tty*
tty1  tty2  tty3  tty4  tty5  tty6
[olej@notebook event.d]$ cat tty1
# tty1 - getty
#
# This service maintains a getty on tty1 from the point the system is
# started until it is shut down again.

start on stopped rc2
start on stopped rc3
start on stopped rc4

stop on runlevel 0
stop on runlevel 1
stop on runlevel 6

respawn
exec /sbin/mingetty tty1
- в Ubuntu:

Код: Выделить всё

olej@atom:/etc/init$ pwd
/etc/init
olej@atom:/etc/init$ ls tty*
tty1.conf  tty2.conf  tty3.conf  tty4.conf  tty5.conf  tty6.conf
olej@atom:/etc/init$ cat tty1.conf
# tty1 - getty
#
# This service maintains a getty on tty1 from the point the system is
# started until it is shut down again.

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty -8 38400 tty1
Добавьте туда новый файл (tty7), копируя из предыдущих, и вы будете стартовать больше консолей, до максимального числа — 64, по числу зарезервированных имён в /dev:

Код: Выделить всё

olej@atom:/etc/init$ ls /dev/tty*
/dev/tty    /dev/tty13  /dev/tty19  /dev/tty24  /dev/tty3   /dev/tty35  /dev/tty40  /dev/tty46  /dev/tty51  /dev/tty57  /dev/tty62  /dev/ttyS1
/dev/tty0   /dev/tty14  /dev/tty2   /dev/tty25  /dev/tty30  /dev/tty36  /dev/tty41  /dev/tty47  /dev/tty52  /dev/tty58  /dev/tty63  /dev/ttyS2
/dev/tty1   /dev/tty15  /dev/tty20  /dev/tty26  /dev/tty31  /dev/tty37  /dev/tty42  /dev/tty48  /dev/tty53  /dev/tty59  /dev/tty7   /dev/ttyS3
/dev/tty10  /dev/tty16  /dev/tty21  /dev/tty27  /dev/tty32  /dev/tty38  /dev/tty43  /dev/tty49  /dev/tty54  /dev/tty6   /dev/tty8
/dev/tty11  /dev/tty17  /dev/tty22  /dev/tty28  /dev/tty33  /dev/tty39  /dev/tty44  /dev/tty5   /dev/tty55  /dev/tty60  /dev/tty9
/dev/tty12  /dev/tty18  /dev/tty23  /dev/tty29  /dev/tty34  /dev/tty4   /dev/tty45  /dev/tty50  /dev/tty56  /dev/tty61  /dev/ttyS0
По поводу
vola писал(а): на одном из которых (седьмой по-умолчанию) - запускается gdm + X11.
Это не точно, это зависит от конфигурирования запуска X11: в Ubuntu это 7-я (Ctrl+Alt+F7), а в Fedora это 1-я (Ctrl+Alt+F7):

Код: Выделить всё

[olej@notebook event.d]$ who
olej     tty1         2011-12-01 11:20 (:0)
...
- одно из пользовательских приложений, стартовавших с консоли 1!

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: виртуальный терминал (vt aka tty). Вопросы.

Непрочитанное сообщение Olej » 01 дек 2011, 15:42

vola писал(а): 2. Можем ли мы запустить ещё один X сервер на другом vt если на vt7 X сервер уже запущен? а) для одного и тогоже пользователя б) для разных пользователей
Это весьма проблематично, ... потому как X-сервер - это сетевая прослушивающая система, которая поддерживает (монопольно!) физическое оборудование в составе: устройство отображения (видеоадаптер) + устройства ввода (клавиатура, мышь).

Если вы каким-то изощрённым образом создадите такой комплект устройств ввода-вывода для X-сервера (ну, например, /dev/ttyS0 для клавиатуры - сериальный терминал VT-100 ;-) ), то, наверное сможете запустить X-сервер для обслуживания такого оборудования.

Менеджеры gdm/kdm, которые вы упомнили, это менеджеры оконных систем, это слой существенно уже выше, чем сам X-сервер ... который запускался вот так:

Код: Выделить всё

olej@atom:/etc/init$ ps -Af | grep X
root      1142  1045  0 14:01 tty7     00:00:02 /usr/bin/X :0 -br -verbose -auth /var/run/gdm/auth-for-gdm-c8ZMfX/database -nolisten tcp vt7
olej     26509  3224  0 14:32 pts/1    00:00:00 grep --color=auto X


Один из (самый простой) способ запуска X11 был используя startx ... можете поизучать его man:

Код: Выделить всё

olej@atom:/etc/init$ which startx
/usr/bin/startx
olej@atom:/etc/init$ man startx
STARTX(1)                                                                                                                                          STARTX(1)
NAME
       startx - initialize an X session
SYNOPSIS
       startx [ [ client ] options ... ] [ -- [ server ] [ display ] options ... ]
...
- это показано в Ubuntu 10.4.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: виртуальный терминал (vt aka tty). Вопросы.

Непрочитанное сообщение Olej » 01 дек 2011, 16:14

vola писал(а):Вот пытаюсь понять концепцию виртуальных терминалов в Linux. Появились вопросы - хотел бы их задать:
Я как-то вообще не понял: а что такое концепция виртуальных терминалов (с) и что такое вообще виртуальные терминалы?
Может имелось в виду обсуждение псевдотерминалов? /dev/pts:

Код: Выделить всё

olej@atom:/dev$ ls -l /dev/pts
итого 0
crw--w---- 1 olej tty  136, 0 2011-12-01 15:11 0
crw--w---- 1 olej tty  136, 1 2011-12-01 15:11 1
crw--w---- 1 olej tty  136, 2 2011-12-01 14:38 2
c--------- 1 root root   5, 2 2011-12-01 14:01 ptmx
olej@atom:/dev$ man pts
PTS(4)                                                            Linux Programmer's Manual                                                           PTS(4)
NAME
       ptmx and pts - pseudo-terminal master and slave
...
Терминальная подсистема UNIX - одна из давних, очень развитых и разветвлённых систем... В последние времена, правда, она несколько утратила своё значение (широту прикладного использования? ;-) ), из-за ... неиспользования множественных удалённых терминалов (?).
Вот здесь попалось поверхностное, но хорошее для начала введение в предмет: http://ru.wikibooks.org/wiki/Введение_в ... трока_UNIX.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: виртуальный терминал (vt aka tty). Вопросы.

Непрочитанное сообщение Olej » 01 дек 2011, 18:05

vola писал(а): 2. Можем ли мы запустить ещё один X сервер на другом vt если на vt7 X сервер уже запущен? а) для одного и тогоже пользователя б) для разных пользователей
3. Вот мы залогинились на vt1 и vt2 под одним и тем же пользователем. Сессии. Это одна и таже сессия или две разных ?
4. Я так понимаю что залогинившись и под собой в vt7 и перейдя в vt1, опять же под собой, я могу погасить иксы на vt7 сделав sudo service gdm stop. Как так получаеться что я могу достучаться до программы запущеной с другого vt? Или это только типа "сервисы" шаряться между разными vt ? Или как вообще?
Вопросы то - хорошие ;-) ... не тривиальные...

Прежде всего, посмотрите вот этот текст: Инструменты Linux для Windows-программистов - там затронуты (может не совсем достаточно) часть из заданных вопросов...

А далее ...
Сам X-сервер не знает ни о каких пользователях, не предусматривает никаких логонов... То, что вы видите как логон на входе - это уже действие оконного менеджера, более высокого уровня надстройки. Убедиться в этом легко так:

Код: Выделить всё

[olej@notebook ~]$ uname -n
notebook.localdomain
[olej@notebook ~]$ ip addr show wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:13:02:69:70:9b brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.22/24 brd 192.168.1.255 scope global wlan0
    inet6 fe80::213:2ff:fe69:709b/64 scope link
       valid_lft forever preferred_lft forever
[olej@notebook ~]$ ssh -nfX -l olej 192.168.1.9 xterm
olej@192.168.1.9's password: 
[olej@notebook ~]$ 
Этим мы запускаем удалённое X-приложение (X-клиент) на LAN хосте 192.168.1.9, но выполняем эту команду в терминале, но, что самое главное, с последующим отображением (вывода и ввода) на X-сервер хоста 192.168.1.22, что хорошо видно на скриншоте этого xterm:
xterm.png
xterm.png (9.86 КБ) 12894 просмотра
P.S. там правда проскочил запрос: password ... но это кто запросил? правильно, ssh для открытия сессии - это не должно смущать, никакого касательства к логону к коннекту к X-серверу это не имеет ни малейшего касательства.
P.P.S. обратите внимание, что на выводе who в xterm ещё нет сессии gdm на /dev/tty1 :!: - хост nvidia у меня висел в это время на начальном логоне gdm :!:

vola
Интересующийся
Сообщения: 4
Зарегистрирован: 30 ноя 2011, 18:00
Контактная информация:

Re: виртуальный терминал (vt aka tty). Вопросы.

Непрочитанное сообщение vola » 01 дек 2011, 20:46

Да да, кажется начинаю понимать. Тоесть есть дом - а в нём процессы(у каждого свой хозяин) - и это главное, двери - посто средство входа в дом - не более - и войдя в дом система неизбежно знает кто я - чтобы определять что я могу в доме делать а что нет. (Я проверил - будучи залогиненным под разными vt - успешно убил процесс, стартовавший из другого vt). До смешного просто - но это было не очевидно до метафоры дверей в голове. И вот who - как раз и показывает кто в системе, и через какую дверь вошёл(tty/сеть/X).
Пока, правда, трудно понять почему я не могу стартовать два X сервера с одного vt, но с двух разных - можно(исхитрившись). Полагаю, дело не в каких-то непонятных свойствах vt(как я думал раньше), а именно в реализации X сервера - тоесть он как - то зависит от способа входа (двери) через которую я вошёл - и не даёт сапустить второй инстанс. Я к тому что можно, например, написать свою реализацию X которая позволяла бы это сделать с одного vt (раздав каждому свои устойства ввода-вывода и порты прослушки).
Не вирт. терминалов(с) а текстовых консолей.
Кстати, как корректно называть то, куда мы попадаем после Ctl + Alt + F2 ?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: виртуальный терминал (vt aka tty). Вопросы.

Непрочитанное сообщение Olej » 01 дек 2011, 22:24

vola писал(а):
Не вирт. терминалов(с) а текстовых консолей.
Кстати, как корректно называть то, куда мы попадаем после Ctl + Alt + F2 ?
Текстовая консоль №2 ;-)
Которых может быть до 64-х.
И число которых залогиненных (! - не те все 6, которые создаются статически по дефаулту, а те, которые из них используются) можно посмотреть:

Код: Выделить всё

[olej@notebook ~]$ fgconsole
1
- это в отличие от X11 терминалов, которых может быть сколь угодно ... типа разнообразных:

Код: Выделить всё

[olej@notebook ~]$ which Terminal
/usr/bin/Terminal
[olej@notebook ~]$ which xterm
/usr/bin/xterm
[olej@notebook ~]$ ls /usr/bin/*term*
/usr/bin/gnome-terminal  /usr/bin/lxterminal  /usr/bin/pterm    /usr/bin/terminal  /usr/bin/xfterm4
/usr/bin/koi8rxterm      /usr/bin/ppmtoterm   /usr/bin/setterm  /usr/bin/uxterm    /usr/bin/xterm
и разных других ;-) (в KDE etc.)

А переключаться между которыми можно (а как вы переключитесь на 21-ю консоль, когда у вас <Ctrl>+<Alt>+<F21> нет такой клавиши <F21> :?: ):

Код: Выделить всё

[olej@notebook ~]$ chvt 5
chvt: VT_ACTIVATE: Операция не позволяется
[olej@notebook ~]$ sudo chvt 5
[olej@notebook ~]$
- я специально показал, что без root этот номер не проходит ;-)
P.S. интересный эффект, если при 6-ти дефаулнтых консолях сказать :lol: :

Код: Выделить всё

[olej@notebook ~]$ sudo chvt 15
[olej@notebook ~]$

dmitriev
Писатель
Сообщения: 461
Зарегистрирован: 12 янв 2009, 19:36
Контактная информация:

Re: виртуальный терминал (vt aka tty). Вопросы.

Непрочитанное сообщение dmitriev » 02 дек 2011, 05:15

vola писал(а):трудно понять почему я не могу стартовать два X сервера с одного vt, но с двух разных - можно(исхитрившись)
Потому что в том vt, где уже запущены иксы, нет командной строки.

Перейдите в tty7, куда там команду вписывать?

vola писал(а):как корректно называть то, куда мы попадаем после Ctl + Alt + F2 ?
Вы вполне корректно называете это виртуальным терминалом. Есть даже команда chvt, то есть changevirtualterminal

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей