lxterminal na saída netstat

1

Você pode explicar as seguintes linhas na netstat output?

Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path

unix  2      [ ]         STREAM     CONNECTED     37133819 /tmp/.lxterminal-socket:0-xralf
unix  2      [ ]         STREAM     CONNECTED     37109191 /tmp/.lxterminal-socket:0-xralf
    
por xralf 29.12.2016 / 14:26

1 resposta

5

programas GUI cliente-servidor

Como vários outros programas GUI atualmente, desde 2008 lxterminal tentou exibir todas as janelas do emulador de terminal a partir de um único processo, um por X display por usuário. Para fazer isso, ele tenta se conectar a um soquete existente pelo tipo de nome que você está vendo, que incorpora o nome de exibição e seu nome de usuário.

  • Se a conexão for bem-sucedida, ela simplesmente despejará seu diretório atual e o vetor de argumento no soquete e sairá. Ele não usa passagem de descritor de arquivo para passar diretamente um descritor de arquivo aberto para seu diretório atual, mas o passa pelo nome.
  • Se a conexão falhar, ele tentará se tornar o servidor de escuta nesse soquete. Ele lê mensagens que compreendem um diretório atual e um vetor argumento, e abre uma nova janela de emulação de terminal GUI para cada leitura, como se fosse seu próprio diretório atual e vetor de argumentos.

O efeito visível disso é que o primeiro programa lxterminal que você invoca (e deixa em execução) opera de maneira síncrona, enquanto o segundo e os subsequentes não. Para observar isso, comece com no lxterminal instâncias em execução, execute um emulador de terminal diferente e invoque

lxterminal & sleep 1 ; lxterminal
de um shell. O shell retornará ao prompt após 1 segundo e mostrará apenas 1 lxterminal de trabalho em execução.

O rxvt tem um recurso semelhante, mas é necessário invocar explicitamente o urxvtd server e executar explicitamente o urxvtc client. A execução de urxvt simples não tenta nenhum shenanighans cliente-servidor.

O

Terminal GNOME somente funciona desta forma, em contraste. sempre passa o vetor de argumentos para um processo do servidor e, em seguida, sai. Existe, além disso, apenas o processo de um servidor por usuário, lidando com todos os monitores (e bugs da maneira que esse mecanismo inicializa, para inicializar).

insegurança

A criação de arquivos e sockets em /tmp com nomes previsíveis é uma preocupação de segurança bem conhecida e lxterminal compartilha isso. Os usuários podem pré-criar soquetes nos locais previsíveis com os quais lxterminal s executados por outros usuários na mesma máquina tentarão conversar.

O

rxvt, por outro lado, usa um subdiretório não-gravável não-outro-gravável de cada diretório do usuário. Outra possibilidade para corrigir este problema com lxterminal que igualmente não permitiria a outros usuários o acesso para substituir os sockets com os deles seria ter os sockets em /run/user/username/lxterminal .

(O GNOME Terminal usa o Desktop Bus de nível de usuário para se comunicar entre clientes e seu servidor. Hoje em dia, o AF_LOCAL de soquete mora em /run/user/username/ , onde não pode ser suplantado por outros usuários não privilegiados).

bugs

Um dos problemas que incomodam o GNOME Terminal é que ele ocupa muitos descritores de arquivos abertos no processo de servidor único para cada instância de uma emulação de terminal. Costumava ser 16; e agora é baixo para um "mero" 8.

lxterminal usa 2, um dos quais é um descritor de arquivo aberto vazado para a conexão de soquete do processo do cliente. Abra e feche emulações de terminal suficientes e, eventualmente, lxterminal ficará sem descritores de arquivos disponíveis. O seguinte, começando com nenhuma lxterminal instâncias em execução, usou todos os descritores de arquivos disponíveis do servidor em pouco mais de um minuto em uma de minhas máquinas:

(ulimit -H -n 1024 ; lxterminal) &
seq 0 1024 | while read -r i ; do lxterminal -e /usr/bin/true ; done

Leitura adicional

por 29.12.2016 / 17:35