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

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

Модератор: Olej

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

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

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

dmitriev писал(а):
vola писал(а):как корректно называть то, куда мы попадаем после Ctl + Alt + F2 ?
Вы вполне корректно называете это виртуальным терминалом. Есть даже команда chvt, то есть changevirtualterminal
К вашему вопросу "как называть"?
Называйте как хотите ;-) , здесь вопрос только в том, чтобы не спутывались понятия текстового терминала (виртуального терминала, текстовой консоли), которые до какого-то времени были основным понятием UNIX, и графического терминала (в системе X11), которые стали основным понятием после того времени :lol: . Чтоб однозначно было понятно о чём речь, потому как эти понятия принципиально различаются, и их смешение приводит к большой путанице (многие вещи, которые можно видеть и сделать в текстовой консоли, недоступны в графическом терминале ... да, впрочем, и наоборот).

Вот одно из изложений вопроса:
Виктор Костромин, "Linux для пользователя"
3.3. Консоль, виртуальные терминалы и оболочка
В некоторых семействах UNIX, Linux в частности, используется название виртуальный терминал. В других (FreeBSD) текстовой консоли приписывается смысл одного выделенного, 1-го терминала. В сообществах ещё других семейств UNIX (QNX, MINIX) используется по преимуществу термин текстовой консоли, чтоб всегда отличать консоль от графического терминала.

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

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

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

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

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

[olej@nvidia ~]# Xorg :1

А теперь возвращайтесь в X11 и там:

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

[olej@nvidia ~]$ ps ahx | grep Xorg
13037 tty8     Ss+    0:13 /usr/bin/Xorg :0 -br -verbose -auth /var/run/gdm/auth-for-gdm-df5fML/database -nolisten tcp
15674 tty7     Ss+    0:00 Xorg :1
15828 pts/9    S+     0:00 grep --color=auto Xorg
[olej@nvidia ~]$ DISPLAY=:1; xterm
...
Очень характерный результат! :
1. вы получили новый дополнительный (:1) дислей X11 ... новый X-сервер
2. можете запускать там приложения ... в показанном xterm будут вводиться и отрабатываться консольные команды...
3. НО! в этом эксперименте у вас есть новый Х-сервер, но нет над ним никакого оконного менеджера (хотя бы простейшего twm) - ваши окна приложений (xterm) не имеют рамок, органов управления (закрыть, развернуть, свернуть...), не могут перемещаться по полю экрана - все эти функции обеспечивает оконный менеджер, который совершенно независим от X-сервера...
И именно в этом смысле показательный эксперимент!

P.S. и именно поэтому я не могу скопировать и показать скриншот выполнения xterm.

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

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

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

Olej писал(а): Этим мы запускаем удалённое X-приложение (X-клиент) на LAN хосте
Это место очень интересное, потому, как Х сам по себе сетевой протокол + позволяет удалённые подключения Х-клиентов (приложений) ... и меня об этом неоднократно спрашивали, на тренингах для разработчиков embedded проектов, потому как такая возможность очень может помочь при отработке и отладке проектов ... и в других случаях.

Поэтому это стоит отдельного рассмотрения + этого естественного свойства Х, как оказывается, не так легко добиться :evil: . А потому, что дистрибьюторы Linux + GNOME/KDE из соображений якобы безопасности запускают Х-сервер так, чтобы он не прослушивал протокол TCP (порт 6000):

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

[olej@nvidia ~]$ ps ahx | grep Xorg
 2042 tty1     Ss+    0:03 /usr/bin/Xorg :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-aPUCsA/database -nolisten tcp vt1
 7363 pts/2    S+     0:00 grep --color=auto Xorg
1-я задача и состоит в том, чтобы перезапустить Х-сервер слушающим TCP - убрать вот то -nolisten.

1. в интегрированных графических средах десктопных дистрибытивов Linux - GNOME, KDE, etc., из-под которых стартует Хorg, т.е. когда вы не сами запускаете Х11 средствами XDM или startx - как это сделать сильно зависит от вида такого оконного менеджера...

2. ... и это очень противно и непросто :lol: , иначе не появлялись бы снова и снова публикации подобные вот этой (неплохой): http://saygak.com/post/tag/gdm - Ubuntu 11.04/11.10 X server -nolisten_tcp ...

