
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