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