Add config and fullscreen/save password checkboxes
This commit is contained in:
parent
44de72e414
commit
0837319572
|
@ -1,4 +1,4 @@
|
|||
pyGtkRDP version 0.99
|
||||
pyGtkRDP version 1.0
|
||||
|
||||
Simple GUI application for freerdp or rdesktop connection
|
||||
|
||||
|
|
BIN
pygtkrdp.png
BIN
pygtkrdp.png
Binary file not shown.
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
105
pygtkrdp.py
105
pygtkrdp.py
|
@ -1,38 +1,50 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# example table.py
|
||||
|
||||
import pygtk
|
||||
pygtk.require('2.0')
|
||||
import gtk
|
||||
import subprocess
|
||||
import base64
|
||||
import ConfigParser
|
||||
from os import path
|
||||
|
||||
# ===== 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"
|
||||
string_l = "xfreerdp /drive:share,/media /bpp:15 /jpeg /cert-ignore /v:192.168.1.128"
|
||||
string_r = "xfreerdp /drive:share,/media /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"
|
||||
# ==============================
|
||||
#string_l = "rdesktop -z -a 15 -k en-us -r disk:share=/media 192.168.1.128"
|
||||
#string_r = "rdesktop -z -a 8 -k en-us -r disk:share=/media external.domain:3389"
|
||||
|
||||
conf_file = path.expanduser("~") + '/.config/pygtkrdesktop.conf'
|
||||
|
||||
class Table:
|
||||
|
||||
def callback(self, widget, data=None):
|
||||
def Connect(self, widget, data=None):
|
||||
name = login_entry.get_text()
|
||||
password = password_entry.get_text()
|
||||
SaveLogin(name, password)
|
||||
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
|
||||
|
||||
if fullscreen_check.get_active():
|
||||
string += " /f"
|
||||
# ===== rdesktop:
|
||||
# string += " -f"
|
||||
else:
|
||||
string += " /w:800 /h:600"
|
||||
# ===== rdesktop:
|
||||
# string += ""
|
||||
|
||||
p = subprocess.Popen(string, shell=True, stderr=subprocess.PIPE, )
|
||||
streamdata = p.communicate()[0]
|
||||
rc = p.returncode
|
||||
|
@ -48,6 +60,18 @@ class Table:
|
|||
# Uncomment to check errorcode:
|
||||
# print "Error code", rc
|
||||
|
||||
def LoginEnterPressed(self, widget, event):
|
||||
if gtk.gdk.keyval_name(event.keyval) == 'Return':
|
||||
password_entry.grab_focus()
|
||||
return True
|
||||
return False
|
||||
|
||||
def PasswordEnterPressed(self, widget, event):
|
||||
if gtk.gdk.keyval_name(event.keyval) == 'Return':
|
||||
self.Connect(widget, "local")
|
||||
return True
|
||||
return False
|
||||
|
||||
def delete_event(self, widget, event, data=None):
|
||||
gtk.main_quit()
|
||||
return False
|
||||
|
@ -57,7 +81,7 @@ class Table:
|
|||
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)
|
||||
table = gtk.Table(9, 2, True)
|
||||
self.window.add(table)
|
||||
|
||||
login_entry_label = gtk.Label ("Username:")
|
||||
|
@ -66,7 +90,10 @@ class Table:
|
|||
|
||||
login_entry.set_max_length(20)
|
||||
table.attach(login_entry, 0, 2, 1, 2)
|
||||
if conf.has_option("login", "saved"):
|
||||
login_entry.set_text(conf.get("login", "saved"))
|
||||
login_entry.show()
|
||||
login_entry.connect('key-press-event', self.LoginEnterPressed)
|
||||
|
||||
password_entry_label = gtk.Label ("Password:")
|
||||
table.attach(password_entry_label, 0, 2, 2, 3)
|
||||
|
@ -76,28 +103,70 @@ class Table:
|
|||
password_entry.set_visibility(False)
|
||||
table.attach(password_entry, 0, 2, 3, 4)
|
||||
password_entry.show()
|
||||
if conf.has_option("login", "saved"):
|
||||
password_entry.grab_focus()
|
||||
if conf.has_option("login", "password"):
|
||||
password_entry.set_text(base64.b32decode(base64.b16decode(base64.b64decode(conf.get("login", "password")))))
|
||||
password_entry.connect('key-press-event', self.PasswordEnterPressed)
|
||||
|
||||
table.attach(status_entry_label, 0, 2, 4, 5)
|
||||
status_entry_label.show()
|
||||
|
||||
fullscreen_check.set_tooltip_text("If checked – remote connection will be fullscreen, if no – windowed. Press CTRL+ALT+ENTER to toggle fullscreen.")
|
||||
if conf.has_option("login", "fullscreen"):
|
||||
if conf.get("login", "fullscreen") == 'True':
|
||||
fullscreen_check.set_active(True)
|
||||
else:
|
||||
fullscreen_check.set_active(False)
|
||||
else:
|
||||
fullscreen_check.set_active(True)
|
||||
table.attach(fullscreen_check, 0, 2, 5, 6)
|
||||
fullscreen_check.show()
|
||||
|
||||
password_check.set_tooltip_text("If checked – passwrod will be saved in file. It's unsafe feature, please, be careful.")
|
||||
if conf.has_option("login", "savepassword"):
|
||||
if conf.get("login", "savepassword") == 'True':
|
||||
password_check.set_active(True)
|
||||
else:
|
||||
password_check.set_active(False)
|
||||
else:
|
||||
password_check.set_active(False)
|
||||
table.attach(password_check, 0, 2, 6, 7)
|
||||
password_check.show()
|
||||
|
||||
local_button = gtk.Button("Local connection")
|
||||
local_button.connect("clicked", self.callback, "local")
|
||||
table.attach(local_button, 0, 1, 5, 6)
|
||||
local_button.set_tooltip_text("Connection via LAN (using internal IP.")
|
||||
local_button.connect("clicked", self.Connect, "local")
|
||||
table.attach(local_button, 0, 1, 7, 8)
|
||||
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.set_tooltip_text("Connection via WAN (using external IP).")
|
||||
remote_button.connect("clicked", self.Connect, "remote")
|
||||
table.attach(remote_button, 1, 2, 7, 8)
|
||||
remote_button.show()
|
||||
|
||||
button = gtk.Button("Exit")
|
||||
button.connect("clicked", lambda w: gtk.main_quit())
|
||||
table.attach(button, 0, 2, 6, 7)
|
||||
table.attach(button, 0, 2, 8, 9)
|
||||
button.show()
|
||||
|
||||
table.show()
|
||||
self.window.show()
|
||||
|
||||
def SaveLogin(login, password):
|
||||
if not conf.has_section("login"):
|
||||
conf.add_section("login")
|
||||
conf.set("login", "saved", login)
|
||||
conf.set("login", "fullscreen", fullscreen_check.get_active())
|
||||
conf.set("login", "savepassword", password_check.get_active())
|
||||
if password_check.get_active():
|
||||
conf.set("login", "password",
|
||||
base64.b64encode(base64.b16encode(base64.b32encode(password))))
|
||||
else:
|
||||
conf.remove_option("login", "password")
|
||||
conf.write(open(conf_file, "w"))
|
||||
|
||||
def main():
|
||||
gtk.main()
|
||||
return 0
|
||||
|
@ -105,7 +174,13 @@ def main():
|
|||
login_entry = gtk.Entry()
|
||||
password_entry = gtk.Entry()
|
||||
status_entry_label = gtk.Label ("CTRL+ALT+ENTER - toggle fullscreen")
|
||||
fullscreen_check = gtk.CheckButton ("Fullscreen mode")
|
||||
password_check = gtk.CheckButton ("Save password (unsafe)")
|
||||
|
||||
if __name__ == "__main__":
|
||||
conf = ConfigParser.RawConfigParser()
|
||||
if not path.exists(conf_file):
|
||||
open(conf_file, 'w')
|
||||
conf.read(conf_file)
|
||||
Table()
|
||||
main()
|
||||
|
|
Loading…
Reference in New Issue