3. в чуть более раннем GDM (CetnOS 5.2) была такая хорошая возможность (может и у вас есть?) как:

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

# gdmsetup        # - установить в менеджере разрешение TCP доступа
# gdm-restart     # - перезапустить Х систему 
4. у меня сейчас (в Fedora 14 из которой я пишу) такой возможности нет... поэтому лезем в файл /etc/gdm/custom.conf и вписываем там в пустой секции [security] :

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

[security]
DisallowTCP=false
После перезапуска GDM (или перезагрузке пользователя, системы... ;-) ) получаем тот прозрачный для сети Х-сервер, который нужен:

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

[olej@nvidia log]$ ps ahx | grep Xorg
 2063 tty1     Ss+    2:27 /usr/bin/Xorg :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-Xxm8lW/database vt1
 5598 pts/10   R+     0:00 grep --color=auto Xorg

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

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

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

Olej писал(а): После перезапуска GDM (или перезагрузке пользователя, системы... ;-) ) получаем тот прозрачный для сети Х-сервер, который нужен:
Но этого мало, и вы из сети к Х-серверу пе приконнектитесь, потому, что:

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

[olej@nvidia 01]$ xhost
access control enabled, only authorized clients can connect
SI:localuser:olej
- запрещён доступ (не авторизованным клиентам, кроме локального...)
Разрешаем ... либо с отдельного хоста, либо с группы хостов (192.168.1.9/24 например):

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

[olej@nvidia 02]$ xhost +192.168.1.9
192.168.1.9 being added to access control list
[olej@nvidia 02]$ xhost
access control enabled, only authorized clients can connect
INET:nvidia.localdomain
SI:localuser:olej
... либо даже со всех хостов:

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

[olej@nvidia 01]$ xhost +
access control disabled, clients can connect from any host
[olej@nvidia 01]$ xhost
access control disabled, clients can connect from any host
SI:localuser:olej
(вот таким образом + ещё другими возможностями Х11 должна обеспечиваться безопасность, а не отбитием протокола TCP!).

Мне чтоб не бегать меж компьютерами легче по SSH запуститься:

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

[olej@nvidia ~]$ ssh olej@192.168.1.22
olej@192.168.1.22's password:
Last login: Thu Dec  1 19:46:28 2011 from nvidia.localdomain
[olej@notebook ~]$ xterm -display 192.168.1.9:0.0
...
А дальше всё понятно из картинки:
xterm.png
xterm.png (13.16 КБ) 8832 просмотра
- приложение xterm запущего и выполняется на хосте LAN 192.168.1.22
- его всё GUI отрисовывается-вводится на Х-сервере на хосте 192.168.1.9
- никакого дополнительного тунелирования через другие протоколы (SSH как я показывал в примере удалённого Х на пред. стр. форума)...
- никаких логонов Х-сервер не знает и не предполагает при подключениях ... хоть 1000 клиентов :lol:
- дальше в xterm запускайте mc, из него запускайте другие приложения (к примеру) ... по наследованию они будут использовать тот же DISPLAY.

P.S.

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

[olej@notebook ~]$ xterm -display 192.168.1.9:0.0
и

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

[olej@notebook ~]$ export DISPLAY=192.168.1.9:0.0; xterm
- это 2 разных способа добиться одного и того же результата для X приложений... хотя по эффекту они отличаются, это разные способы ... для некоторых "самопальных" ;-) приложений способ с параметром -display может не работать (а переменная окружения отрабатывается библиотеками Х).

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

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

Непрочитанное сообщение vola » 03 дек 2011, 04:06

