Как проверить, какой tty я сейчас использую?


22

В нашей системе можно использовать 7 терминалов. tty7основан на графическом интерфейсе.

Как я могу узнать, какой tty я сейчас использую?

как, tty1, tty2 .... tty6?


Почему вы утверждаете, что это «оч» в комментариях? Это полностью отличается от того, что вы спрашиваете здесь. Сессия в графическом интерфейсе не является tty.
Rinzwind

1
Я запутался в этой концепции, поэтому
luv.preet

Ответы:


30

Есть несколько способов узнать это. Я бы пошел с who am i(не who) командой:

$ who am i
ravexina    tty2        2017-04-10 11:19 (:0)

Когда я в графическом терминале, он будет возвращать что-то вроде:

ravexina    pts/0        2017-04-10 1:19 (:0)

В сеансе ssh с использованием графического терминала результат тот же, но вместо (: 0) я получу IP-адрес моей машины (192.168.xx). другие команды типа w, who, pgrep,ps и т.д. полезны тоже.

Например, чтобы узнать, на каком компьютере работает ttyмой графический интерфейс:

ps $(pgrep Xorg)

Что в моем случае, потому что я не использую диспетчера дисплеев, как gdm или slim, он выдаст:

 PID  TTY      STAT   TIME COMMAND
 1693 tty1     Sl     0:05 /usr/lib/xorg/Xorg

4
+1, хотя в mate-Terminal who am iничего не возвращает и whoamiвозвращает zanna(пока whoвозвращает все сеансы (я помню связанный вопрос (который оказался без ответа), где мы заметили, что разные эмуляторы производили разные выходные данные who)).
Занна

graphic всегда будет использовать tty7, так как это единственная 1, которая обеспечивает графическую поддержку
luv.preet

1
@Zanna Я сам сталкиваюсь с этой ситуацией, но думаю, стоит упомянуть.
Равексина

1
в любом случае, who am iвсегда будет хорошо работать в vt, и pgrepэто очень умно (вы можете использовать $()синтаксис для под-обратных команд, может быть немного запутанным в уценке), так что ваш ответ очень хороший, и кто бы ни понизил его, это не следовало делать ...
Занна

1
@ luv.preet, это выходит за рамки вашего вопроса, но вы увидите разницу между pts и tty :) - пост, дубликат которого содержит дубликат, - потрясающий ответ
Zanna

14

использование tty команду.

Если я прав, это ссылка:

/dev/tty1 - tty1
/dev/tty2 - tty2
/dev/tty3 - tty3
/dev/tty4 - tty4
/dev/tty5 - tty5
/dev/tty6 - tty6

это показывает оч / 18.
luv.preet

этот оч может быть запущен в tty, не так ли? Как я могу это знать?
luv.preet

5
@ luv.preet, это ваш терминал. Смотрите "Разница между очками и tty" .
Чай Т. Рекс,

4
ptsозначает, что вы используете терминал из GUI или через SSH
lithium_js

3
Вам нужно будет задать новый вопрос для этого.
Чай Т. Рекс,

6

Давайте сделаем шаг назад и начнем с путаницы: что такое tty? Первоначально tty был аббревиатурой телетайпа, который стал стеклянным телетайпом, который стал любым терминалом или соединением с ним, в частности, с последовательным портом (они все еще существуют, чаще всего / dev / ttyS0, / dev / ttyUSB0 и иногда / dev / ttyacm0). Тогда вы получили псевдо-тты и виртуальные тты. Старые руки Unix знакомы с псевдо-тисами, которые используются для удаленных терминалов (ssh и telnet), виртуальных терминалов (xterm и т. п.) и терминальных мультиплексоров (screen и tmux). У псевдотишей со временем были разные схемы именования, но текущая использует такие имена, как / dev / pts / 0. Виртуальные ttys, с другой стороны, связаны с виртуальными консолями, в частности, когда вы используете функциональные клавиши control и alt, вы переключаете виртуальные консоли, каждая из которых связана с виртуальным tty.

Так что, если вам нужно найти свой псевдотерминал (или виртуальный телетайп при использовании текстового режима), существуют всевозможные решения, например, who am iили ps ax|grep $$это относительно легко сделать, так как существует несколько способов узнать это, так как псевдотерминал открывается на стандартном io. в большинстве случаев существуют и другие методы, которые работают даже при перенаправлении io. это также имеет то преимущество, что при использовании последовательных портов и виртуальных ttys все происходит правильно, если вы не используете графические эмуляторы терминала или терминальные мультиплексоры.

Но что, если вы хотите идентифицировать виртуальную консоль? sudo fgconsoleможет быть полезно для интерактивных случаев. Или то, что я делаю, это просто хожу по консолям, так как переключение обычно достаточно быстрое. Я не знаю ни о каком программном методе, который надежно работает в неинтерактивных или непрофильных случаях.

