Como escolher a porta DISPLAY ao encaminhar o X pelo ssh

0

Esta não é uma questão sobre como encaminhar o X pelo ssh ou como configurar o DISPLAY para que o X redirecionado funcione. Essa é uma pergunta diferente - se você acabar aqui procurando uma resposta para isso, vá um passo além, porque 99% das perguntas do X DISPLAY você encontrará são para isso.

Minha pergunta é especificamente como escolher a porta DISPLAY. Ou seja, se eu fizer ssh -X ... , verifique DISPLAY com echo $DISPLAY , talvez veja localhost:10.0 ou localhost:12.0 ou algo semelhante. Nem sempre é o mesmo a cada vez, como no exemplo anterior, em que contém 10 uma vez e 12 alguma outra hora. Como eu escolho o que será, em vez de deixá-lo ser semi-aleatório a cada vez? Eu quero forçá-lo a sempre escolher 10.0 ou sempre 12.0 ou qualquer outra coisa, desde que seja consistente.

Uma solução para isso, de preferência ainda funciona para vários monitores. Eu geralmente tenho 2 ou 3 exibições de servidor X - por exemplo: localhost: 10.0, localhost: 10.1, localhost: 10.2 - que ssh X conecta e configura com sucesso. Mas, novamente, ele pode usar 10.0, 10.1, 10.2 ou pode usar 12.0, 12.1, 12.2. Seja o que for, preciso que seja consistente.

Meu caso de uso específico: Estou usando um software no trabalho que precisa saber onde procurar as exibições. Cada vez que o ssh usa um valor diferente para DISPLAY, eu preciso ir para os arquivos de configuração do software e alterar manualmente todas as entradas. É uma dor, e realmente deveria ser um tipo de coisa "esquecer e esquecer" - daí a minha pergunta.

Eu acho que essa escolha é feita pelo ssh no lado do servidor ssh (cliente X). Eu não acho que o servidor X saiba ou se importe que, localmente, o cliente X o esteja considerando "10.0" ou qualquer coisa que ele use. Por favor, corrija-me se estiver errado, porque não tenho certeza.

Eu não vejo nenhuma opção para o ssh escolher este valor.

Preferencialmente privilégios elevados (root / admin) não devem ser necessários. Eu não vejo por que eles seriam para isso, mas estou apenas afirmando isso na frente. Se você tiver uma resposta que exija root, melhor que nenhuma resposta e eu poderei usá-la.

    
por Aaron 08.07.2016 / 21:40

1 resposta

1

Eu acredito que o problema que você está enfrentando é que o servidor ssh não pode garantir que alguém já não tenha usado (encaminhado local ou remotamente) um determinado número de exibição (e porta), portanto ele tem que escolher um que está aberto. Não sei ao certo, mas presumo que tente abri-las em sequência e pare no primeiro que se abrirá. Todas as portas de exibição abertas (incluindo algumas que ainda não foram fechadas pelo processo antigo) podem manter a que você deseja abrir indefinidamente.

Embora não seja uma garantia, você pode tentar definir um valor diferente para X11DisplayOffset no sshd_config do seu servidor. Isso ainda não impede outro usuário ou até mesmo um processo nocivo seu mantendo o primeiro display / porta X disponível aberto.

Como alternativa, você pode tentar definir manualmente a variável DISPLAY (no lado do servidor) para algum número "incomum" ou de porta alta na esperança de evitar as portas normalmente usadas com numeração mais baixa. por exemplo, escolha DISPLAY=:76 , que significa a porta na qual você precisa encaminhar a porta 6076 de volta ao seu servidor X local; Caso você não saiba, a porta TCP usada pelo X é o número 6000 + DISPLAY (os servidores VNC geralmente usam 5900 + DISPLAY, IIRC). Você faria esse encaminhamento manual em sua chamada ssh usando algo assim:

ssh -R6076:localhost:6000 server

Isso encaminhará a porta 6076 no terminal remoto (servidor) de volta para sua exibição local (supondo DISPLAY: 0). O lado negativo dessa abordagem é que agora você precisa lidar com todo o material XAuth que ssh faz automaticamente usando -X (consulte este outro post para dicas), mas deve funcionar. YYMV e os bits complicados deixados como um exercício para o leitor ;-).

    
por 09.07.2016 / 16:52