Да, с X примерно ясно, но я хочу всёже с системой TTY разобраться.
Я тут почитал вот это: http://ru.wikipedia.org/wiki/TTY-абстракция
Вообщем, исходя из статьи, концепция текстового терминала как двери в дом хороша, но есть слишком упрощённый взгдяд на tty с точко зрения юзера. Наверное лучше смотреть на tty с точки зрения ядра. А с его точки зрения tty - это устройство - честное устройство со своим драйвером(/dev/tty0, /dev/tty2 ...) Вообще, там в статье всё не плохо описано, но вот вкратце:
TTY - это телетайп(http://ru.wikipedia.org/wiki/Телетайп). Телетайп - это печатная машинка - передающая по проводам коды (ANSI) печатаемых символов. Сущетвуют немного более продвинутые варианты - где вместо бумаги - этран, например : http://ru.wikipedia.org/wiki/VT100 Такая машинка подключаеться к компьютеру через серийный порт (aka COM[n] aka /dev/ttyS[n] ) или компорт->модем->телефонная линия->модем->компорт , что с точки зрения ОС - одно и тоже. Я, например, это проверил : установил в моей win7 вирт. компорт:http://eterlogic.com/Downloads.html, назвал его COM2. В VirtualBox - в свойствах вирт машины - COM-порты - делаем "проброс" комторта основной ОС (COM2) на компорт гостевой ОС (/dev/ttyS1). Гостевая - это Ubuntu 11.10 - 64. Делее - эмулятор телетайпа http://www.emtec.com/zoc/index.html. Там - выбираем VT-100 и COM2 порт. При старте убунты по идее должна сработать getty - и вызвать программу login с вводом/выводом на устройство на компорту, но что-то не срослось. Тогда явно в убунту: sudo detty 9600 ttyS1. В эмуле телетайпа - приглашение логина. Логинимся. who:
andrew tty1 2011-12-03 00:07
andrew ttyS1 2011-12-03 01:13
andrew pts/0 2011-12-03 01:15 (:0)

Любопытно, кстати, наблюдать как работает mc - видно как обновляется построчечно (скорость 9600 бод).
Тоесть имея дома модем, подключённый к компорту, и телефону, я мог бы залогиниться на свою убунту с какогонибудь отделения связи - где есть телетайп (они вроде где-то ещё остались).

Так вот, мы берём и заменяем этот наш физический телетайп (/dev/ttyS1) + драйвер компорта на его программную эмуляцию, использующую клавиатуру - для ввода, и экран - для вывода. И, получившеяся программа(эмулятор видеотерминала см. статью) - и есть то виртуальное устройство которое видно как ./dev/tty[n]. В статье ещё говориться о псевдотерминале (PTY), но я пока не понял чем они отличаются (эмулятор видеотерминала и псевдотерминал).

Тоесть сейчас о tty я мыслю как об устройстве к которому подключены устройства ввода/вывода, и разруливающему какому процессу направлять ввод(активному, но не фоновому) и от какого забирать (отображать) вывод, ну а "двери" в систему - это программа login - запущенная "внутри" tty(тоесть направляющая ей свой ввод-вывод).

Конечно, не совсем понятно в этом случае что происходит когда я переключаюсь с одной tty на другую: значит ли это что я отключаю клавиатуру мышь и монитор от старого устройства tty и продключаю их на новое?

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

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

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

Olej писал(а):P.S. и именно поэтому я не могу скопировать и показать скриншот выполнения xterm.
Чтоб закончить вопрос:
- запускаем 2 Х-сервера (:0 & :1) ...
- на компьютере с 1-й видеокартой, монитором, мышкой... да ещё и очень капризной видео NVIDIA GT-520 с проприетарным драйверм-модулем...

Запуск (с консоли <Ctrl><Alt><4>) :

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

[olej@nvidia ~]# Xorg :1
...
Возвращаясь в <Ctrl><Alt><1>

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

[olej@nvidia ~]$ ps ahx | grep Xorg
 2063 tty1     Ss+    6:35 /usr/bin/Xorg :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-Xxm8lW/database vt1
 8056 tty7     Ss+    0:00 Xorg :1
 8579 pts/8    S+     0:00 grep --color=auto Xorg
[olej@nvidia ~]$ who
root     tty4         2011-12-03 01:31
root     tty6         2011-12-03 01:31
olej     tty1         2011-12-02 14:06 (:0)
...
[olej@nvidia ~]$ DISPLAY=:1 xterm
xterm:  fatal IO error 11 (Ресурс временно недоступен) or KillClient on X server ":1.0"
- последняя приписка - это уже после остановки сервера :1...
Итого xterm - запустился, без WM: без рамок окна, все прижаты к верхнему левому углу...
Уже из xterm хапускаю gnome-screenshot и сохраняю картинку (всё это Х-сервер :1).
Вложения
X_1.png
обратите внимание на курсор
(7.88 КБ) 7196 скачиваний

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

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

Непрочитанное сообщение Olej » 03 дек 2011, 04:30

vola писал(а):Наверное лучше смотреть на tty с точки зрения ядра. А с его точки зрения tty - это устройство - честное устройство со своим драйвером(/dev/tty0, /dev/tty2 ...)
А с точки зрения ядра :lol: - это единственный драйвер-модуль для поддержки всех 64-х устройств /dev/tty* ... более того, я вам по секрету скажу, ;-) - и 4 последовательных порта /dev/ttyS0-3 поддерживаются тем же модулем ядра.