Давайте рассмотрим пример, который гарантированно не сможет ответить на виртуальную консоль когда-либо. На компьютере, с которым я сижу (альфа), есть Xserver, работающий на tty2 (: 1), у меня три открытых окна, два xterms и vncviewer (подключен к bravo: 2). На одном xterm работает экран, на другом - ssh charley. Экран имеет два открытых окна, ssh delta и who (кто правильно идентифицирует псевдотекст во втором столбце и предоставляет подсказку (:1:S0)в пятом столбце, который говорит нам, что псевдотетти подключен к первому сеансу экрана, который подключен ко второму X-серверу, но не дает никакой информации виртуальной консоли). Запуск, кто в течение любого сеанса SSH дает подсказку(alpha)который идентифицирует машину, с которой пришел ssh-сеанс, и который сравнительно хорош для удаленных сессий. Хотя имеется мало информации о том, что связано с псевдотерминалом (и абсолютно отсутствует виртуальная консоль или даже информация об удаленном tty), по крайней мере, удаленный хост идентифицирован. информация об экране может быть неправильной, поскольку сеансы экрана являются отсоединяемыми, а vnc вообще не предоставляет полезной информации, поскольку единственное различие между сеансом vnc и локальным сеансом - это номер дисплея. Во многих случаях вы можете предположить, что: 0 находится на tty7, но не всегда, и никогда на моем, так как у bravo вообще нет видеокарты, а: 0 - это сеанс vnc (который сбивает с толку, кто, так как считает, что это локальная консоль) и ни одна из машин не использует tty7 в качестве графического сеанса, потому что я (не просто для того, чтобы быть противоположным) сбрасываю журналы в tty7 (и tty5, tty6 и tty8 также) религиозные графические сессии в других местах. Но экран ожидания также может выступать в роли терминальной программы, позволяющей установить сеанс по последовательному кабелю. О чем сообщает такая сессия, когда кто запускается? Почему бы ничего, кроме последовательного порта, будь то через VNC, XTERM, SSH, экран и USB-последовательный адаптер все сразу или подключен к моему televideo.


6

Когда вы вошли в tty, он автоматически показывает, какой tty вы используете в первой строке.


Если при нажатии комбинации клавиш Ctrl+ Alt+ F3отображается только черный экран, как вы написали в комментарии, существует альтернативный способ получить доступ к корневой оболочке при загрузке компьютера без нажатия Ctrl+ Alt+ F3для вызова tty.

  1. Сразу после появления заставки BIOS / UEFI во время загрузки с BIOS быстро нажмите и удерживайте Shiftклавишу, которая вызовет меню GNU GRUB. (Если вы видите логотип Ubuntu, вы пропустили точку, в которой вы можете войти в меню GRUB.) С помощью UEFI нажмите (возможно, несколько раз) Escклавишу, чтобы перейти в меню GRUB. Иногда заставка производителя является частью загрузчика Windows, поэтому, когда вы включаете компьютер, он переходит прямо к экрану GRUB, а затем нажимать Shiftне нужно.

  2. На первом фиолетовом экране GNU GRUB выберите Дополнительные параметры для Ubuntu с помощью клавиш ↑ и ↓ и нажмите Enter. Затем вам будет предложено другое фиолетовое меню меню GNU GRUB, в котором есть список параметров ядра.

  3. Нажимайте клавишу со стрелкой вниз, пока не выберите вторую запись сверху (ту, в которой указан режим восстановления в описании), а затем нажмите Enter.

    Теперь вы должны увидеть это меню восстановления:

    меню восстановления

  4. С помощью клавиш со стрелками прокрутите вниз до корня и нажмите Enter.

    Теперь вы должны увидеть приглашение root, что-то вроде этого:

    root@ubuntu:~#
    
  5. На этом этапе у вас должна быть файловая система только для чтения. Вы должны перемонтировать его с разрешениями на запись:

    mount -o rw,remount /  
    

    Теперь вы можете запускать команды так же, как в терминале.


это всегда открывает tty1?
luv.preet

Нет, не открывается ни один tty. Вместо этого он монтирует корневую файловую систему Ubuntu, установленную на вашем жестком диске, в виде интерактивной оболочки с разрешениями на запись, позволяющей запускать команды на нем.
Карел

3

Я думаю, вы ищете что-то еще, кроме других ответов. Запустите, sudo fgconsole чтобы узнать, какой реальный tty сейчас активен.


@karel Легко представить ситуацию, когда вы пропускаете текущее объявление TTY. Например, ваш профиль bash очищает экран. Я предложил команду, которую можно использовать в любое время, а не только сразу после входа в систему. WRT Ctrl + Alt + F1 не работает - есть быстрый обходной путь: используйте chvt или openvt.
Мариан Адам

И кстати, запустить его с sudo. Вот почему вы получили ошибку.
Мариан Адам

1

Используйте команду tty, она работает в Linux и macOS и дает довольно простой вывод для чтения, только имя tty, в котором вы находитесь.

Пример:

$ tty
/dev/pts/0

Это легко написать или включить в приглашение, например:

$ PS1='`tty`: '
/dev/pts/0: _

Таким образом, вы всегда будете знать, в каком терминале вы находитесь.


1

За исключением GUI, в этом случае вы получаете pts, это показывает желаемый результат:

ls -l `tty` | awk '{print $10}'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.