zwtsc - cliente gráfico para Terminal Service

Publicado por Davidson Rodrigues Paulo 16/04/2009

[ Hits: 6.884 ]

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

Quantidade de emails enviados e recebidos

Front-end utilizando o Xdialog para o comando whereis

Mostra cores

Backup e restauração dos programas instalados em sistemas baseados em Debian

Remover arquivos


  

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