Резюме: не нужно перед сном читать уж слишком научно-популярные изложения :lol:
vola писал(а): Вообще, там в статье всё не плохо описано, но вот вкратце:
...
Так вот, мы берём и заменяем этот наш физический телетайп (/dev/ttyS1) + драйвер компорта на его программную эмуляцию, использующую клавиатуру - для ввода, и экран - для вывода. И, получившеяся программа(эмулятор видеотерминала см. статью) - и есть то виртуальное устройство которое видно как ./dev/tty[n].
Это очень уж старо-дремучее изложение... когда-то так и было, но сильно давно.
Почитайте лучше изложение В.Костромина, я уже давал ссылку:
Olej писал(а): Вот одно из изложений вопроса:
Виктор Костромин, "Linux для пользователя"
3.3. Консоль, виртуальные терминалы и оболочка

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

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

Непрочитанное сообщение Olej » 03 дек 2011, 04:33

vola писал(а): Конечно, не совсем понятно в этом случае что происходит когда я переключаюсь с одной tty на другую: значит ли это что я отключаю клавиатуру мышь и монитор от старого устройства tty и продключаю их на новое?
Можно и так на это смотреть: залогоньтесь под разными именами на разных консолях и "попрыгайте" между ними, чтоб посмотреть...

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

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

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

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

vola писал(а):Вообще, там в статье всё не плохо описано, но вот вкратце:
TTY - это телетайп(http://ru.wikipedia.org/wiki/Телетайп). Телетайп - это печатная машинка - передающая по проводам коды (ANSI) печатаемых символов. Сущетвуют немного более продвинутые варианты - где вместо бумаги - этран, например : http://ru.wikipedia.org/wiki/VT100 Такая машинка подключаеться к компьютеру через серийный порт ...
... это настолько давняя модель терминальной системы UNIX, которую все пишущие переписывают друг у друга как "попка дурак", что эту модель ни Linux, ни Линус Торвальдс - просто не застали и не помнят... Это всё относится к UNIX на mini-computers: PDP-11, ... из отечественного производства: СМ-4, СМ-1420, Электроника-79. Там были действительно железные терминалы, тот же модели VT-100. Это отчётливо период 1970 - 1985.

К 1991г. Линус Торвальдс уже просто тупо переписал терминальную систему в Linux (из MINIX Таненбаума, где её тоже переписали из какого-то раннего Solaris :lol: ), когда в том Linux ещё не было реализации X11, и основой стали виртуальные терминалы, между которыми переключаемся <Alt><Fn> (а, вообще то, не <Ctrl><Alt><Fn>). Это эпоха для UNIX: 1985 - ~1995...1997, а для Linux, соответственно >1991 ;-).

3-й период - это повсеместное использование X11 (которое есть пользовательской надстройкой и к Linux, ядру, ... - не имеет никакого касательства). К этому времени основным смыслом слова терминал становится: графический терминал в системе X11. Многие пользователи Linux если и знают о существовании текстовой консоли, то понаслышке, и за годы пользования Linux так и не видели её в глаза (на сегодня она нужна, по-серьёзу, только разработчикам модулей ядра Linux).

Очень осторожно нужно относиться к термину терминал, потому что ним называли в разные времена очень различающиеся вещи :!:

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

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

Непрочитанное сообщение dmitriev » 03 дек 2011, 14:26

Оказывается, внутри одного виртуального терминала можно организовать многооконный интерфейс.
Прочтите, очень интересно: http://rus-linux.net/lib.php?name=/MyLD ... creen.html

Ответить

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

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

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