Suporte remoto com x11vnc

Publicado por Rogério Tomassoni em 14/09/2010

[ Hits: 13.756 ]

 


Suporte remoto com x11vnc



Para realizar suporte remoto nos clientes Linux, escrevi esse script que inicializa os serviços apenas quando são necessários. Criei-os para facilitar a instalação e administração remota.

O script inicializa o serviço X11VNC e já informa o IP (a porta sempre será 0) para o usuário, e por consequência a pessoa que irá realizar a conexão.

A cada execução o script verifica se o serviço já está rodando para o usuário em questão, finaliza caso exista e inicializa um novo, isso faz com que seja use a mesma porta, e não crie vários processos inúteis que consomem processamento.

Pré-requisito: para funcionar corretamente precisamos baixar os pacotes:
  • x11vnc e
  • zenity

Esse último é para exibição do IP.

Para utilizar os scripts, crie um diretório com os dois aplicativos dentro (x11vnc e zenity), mais os scripts abaixo. Lembre-se eles devem estar com permissão de execução para os usuários, exceto o install.sh, que só serve para realizar a instalação e criar os ícones necessários.

Criei o diretório dentro de /usr/local com nome x11vnc (caso queira mudar, modifique os scripts):

# cd /usr/local
# mkdir x11vnc


E dentro dele coloque os aplicativos, e mais os scripts abaixo:

install.sh:

#!/bin/bash

# Script que realiza a instalacao do x11vnc para suporte remoto.
# Rogerio Tomassoni


# Identificando diretorio de instalacao
dir_cur=$(pwd)

# Arquivo de atalho
atalho="SuporteRemoto.desktop"
atalho_aux="SuporteRemotoNew.desktop"

# Verifica usuario root, so instala se for root
if [ $USER != "root" ]; then
   echo -e "{TEXTO}33[40;33mScript necessita de privilegio administrativo (root). {TEXTO}33[m"
   sleep 5;
   exit 0;
fi

# Verificando a existencia do aplicativos necessarios
# Caso nao exista instala

# Verificando Zenity

#verifica_zenity=$(which zenity)

echo -ne "\n->Intalando zenity...."

#if [ ! $verifica_zenity ]; then
   #echo -e "{TEXTO}33[40;32mZenity nao encontrado, instalando.{TEXTO}33[m"
   dir_cur=$(pwd)
   rpm -ivh $dir_cur/zenity-2.16.0-2.el5.i386.rpm
#fi

# Verificando x11vnc

echo -ne "\n-->Instalando x11vnc...."

#verifica_x11vnc=$(which x11vnc)

#if [ ! $verifica_x11vnc ]; then
   #echo -e "{TEXTO}33[40;32mx11vnc nao encontrado, instalando.{TEXTO}33[m"
   dir_cur=$(pwd)
   rpm -ivh $dir_cur/x11vnc-0.9-1.el5.rf.i386.rpm
#fi


# Ajustando permissoes
echo -ne "\n--->Ajustando permissoes...."
chmod 755 $dir_cur/controleRemoto.sh
chmod 755 $dir_cur/$atalho

# Verifica se ja existe o comando para criar link dinamico na area de trabalho
# Se existe nao adiciona o comando, se nao existe adicicona

echo -ne "\n---->Criando link no /etc/profile...."

cat /etc/profile | grep -iw "ln -s /usr/local/x11vncFw/SuporteRemoto" >> /dev/null

if [ $? -eq 1 ]; then
   #echo -ne "\n\nhome_user=\$(cat /etc/passwd | grep $USER | cut -d: -f6)" >> /etc/profile  
   echo -ne "\nif [ ! -e $HOME/Desktop/SuporteRemoto.desktop ]; then" >> /etc/profile
   echo -ne "\nln -s /usr/local/x11vncFw/SuporteRemoto.desktop \$HOME/Desktop" >> /etc/profile
   echo -ne "\nfi" >> /etc/profile  
fi

echo -ne "{TEXTO}33[40;32m\nInstalacao completa.\n\n{TEXTO}33[m"

exit 0;

SuporteRemoto.desktop:

