Um terminal virtual possui um terminal mestre?

2

Quando eu abro um emulador de terminal ( xterm por exemplo), xterm terá uma extremidade principal ( /dev/ptmx ) e uma extremidade escrava ( /dev/pts/# ).

Mas e quando eu abro um terminal virtual (pressionando Ctrl+Alt+F# ), o terminal virtual também está conectado a um mestre? ou está diretamente conectado a um escravo ( /dev/tty# ) sem um mestre?

    
por James 14.05.2017 / 17:40

3 respostas

5

Não há mestre (e, portanto, também não é um escravo).

Quando você está usando xterm , o processo xterm faz o trabalho de converter entre pressionamentos de tecla e pixels em uma extremidade e emular o fluxo de bytes da porta serial na outra extremidade. O kernel retransmite coisas para xterm através do mestre pty.

Quando você está usando tty1 , o kernel está fazendo tudo isso sozinho. O código em drivers/tty/vt/keyboard.c interpreta keypresses e drivers/tty/vt/vt.c interpreta a saída. Toda a lógica em xterm para implementar o comportamento semelhante ao VT100 é replicada lá.

Como esta implementação está no kernel, ele pode falar diretamente com os drivers de nível inferior relevantes (GPUs, o barramento USB onde seu teclado está, etc.) sem passar por um processo de espaço do usuário. Sem outro processo de espaço de usuário envolvido, não há necessidade de um "fim mestre" do tty.

    
por 14.05.2017 / 18:25
3

Nesse ponto, ambos "sim, há um mestre" e "não, não há mestre" estão corretos, porque você está em semântica.

Sim, há um mestre: o próprio driver do console. Os códigos de caracteres que a extremidade do escravo vê e envia o urso em algum lugar entre muito pouca e nenhuma relação com o que realmente está acontecendo com o seu teclado. O hardware real está passando por muitas camadas de redirecionamento e reinterpretação e renderização para apresentar a ilusão do hardware de meados dos anos 80.

Não, não há mestre: os mestres têm controle programático sobre o que o escravo vê, e você não pode fazer isso sem literalmente substituir a parte relevante do kernel. Você pode executar loadkeys para controlar como as teclas são interpretadas, mas nenhum programa comum pode se inserir no fluxo de dados.

    
por 14.05.2017 / 18:18
0

Tenha cuidado com a terminologia: existem duas maneiras diferentes em que um terminal pode ser chamado de "virtual" aqui.

Um emulador de terminal cria um terminal virtual, mas geralmente não é chamado de “terminal virtual”, mas pseudo-terminal . O emulador de terminal abre /dev/ptmx e obtém a interface do terminal do terminal (chamada “fim mestre”); aplicativos em execução no terminal usam a interface de aplicativo do terminal em /dev/pts (chamado de "terminal escravo").

O que o Linux chama de "terminal virtual" (vt) também é chamado de console. É virtual porque existem vários vts compartilhando o mesmo teclado e tela. Aqui não há um conceito de dispositivo mestre e escravo, porque existe apenas um dispositivo, para o lado da aplicação. O lado do terminal é tratado internamente pelo kernel (você poderia dizer que o master está escondido dentro do kernel).

    
por 16.05.2017 / 02:25