zwtsc - cliente gráfico para Terminal Service

Publicado por Davidson Rodrigues Paulo 16/04/2009

[ Hits: 7.197 ]

Homepage: http://davidsonpaulo.com/

Download zwtsc




Utilitário gráfico escrito em Shell Script utilizando o Zenity para gerar a interface gráfica.

Cria, salva e carrega sessões de Terminal Service configuradas no arquivo ~/.zwtsc.

  



Esconder código-fonte

#!/bin/bash
#
# zwtsc
# Zenwalk Terminal Service Client
#
# Author: Davidson Paulo <davidsonpaulo@gmail.com>
# Date: April 15, 2009
#
# License: GNU General Public License v3+

## Variables
Cons="${HOME}/.zwtsc"
Options=""
#Keymap="en-us" # USA International keyboard
Keymap="pt-br" # Brazilian keyboard, with Ç key

# Display connections
displayCons() {
   Pattern="[[:space:]]*conn[[:space:]]*"
   fgrep conn $Cons | sed 's/^'"$Pattern"'//' | sort |
   while read Conn ; do
     Start="${Pattern}${Conn}"
     echo "$Conn"
     sed -n '/^'"$Start"'/,/^[[:space:]]*commit/p' $Cons |
     egrep '[[:space:]]*IP=' | cut -d= -f2-
   done |   sed '1i'"(Nova conexão)\n" |
   zenity --width=400 --height=300 --list --title="Conexões" \
          --column="Conexão" --column="IP"
}

# Run a Terminal Service session
runSession() {
   Pattern="[[:space:]]*conn[[:space:]]*${1}[[:space:]]*$"
   Block=`sed -rn '/'"$Pattern"'/,/^[[:space:]]*commit/p' $Cons`
   echo "$Block" | sed -r -e '1d' -e 's/[[:space:]]//' |
   while read Opt ; do
      Value="$(echo $Opt | cut -d= -f2-)"
      case "$Opt" in
         "IP="*) Options+=" $Value" ;;
         "USER="*) Options+=" -u $Value" ;;
         "PASSWORD="*) Options+=" -p '${Value}'" ;;
         "DOMAIN="*) Options+=" -d $Value" ;;
         "SIZE="*) Options+=" -g $Value" ;;
         "COLORS="*) Options+=" -a $Value" ;;
         "CLIPBOARD=1") Options+=" -r clipboard:CLIPBOARD" ;;
         "SHARE="*) Options+=" -r disk:Share=${Value}" ;;
         "CONSOLE=1") Options+=" -0" ;;
         "LAYOUT="*) Options+=" -k $Value" ;;
         "FULLSCREEN="*) Options+=" -f" ;;
         "commit"*) eval rdesktop "$Options" ;;
      esac
   done
}

# Asks for the session name
getSessionName() {
   zenity --title="$1" --entry --text="Nome da conexão" ||
   echo "ABORT"
}

# Asks for the session IP
getSessionIP() {
   zenity title="$1" --entry --text="IP/nome de máquina" ||
   echo "ABORT"
}

# Asks for the color depth
getSessionColor() {
   for i in 8 15 16 24 ; do echo -e "\n${i} bits\n${i}" ; done |
   zenity --list --title="Profundidade de cores" --radiolist \
          --column="" --column="Profundidade" --column="" \
         --hide-column=3 --print-column=3 ||
   echo "ABORT"
}

# Asks for the resolution
getSessionResolution() {
    for i in "800x600" "1024x768" "1272x970" "Tela cheia" ; do
      if [ "$i" == "Tela cheia" ] ; then
         echo -e "\n${i}\n0"
      else
         echo -e "\n${i}\n${i}"
      fi
   done |
    zenity --list --title="Resolução" --radiolist \
          --column="" --column="Resolução" --column="" \
          --hide-column=3 --print-column=3 ||
   echo "ABORT"
}   

# Asks for other options
getSessionOptions() {
   j=0
   for i in "Salvar usuário" "Salvar senha" "Salvar domínio" \
            "Copiar/colar" "Anexar ao console" \
            "Compartilhar diretório" ; do
      echo -e "\n${i}\n${j}"
      (( j++ ))
   done |
   zenity --list --title="Opções adicionais" --checklist \
          --multiple --print-column=ALL --separator=" " \
          --column="" --column="Opção" --column="" \
          --hide-column=3 --print-column=3 ||
    echo "ABORT"
}

