zwtsc - cliente gráfico para Terminal Service
Publicado por Davidson Rodrigues Paulo 16/04/2009
[ Hits: 7.116 ]
Homepage: http://davidsonpaulo.com/
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.
#!/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
Parando o Screeensaver do Gnome durante uma reprodução no mplayer
Pegar ip dinamico enviar para ftp
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









