Perché ci sono così tanti / dev / tty in Linux?


27

In Ubuntu 10.04, se controllo sotto / dev, ci sono più di 50 tty. tty0, tty1, tty2 ....

Capisco che tty è un dispositivo a caratteri per l'input / output della console.

  1. ma perché ce ne sono così tanti? è qualcosa come la piscina?

  2. e qual è la differenza tra / dev / pts / 0, 1, 2 ..., / dev / tty?

  3. Se apro un terminale, il nuovo numero viene creato in / dev / pts. ma non so quando / dev / tty? viene usato.

    anche se creo una connessione SSH, il numero di / dev / tty s è lo stesso.

    e se lo faccio

    cat /dev/tty0
    

    e digitare qualcosa nella tastiera, ottengo gli output corrispondenti. perché sta succedendo?


Risposte:


25

I tty non sono solo dispositivi di input / output. Fanno anche un lavoro speciale fungendo da terminale di controllo per una sessione, come l'invio di segnali (Ctrl + C). / dev / ttyNN sono console virtuali, che sono visualizzazioni a schermo intero sul monitor.

I terminali iniziano da / dev / tty1. È possibile passare a queste console, in genere, premendo i tasti Ctrl + Alt + Fn.

ad esempio, Ctrl + Alt + F1 ti porta al primo terminale virtuale. Al giorno d'oggi, la maggior parte delle distribuzioni Linux esegue il server X da tty1. Quindi, premendo Ctrl + Alt + F1 potrebbe non avere effetto.

$ ps ax | grep Xorg | grep -v grep
 1504 tty1     Ss+   44:57 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-rfsWyA/database -nolisten tcp vt1

Ctrl + Alt + F2 ti porterà al secondo terminale. Di solito le distribuzioni eseguono un programma di accesso (agetty) sul terminale virtuale.

$ ps ax | grep tty2 | grep -v grep
31865 tty2     Ss+    0:00 /sbin/agetty tty2 38400

I programmi di accesso forniscono una richiesta di accesso e consentono di accedere con nome utente / password. Gli script init decidono dove verrà eseguito tutto il programma di accesso. Quindi, a seconda di ciò, è possibile che venga visualizzato o meno un prompt di accesso, ad esempio tty9. Per tornare all'interfaccia della GUI, premere Ctrl + Alt + F1 (come nell'esempio sopra riportato).

/ dev / tty0 è un dispositivo speciale, che punta al terminale corrente. Quindi, indipendentemente da dove lo si esegue (qualsiasi console virtuale), tutto ciò che viene letto / scritto su tty0 va al terminale corrente.

La seconda colonna in "ps ax" fornisce anche il terminale di controllo del programma. Per alcuni programmi, come i demoni, potresti vedere che la colonna è "?", Il che significa che non sono associati a un terminale.

/ dev / pts / 0 etc sono dispositivi psuedo-terminali, che non sono collegati al display del sistema. per esempio, un terminale si ottiene quando si apre un terminale GNOME o qualsiasi altro terminale GUI. Si tratta di un approccio basato su client-server in cui il lato client verrà esportato in programmi, come bash. I dati inviati dal programma allo pseudo terminale vengono inviati al lato "server" (che di solito è monitorato da un altro programma, come gnome-terminal). Il processo di controllo (lato server) determina cosa deve essere inviato al terminale, che alla fine viene visto dal client. Questi dispositivi ti aiutano ad aprire più 'terminali GUI' senza alcun limite al tuo sistema, fornendo comunque lo stesso vecchio terminale come i controlli (ioctl (), impostazione del colore, Segnali di invio [Ctrl + C] ecc.).


2
Come si dovrebbe sapere questo, tranne chiederlo qui? qualche pagina man?
n611x007

1
@ n611x007 - man /dev/ptsè un inizio buona, anche man termios, nota che client / server è bidirezionale tra i PTY - gm e pts - dove un terminale virtuale come gnome-terminale, o xterm è solitamente collegato al master e un guscio, come bash, lo slave .
wulfgarpro,

Sul mio sistema /dev/ttyè l'attuale terminale di controllo, ma non so cosa sia /dev/tty0, tuttavia /dev/tty1è il KMSCON di Linux. Ed /dev/tty7è X server.
CMCDragonkai,

Questo non risponde alla domanda però. Come osservato daehee, ci sono dispositivi 64 / dev / ttyN. 1-8 sono console virtuali. i pty sono separati, sotto / dev / pts. Su quale sistema, ad esempio, / dev / tty30 viene mai utilizzato, e come?
Andrew McGuinness,

1

Voglio solo chiarire le relazioni di questo tipo di cose.

Innanzitutto, / dev / tty è a livello di processo, può essere ttyn (tty1, tty2, ...), ttySn (ttyS0, ttyS1), pty (pts / 0, pts / 1) e qualcos'altro.

/ dev / tty0 è un alias della console virtuale corrente (in primo piano), quindi potrebbe essere tty1, tty2 e così via. Si noti che ttyS0 non è un alias; È la prima porta seriale.

/ dev / console è la console di sistema, punta a / dev / tty0 come predefinito. Può essere ttyn, ttySn, ttyUSBn, lpn e così via.

Circa, / dev / tty> / dev / cosole> / dev / tty0


È una citazione da qualche parte, avere un riferimento per questo? Può rendere interessante la lettura
Xen2050,

@ Xen2050 No, ma spero che sia utile tldp.org/HOWTO/Remote-Serial-Console-HOWTO/…
firo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.