# Saves the session in file
saveSession() {
   (
   Conn="$1" ; shift
   echo "conn $Conn"
   echo "   IP=${1}" ; shift
    echo "   COLORS=${1}" ; shift
   
   if [ "$1" == "0" ] ; then
      echo "   FULLSCREEN=1"
   else
      echo "   SIZE=${1}"
   fi
   
   shift

    Opts="$1"
   
   shift
   
   for i in $Opts ; do
     case $i in
      0) echo "   USER=${1}" ; shift ;;
      1) echo "   PASSWORD=${1}" ; shift ;;
      2) echo "   DOMAIN=${1}" ; shift ;;
      3) echo "   CLIPBOARD=1" ;;
      4) echo "   CONSOLE=1" ;;
      5) echo "   SHARE='${1}'" ;;
     esac
   done
   
   echo "   LAYOUT=${Keymap}"
   echo "   commit"
   ) >> $Cons
   
   zenity --title="Concluído" --info \
          --text="Sessão ter Terminal Service configurada."
}

# Configure a new Terminal Service session
newSession() {
   title="Nova sessão"
   zenity="zenity --title='${title}'" 
   SessionName=$(getSessionName "$title")
   [ "$SessionName" == "ABORT" ] && return 1
   SessionIP=$(getSessionIP "$title")
   [ "$SessionIP" == "ABORT" ] && return 1
   SessionColor=$(getSessionColor "$title")
   [ "$SessionColor" == "ABORT" ] && return 1
   SessionResolution=$(getSessionResolution "$title")
   [ "$SessionResolution" == "ABORT" ] && return 1
   SessionOptions=$(getSessionOptions "$title")
   [ "$SessionOptions" == "ABORT" ] && return 1
   
   for i in $SessionOptions ; do
      case $i in
         0)
            SessionUser=$(eval $zenity --entry --text="Usuário" ||
                          echo "ABORT")
            [ "$SessionUser" == "ABORT" ] && return 1
            ;;
         1)
            SessionPassword=$(eval $zenity --entry --text="Senha" \
                                            --hide-text ||
                          echo "ABORT")
            [ "$SessionPassword" == "ABORT" ] && return 1
            ;;
         2)
            SessionDomain=$(eval $zenity --entry --text="Domínio" ||
                            echo "ABORT")
            [ "$SessionDomain" == "ABORT" ] && return 1
            ;;
         5)
            SessionShare=$(eval $zenity \
                                 --title="Compartilhar diretório" \
                                   --file-selection --directory ||
                        echo "ABORT")
            [ "$SessionShare" == "ABORT" ] && return 1
            ;;
      esac
   done
   
   saveSession "$SessionName" "$SessionIP" "$SessionColor" \
               "$SessionResolution" "$SessionOptions" \
            "$SessionUser" "$SessionPassword" "$SessionDomain" \
            "$SessionShare"
}

if [ -f $Cons ] ; then
   Option="$(displayCons)"
   if [ -n "$Option" ] ; then
       if [ "$Option" == "(Nova conexão)" ] ; then
         newSession
         $0
      else
         runSession "$Option"
      fi
   fi
else
   touch $Cons
   newSession
   $0
fi

exit 0

Scripts recomendados

Jogo da velha

Adição automática dos repositórios do Google Chrome, Google Talk Plugin, Google Earth, Dro no Ubuntu

Remover arquivos com mais de "N" dias da Lixeira do Samba

Backup automatico em dois computadores via local e NFS

Script usado junto com o squid para dedurar usuários.


  

Comentários
[1] Comentário enviado por valter.vieira em 20/09/2009 - 19:10h

Muito boa esta idéia.
Estou usando CentOS 5.2, está apresentado alguns erros no GTK, este script funciona bem em qual
Linux ?
Acredito que se tiver a opção também de exclusão no script também seria interessante.

Obrigado.
Valter

[2] Comentário enviado por davidsonpaulo em 20/09/2009 - 22:30h

Olá Valter, esse script funciona em qualquer distribuição Linux, basta que os pacotes "rdesktop" e "zenity" estejam instalados.

A opção de exclusão e alteração das conexões seriam de grande valia. Mas, de qualquer forma, isso pode ser feito através da edição do arquivo ~/.zwtsc.

Um abraço.

[3] Comentário enviado por danniel-lara em 07/12/2009 - 16:52h

Olá Davidson
Achei muito bom esse script e testei esta funcionado muito bem
assim eu vou realizar alguns ajustes assim que estiver ok eu passo o script



Abraço


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts