Determine se há alguma área de trabalho de exibição do VNC ativa e seu número

1

Quando log SSH em meu computador Linux, como eu poderia saber se há alguma sessão de exibição da área de trabalho X-Windows (ou seja:: 1 iniciado por VNCServer) ativa e qual é o seu número?

Razão :
Às vezes, eu inicio remotamente os scripts iMacros FireFox que precisam de GUI, portanto, se não houver nenhum desktop iniciado, devo ligá-lo emitindo:

vncserver -name Computer

Se for iniciado, depois de saber o seu número (por exemplo, :1.0 ) eu faço:

export DISPLAY=:1.0
firefox imacros://run/?m=MyMacro.iim

Eu uso para tentar:

$ sudo ps -e | grep "vnc" -i
 1685 ?        06:28:53 Xtightvnc

Mas isso não me dá o número (ou seja, :1.0 ).

Mais dados sob solicitação (há um VNC em execução em: 1):

$ sudo netstat -lnp|grep -i vnc
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN      1685/Xtightvnc
tcp        0      0 0.0.0.0:6001            0.0.0.0:*               LISTEN      1685/Xtightvnc
unix  2      [ ACC ]     STREAM     LISTENING     11847    1685/Xtightvnc      /tmp/.X11-unix/X1
    
por Sopalajo de Arrierez 07.06.2016 / 07:54

1 resposta

1

Por padrão, o vnc usa a porta 5901 para exibição 1 e assim por diante. Assim, você pode usar o netstat para listar todos os processos de escuta e calcular a exibição deles:

export DISPLAY="$(netstat -ln |
 awk '$4~/:59[0-9][0-9]$/{
  v=$4; sub(/.*:/,"",v);
  print ":" v-5900; exit}')"

Isto assume que o seu netstat produz algo como 0.0.0.0:5901 no campo 4. O awk remove tudo até o ":" e subtrai 5900 dele. O DISPLAY é definido no ambiente para o seguinte firefox. Se você quiser combinar isso com o lançamento do vncserver, coloque-o em uma função, diga getdisplay, e use-o da seguinte maneira:

getdisplay(){
  ... as above
}
getdisplay
if [ -z "$DISPLAY" ]
then    vncserver -name Computer
        getdisplay
fi
firefox ...
    
por 07.06.2016 / 08:18