From 71ab48fac57c3b9edc53646af0ec09d9ae406876 Mon Sep 17 00:00:00 2001 From: zlaxy Date: Tue, 6 Jun 2017 11:40:32 +0300 Subject: [PATCH] Initial commit --- LICENSE | 30 ++++++++++++++ README.md | 6 +++ pygtkrdp.png | Bin 0 -> 11845 bytes pygtkrdp.py | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 147 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 pygtkrdp.png create mode 100644 pygtkrdp.py diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..830a2a8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,30 @@ +pyGtkRDP + +pyGtkRDP is released under the DWTW license. + +This program is free software; you can redistribute it and/or modify it under the terms of the Do What Thou Wilt License. + +DO WHAT THAU WILT +TO PUBLIC LICENSE + +Version 2.5 + +Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. Do what thou wilt shall be the whole of the Law. + +Anyone is allowed to copy and distribute the copies of this license agreement in whole or in part, as well as modify it without any other limitations. + +DWTW – a license with a single requirement: DO WHAT THOU WILT + +The license provides more freedom than any other one (such as GPL or BSD) and does not require saving the license text on copying. + +DWTW – an accomplished and eligible license for free text (including the software, documentation and artwork). + +The license does not contain "no warranty" clause. DWTW can be used in countries that do not legally acknowledge the transition to public domain. + +Summary: + +An author-creator gives his or her source code to the world for free, without becoming distracted by worldly thinking regarding how and why the others will use it. diff --git a/README.md b/README.md new file mode 100644 index 0000000..3aad4f0 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +pyGtkRDP version 0.99 + +Simple GUI application for freerdp or rdesktop connection + +Current command line adapted for nightly builds of FreeRDP ( https://github.com/FreeRDP/FreeRDP/wiki/PreBuilds ). +If you want to use rdesktop or another RDP client, change the source accordingly. diff --git a/pygtkrdp.png b/pygtkrdp.png new file mode 100644 index 0000000000000000000000000000000000000000..a1dcbd0ccadf7a4c214a00e33c74a6240395711a GIT binary patch literal 11845 zcmaL7WmFu|)9%~2ySoz{f)m``-Q6{~Lm)ta;O_1gJh;0CcXtTxFmTELJ?~vd?ma!L zyJywjy=QuVsQT4Y6|STpi3E=i4*&p?w3L_%0DuX7e7}YT|G3tNMRI-IpiN{Y#enyJ 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 DFError: 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()