Como encontro e uso $ DISPLAY e $ XAUTHORITY do root? Obtendo o erro: MIT-MAGIC-COOKIE inválido

1

Enquanto logou remotamente como ROOT , eu quero executar meu programa de selênio remotamente no display do ROOT ( e não meu display remoto). Eu estou não falando sobre ssh -X (que funciona), mas em vez disso eu tenho um aplicativo nodejs gerando outro aplicativo nodejs que usa selênio, tudo automaticamente sem nenhum usuário ssh'ing. Mas o selênio precisa usar uma exibição de algum tipo para renderizar alguns arquivos jpg que eu preciso.

Há várias perguntas que estou analisando, mas ainda estou lutando com o conceito ... As principais fontes de informação que estou usando são:

Veja o que eu entendo:

  • Um programa X precisa de duas informações para se conectar a um monitor X.
    • $DISPLAY
      • Normalmente, :0 ou :1 .
      • Quando eu vou fisicamente ao laptop e vejo a exibição do root (em vez de usar o sshin remotamente), o $DISPLAY está definido como :0 ou :1 .
    • $XAUTHORITY
      • O Magic Cookie a ser usado é definido em ~/.Xauthority e a variável de ambiente $XAUTHORITY .
      • Quando vou fisicamente ao laptop (em vez de fazer o sshin remotamente), o $XAUTHORITY está definido como /tmp/xauth-0-_0 (quando $DISPLAY=:0 ) ou /tmp/xauth-0-_1 (quando $DISPLAY=:1 ).

=====================

Tentativas

Eu tentei todas essas coisas:

  1. Definindo $DISPLAY e $XAUTHORITY por meio de um script

    • Eu tenho um script que gera o aplicativo de selênio nodejs. Eu exportei essas duas variáveis no script antes de executar o aplicativo de selênio:

      if [ -e "/tmp/xauth-0-_0" ]
      then
        export DISPLAY=":0"
        export XAUTHORITY="/tmp/xauth-0-_0"
      elif [ -e "/tmp/xauth-0-_1" ]
      then
        export DISPLAY=":1"
        export XAUTHORITY="/tmp/xauth-0-_1"
      fi
      
      #Then run the nodejs selenium app
      node index.js
      
    • O erro que recebo quando uso este método é Invalid MIT-MAGIC-COOKIE-1 key[10332:10332:0713/112221.602744:ERROR:browser_main_loop.cc(272)] Gtk: cannot open display: :0.0

  2. Definindo X11Forwarding yes em /etc/ssh/sshd_config , mas acho que isso se aplica apenas a ssh -X
  3. Aqui estão minhas outras tentativas de abrir o chrome:

    [root@localhost test]# xauth list
    localhost:0  MIT-MAGIC-COOKIE-1  ....
    
    [root@localhost test]# export XAUTHORITY=/tmp/xauth-0-_0
    
    [root@localhost test]# export DISPLAY=localhost:0
    [root@localhost test]# google-chrome
    [10673:10673:0713/141603.418401:ERROR:browser_main_loop.cc(272)] Gtk: cannot open display: localhost:0
    
    [root@localhost test]# export DISPLAY=127.0.0.1:0
    [root@localhost test]# google-chrome
    [10859:10859:0713/141617.346302:ERROR:browser_main_loop.cc(272)] Gtk: cannot open display: 127.0.0.1:0
    

Estou usando o Fedora 23 (Server Edition) x86_64

    
por Katie S 13.07.2017 / 22:09

2 respostas

1

Se tudo que você precisa é de um display X para selênio, você também pode iniciar um segundo servidor X independente usando Xvfb ("virtual framebuffer X server"). Este servidor X usa um pedaço de memória como framebuffer invisível, e permitirá que o selênio finja que está conectado a um servidor X.

Veja man Xvfb para detalhes, esp. a seção Exemplos . Você pode iniciá-lo sem a autorização ativada, para que qualquer pessoa possa se conectar a ele.

Note que isso não permitirá a aceleração 3D (OpenGL), que é uma lata completamente diferente de worms.

Em geral, tentar assumir outro monitor, especialmente aquele em que root está conectado, é um risco de segurança enorme : qualquer pessoa conectada a esta exibição pode capturar pressionamentos de tecla (e senha), execute comandos como root, etc. É por isso que normalmente você não pode fazer isso.

    
por 21.07.2017 / 08:52
0

Cheguei à conclusão de que isso não é possível: (

Você precisa ter um usuário ssh em algum momento, em algum lugar para que isso funcione.

Sem um usuário, você não pode assumir a exibição do root.

    
por 21.07.2017 / 00:50