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