Como iniciar um programa GUI com PHP no site

0

Minha empresa tem algum Ubuntu 12.04 em execução, onde não há exibição anexada e que está por trás de firewalls diferentes.

O visitante em sites locais nesses servidores deve ser capaz de iniciar um programa GUI como Teamviewer lá para me dar acesso gráfico (ou outros administradores de suporte).

Eu tenho que dar ao usuário PHP www-data de alguma forma acesso sudo para iniciar a GUI do Teamviewer em uma X-Session virtual via gksu .

Como eu teria que configurar o sudoers para conseguir isso?

E como eu poderia chamar isso de dentro de um script PHP, que está sendo executado nesse servidor?

Claro, eu por mim poderia facilmente acessar via ssh ou canalizar a X-session para minha máquina, mas eu preciso de um login do Teamviewer porque essa é a maneira mais fácil de passar por firewalls diferentes em todos os servidores.

    
por rubo77 05.06.2013 / 10:59

1 resposta

1

Aviso: Eu não sei nada sobre o produto Teamviewer, mas vou tratar isso como qualquer aplicativo antigo do x-windows que você queira executar.

Se você quiser apenas que um aplicativo de gui seja iniciado, procure usar .xinitrc ou (em alguns ambientes de área de trabalho) ~/.config/autostart/

Buuut ... Parece que você quer começar este programa interativamente? Ou seja, você deseja executá-lo a pedido e precisa ser executado no ambiente de área de trabalho.

Em primeiro lugar, não recomendo que você forneça privilégios especiais ao usuário do www-data por meio de sudoers, especialmente se você estiver usando esse usuário em seu servidor da Web que tem serviços públicos.

Eu recomendo criar um usuário "sysadmin" ou algo assim, e dar a eles os privilégios apropriados.

Depois, faça com que um script PHP faça um impacto muito baixo, como soltar um arquivo de sinalizador em / tmp / e fazer com que outro usuário opere nesse arquivo.

Então, eu tenho esse script PHP:

<?php
   // Trigger for the team view launcher.
   file_put_contents("/tmp/teamviewflag","1");
?>

Então eu teria um cron job como:

* * * * * /home/sysadmin/.jobs/teamstarter.sh

(Advertência: Isso é executado apenas uma vez por minuto. Portanto, você terá que esperar um minuto. Você pode fazer esse script ser executado em um loop.)

Eu teria /home/sysadmin/.jobs/teamstarter.sh

#!/bin/bash
if [ -f /tmp/teamviewflag ]
  then
    env DISPLAY=:1 XAUTHORITY=/home/sysadmin/.Xauthority /path/to/teamviewer
    rm /tmp/teamviewflag
fi

Isso fará com que ele seja executado sob demanda a partir de um script PHP. Há algumas arestas que você provavelmente vai querer tirar daqui:

  • Isso executará o teamviewer toda vez que você executar o script PHP.
  • A linha 4 do script bash pressupõe que você sabe o número DISPLAY .
  • Você também pode querer ter um tipo de "arquivo de bloqueio" que diz "hey team viewer is running" e fazer com que seus scripts operem dependendo de se está lá ou não. E ter um trabalho que acompanhe e limpe o arquivo de bloqueio quando o TeamViewer estiver pronto.

Veja um exemplo do script acima executando em um loop:

#!/bin/bash
while :
do
  if [ -f /tmp/teamviewflag ]
    then
      env DISPLAY=:1 XAUTHORITY=/home/sysadmin/.Xauthority /path/to/teamviewer
      rm /tmp/teamviewflag
  fi
  # Sleep for a half second.
  usleep 500000  
done

Você pode executá-lo "muito bem" (por isso, tem uma prioridade de agendamento mais baixa), como:

nice -n 19 /home/sysadmin/.jobs/teamstarter.sh

E se você quiser iniciá-lo na inicialização, você pode colocá-lo em uma guia do cron assim:

@reboot /home/sysadmin/.jobs/teamstarter.sh

    
por 05.06.2013 / 16:28