[Desktop Entry]
Comment=Suporte Remoto
Comment[pt_BR]=Suporte Remoto
Encoding=UTF-8
Exec='/usr/local/x11vncFw/controleRemoto.sh'
GenericName=Suporte Remoto
GenericName[pt_BR]=Suporte Remoto
Icon=vnc
MimeType=
Name=Suporte Remoto
Name[pt_BR]=Suporte Remoto
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DCOP-ServiceType=
X-KDE-SubstituteUID=false
X-KDE-Username=

controleRemoto.sh:

#!/bin/bash

# Script usado para suporte em tempo real
# Dependências que devem ser instaladas: VNCSERVER e X11VNC
# Rogério Tomassoni A. Jr.

# Limpa shell
clear

# Variável para interface de rede
if_local="eth0"

# Variável com a senha padrao
passwd="furacaoadm"

# Mata todos os processos vnc por usuário especifico, garante que apenas um instância estará em execução
count=0
for pidProcVnc in $(ps -fu $USER | grep -iw "/usr/bin/x11vnc" | awk -F' ' '{ print $2 }'); do
     if [ $count -eq 0 ]; then
   echo "Processo: $pidProcVnc"
   /bin/kill -9 $pidProcVnc
     fi
     count=`expr $count + 1`;  
done

# Remove arquivos temporários
#echo "Removendo arquivos lock TMP"
rm -rf /tmp/.X11-unix/      
rm -rf /tmp/.X1-lock  


# Remove arquivos de log e pid por usuário para não guardar sujeira
if [ -e /home/$USER/.vnc ]; then
   rm -rf /home/$USER/.vnc/*.log
   rm -rf /home/$USER/.vnc/*.pid  
fi


# Pega IP local da máquina cliente
IP=$(LC_ALL=C /sbin/ifconfig $if_local | awk '/inet addr:/ { print substr($2,6) }')
echo "IP: "$IP
echo "Display " $DISPLAY

# Testa se o existe a variável DISPLAY corrente atualizada e correta.
    
   if [ -z $DISPLAY ]; then
       zenity --title="Atencao" --warning --window-icon=/usr/share/icons/crystalsvg/32x32/apps/vnc.png --text="Nao foi possivel localizar um display."
       exit 0;
   else
   # Inicia o x11vnc em background baseado no display do vncserver
   echo -ne "\n Iniciando x11vnc"
       /usr/bin/x11vnc -display $DISPLAY -passwd $passwd -forever  &
       # Mensagem com endereco IP da maquina      
       zenity --title="Endereco IP" --info --window-icon=/usr/share/icons/crystalsvg/32x32/apps/vnc.png --text="Informe o IP como segue abaixo:\n$IP"  
fi

exit 0;

Após criados o diretório, os scripts e os aplicativos, rode o install.sh:

# ./install

O script instala os aplicativos, cria o ícone de atalho na área de trabalho e o torna o ícone persistente, ou seja, se o usuário deletar o ícone ele retorna no próximo login.

Obs.: O ícone só irá aparecer na área de trabalho, no próximo login dos usuários. Foi testado em Red Hat EL5, com kde.

Outras dicas deste autor

Controle de acesso Squid + LTSP4.2

Suporte remoto com VNC LTSP 4.2

Plugin NFe 2.00 Nagios

Resolvendo problema de Nagios + NPC

Perfis com uma pitada de tunning

Leitura recomendada

OpenJDK no Banco do Brasil (CrunchBang)

Conheça a extensão Just Perfection para mudar várias opções do Gnome

Gnome com visual parecido com Windows XP

Fazendo máquinas Windows 98 enxergarem máquinas Linux

Amarok no OpenSuSE 11.0 - Ativando o equalizador

  

Comentários
[1] Comentário enviado por tomassoni em 15/09/2010 - 18:54h

Correção só para não ficar confuso.Desconsiderar os dois comentários no script
controleRemoto.sh.
# Dependências que devem ser instaladas: VNCSERVER e X11VNC, pois usaremos apenas o x11vnc, e
# Inicia o x11vnc em background baseado no display do vncserver, mesmo motivo.
Aproveitei outro script que utilizo, http://www.vivaolinux.com.br/dica/Suporte-remoto-com-vnc-LTSP-4.2/
e o comentário passou batido.




Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts