RDP терминал на Linux

Потребовалось создать дистрибутив для внутреннего пользования на предприятии, который работает как терминал, подключаясь к rdp сессии  Маздайного сервака. Чтобы не искушать судьбу на разные "извращения" и  красноглазие, я решил воспользоваться SUSE Studio. Плюс этого сервиса, что упращается сборка дистрибутива с нужными пакетами, оформлением и прочими утехами. С этой задачей я справился очень быстро, но вот далее дошло до программы которая будет подключаться к терминалу. Естественно выбор пал на rdesktop, но вот незадача в том, что нужно написать соответствующий скрипт который будет выкачивать из сети конфиги, парсить их в  соответствии с IP-адресом и подключаться куда нужно и с определёнными параметрами. Ещё необходимо, чтобы скрипт реагировал на свои в локальной сити или при недоступности узла. Можно было использовать bash, но реализовывать нормальный парсинг на нём, это не айс и я решил использовать python. terminal.py

#!/usr/bin/python
#-*-coding:utf8-*-
#New Terminal programm for  Terminal OS.
import threading
import time
import os
import ConfigParser
import socket
import fcntl
import struct

ip="local.location.ru"
user="terminal"

config = ConfigParser.ConfigParser()
config.read('/home/'+user+'/terminal.cfg')
pingcount=(config.get('general', 'pingcount'))

download_mirror_config="http://local.location.ru/terminal.cfg"
download_config="http://192.168.2.7/terminal.cfg"

class PingProcess(threading.Thread):
    def ping(self):
        ping = os.system("ping -c "+pingcount+" "+ip)
        return ping

    def run(self):
        while True:
            if self.ping() == 0:
                os.system("killall qiv")
                dwld=os.system("wget -N --timeout 3 --tries 1 "+download_config+" -P /home/"+user+"/")
                if dwld != 0:
                    os.system("wget -N --timeout 3 --tries 1 "+download_mirror_config+" -P /home/"+user+"/")
                time.sleep(60)

            else:
                os.system("killall rdesktop")
                time.sleep(60)

class StartProcess(threading.Thread):
    def getIP(self,ifname='eth0'):
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            ipaddr = socket.inet_ntoa(fcntl.ioctl(
            s.fileno(),
            0x8915,
            struct.pack('256s', ifname[:15])
            )[20:24])
            return ipaddr
        except:
            return "127.0.0.1"
    def run(self):
        once_commands=(config.get(self.getIP(), 'once_commands'))
        os.system(once_commands)
        while True:
            commands=(config.get(self.getIP(), 'commands'))
            os.system(commands)
            os.system("qiv -f /home/"+user+"/warrning.png")

ping = PingProcess()
ping.start()
process = StartProcess()
process.start()

terminal.cfg

[general]
pingcount=1

[127.0.0.1]
once_commands=''
commands=''

[192.168.27.128]
once_commands=''
commands=rdesktop -f -u username -p password -z -r comport:COM1=/dev/ttyS0 192.168.7.9

Программа для запуска script.sh

#!/bin/bash
wget -N --timeout 3 --tries 1 http://192.168.2.7/terminal.cfg
DWLD=$?
if [ "$DWLD" -ne "0" ]
then
wget -N --timeout 3 --tries 1 http://local.location.ru/terminal.cfg
else
terminal.py
fi

Теги: , , , ,

Дата: 14 ноября 2011

Автор: Аноним

Комментарии: 0

Оставить комментарий

*

Комментарий:

Ваш e-mail не будет опубликован.
Обязательные поля помечены *

Разрешенные HTML теги:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>