#!/usr/bin/env python # -*- coding: utf-8 -*- # example table.py import pygtk pygtk.require('2.0') import gtk import subprocess # ===== Connection settings: ====== # ===== freerdp-x11: string_l = "xfreerdp /drive:share,/media /f /bpp:15 /jpeg /cert-ignore /v:192.168.1.128" string_r = "xfreerdp /drive:share,/media /f /bpp:8 /jpeg /cert-ignore /v:external.domain:3389" # ===== rdesktop: #string_l = "rdesktop -z -a 15 -k en-us -r disk:share=/media -f 192.168.1.128" #string_r = "rdesktop -z -a 8 -k en-us -r disk:share=/media -f external.domain:3389" # ============================== class Table: def callback(self, widget, data=None): name = login_entry.get_text() password = password_entry.get_text() if ( data == "local" ): # ===== freerdp-x11: string = string_l + " /u:" + name + " /p:" + password # ===== rdesktop: # string = string_l + " -u " + name + " -p " + password if ( data == "remote" ): # ===== freerdp-x11: string = string_r + " /u:" + name + " /p:" + password # ===== rdesktop: # string = string_r + " -u " + name + " -p " + password p = subprocess.Popen(string, shell=True, stderr=subprocess.PIPE, ) streamdata = p.communicate()[0] rc = p.returncode if ( (rc == 0) or (rc == 62)): gtk.main_quit() else: if (rc == 132): status_entry_label.set_markup('Error: wrong login or password'); else: status_entry_label.set_markup('Error: check your connection'); # Uncomment to check errorcode: # print "Error code", rc def delete_event(self, widget, event, data=None): gtk.main_quit() return False def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_title("Connection...") self.window.connect("delete_event", self.delete_event) self.window.set_border_width(10) table = gtk.Table(7, 2, True) self.window.add(table) login_entry_label = gtk.Label ("Username:") table.attach(login_entry_label, 0, 2, 0, 1) login_entry_label.show() login_entry.set_max_length(20) table.attach(login_entry, 0, 2, 1, 2) login_entry.show() password_entry_label = gtk.Label ("Password:") table.attach(password_entry_label, 0, 2, 2, 3) password_entry_label.show() password_entry.set_max_length(30) password_entry.set_visibility(False) table.attach(password_entry, 0, 2, 3, 4) password_entry.show() table.attach(status_entry_label, 0, 2, 4, 5) status_entry_label.show() local_button = gtk.Button("Local connection") local_button.connect("clicked", self.callback, "local") table.attach(local_button, 0, 1, 5, 6) local_button.show() remote_button = gtk.Button("External connection") remote_button.connect("clicked", self.callback, "remote") table.attach(remote_button, 1, 2, 5, 6) remote_button.show() button = gtk.Button("Exit") button.connect("clicked", lambda w: gtk.main_quit()) table.attach(button, 0, 2, 6, 7) button.show() table.show() self.window.show() def main(): gtk.main() return 0 login_entry = gtk.Entry() password_entry = gtk.Entry() status_entry_label = gtk.Label ("CTRL+ALT+ENTER - toggle fullscreen") if __name__ == "__main__": Table() main()